Eclipse 에서 서블릿 프로젝트 맛보기.

ITWeb/개발일반 2012. 3. 20. 15:44
Tomcat Advanced I/O 관련 서블릿 테스트를 해보려고 합니다.
맛보기 들어가 봅시다.. ㅎㅎ


[서블릿 프로젝트생성]
- Eclipse 에서 dynamic web project 로 생성 하시면 됩니다.


- 그 다음은 어떻게 따라 하는지 잘 모르시겠다면.. 아래 링크 참고하세요. ㅋㅋ

- 생성을 완료 하셨으면 WebContent 폴더 아래 index.jsp 파일을 하나 만들어서 HelloWorld 를 찍어 봅니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

Hello World

</body>

</html>


- index.jsp 파일에서 우클릭 Run As -> Run on Server 를 실행해서 결과 화면을 봅니다.



자, 이제 Tomcat Advanced I/O 관련 코딩을 해보겠습니다.
- Servlet 을 하나 생성 합니다.


- 역시 그 다음을 잘 모르시겠다면 아래 링크 참고하세요.

- Servlet 코딩했으면 실행을 시켜야 겠죠.

http://localhost:8080/CONTEXT/SERVLET_CLASSNAME
- CONTEXT : Tomcat 설정 파일중 server.xml 에 보시면 

<Context docBase="proto.dwp.comet" path="/proto.dwp.comet" ..../>


- SERVLET_CLASSNAME : 아래 코드로 예를 들었습니다. ChatServlet.java....

예)
http://localhost:8080/proto.dwp.comet/ChatServlet



[참고문서]


[Tomcat 설정변경]
- server.xml

[Before]
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>


[After]
<Connector connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" useComet="true" redirectPort="8443"/>



[ChatServlet.java]
- 이 파일은 tomcat.apache.org 에 있는 예제 입니다.
- 이걸로 전체 테스트를 진행 하였습니다.
- event.getEventType 이 READ 부분에 보시면 빨간 부분만 추가했습니다.
- 추가한 이유는 server 에서 client 로 message 를 넘길 영역을 테스트 하기 위해서 입니다.
- 녹색 추가 및 주석은 그냥 한글 코드랑 HTML 코드 형태가 아닌 그냥 text 스탈로 처리 하려고 넣었습니다.

[index.jsp]
- ChatServlet 으로 메시지를 request 하고 Server 로 부터 response 를 받는 기능을 담당 합니다.
- XHR 에서 request method 는 POST 로 하셔야 합니다.


[BroadcasterServlet.java]
- 이넘은 Client 에서 Request 를 받는 역할을 하게 됩니다.
- 또한 response 를 하기 위한 작업도 이 넘이 하겠지요.


[MessageSender.java]
- client 로 message 를 전송 하는 역할을 합니다.


[정리하면서]

- 일단 이걸 가지고 뭘 해야 좋을지는 좀더 고민을 해봐야겠다.
- 테스트 하면서 느낀건데 이넘을 테스트 하면서 READ 상태에서 END 가 되지 않을경우 이전 message 에 대한 buffer 를 다 유지하고 있는 것 같다.
- 틀린 내용이라 삭제 합니다.. ㅡ.ㅡ;; 화면 출력할때.. 잘 못 했더라구요..이런.. 
- 코드를 깊게 분석하지 않은 관계로 원인 규명은 다음으로.. ;;;;;
- Server Push 기능이나 Notification Chatting 같은걸 구현 하는데 사용이 가능해 보인다.
- 다만 이런 것들이 HTML5 로 넘어 오면서 많은 부분들이 브라우저에서 처리가 가능해 졌다는 점에서...
- 뭐.. 여기까지만.. ㅋㅋ

: