본문 바로가기

Programing

Comet 서블릿 처리하기

이벤트 타입

org.apache.catalina.CometEvent.EventType 에서 4개의 타입을 정의하고 있다.

획득법: CometEvent.getEventType()

총 4가지 타입이다.

CometEvent.EventType.BEGIN

CometEvent.EventType.READ

CometEvent.EventType.END

END일 경우 무한적으로 계속 발생을 하는데, CoemtEvent.close()를 호출해주면 더이상 END 이벤트가 발생하지 않는다.

이상하게도 꼭 2번 호출이 된다.

CometEvent.EventType.ERROR

ERROR일 경우에는 서브타입을 가지는데 그외(BEGIN, END, READ는?)에서 사용하면 NullPointerException이 날 수 있으니 주의

 

보통의 Comet 요청의 라이프 사이클은 아래와 같다.

BEGIN -> READ -> READ -> READ -> ERROR/TIMEOUT-> END -> END

예제코드

 

서브 타입

org.apache.catalina.CometEvent.EventSubType 에서 6개의 서브타입을 정의하고 있다.

획득법: CometEvent.getEventSubType()

CLIENT_DISCONNECT

IOEXCEPTION

SERVER_SHUTDOWN

SESSION_END

TIMEOUT

WEBAPP_RELOAD

 

요청과 응답을 처리해주기 위해서는 HttpServletRequest, HttpServletResponse를 적절히 잘 처리해주어야 한다.

HttpServletRequest

서블릿 요청에 대한 정보가 담겨 있다. 이것은 일반 서블릿에서 사용하는
javax.servlet.http.HttpServletRequest 인터페이스이다.

획득법: CometEvent.getHttpServletRequest()

 

RESTful 에서는 URL 경로가 중요하니 획득법을 정리해보자.

http://host/context/map/path1/path2/path3 를 HTTP GET으로 호출했다고 치자.

아래와 같은 web.xml에 서블릿 매핑이 되어 있다고 한다.

  <servlet-mapping>
    <servlet-name>ServletHandler</servlet-name>
    <url-pattern>/map/*</url-pattern>
  </servlet-mapping>

  1. HttpServletRequest request = CometEvent.getHttpServletRequest();

  2. request.getContextPath();  => 콘텍스트 : /context

  3. request.getServletPath();  => 서블릿 경로 : /map

  4. request.getPathInfo();     => 맨 마지막 경로 : /path1/path2/path3

  5. request.getRequestURL();   => 전체 URL : http://host/context/map/path1/path2/path3

 

HttpServletResponse

서블릿이 요청할 수 있는 인스턴스이다. 이것도 역시 일반 서블릿에서 사용하는
javax.servlet.http.HttpServletResponse 인터페이스이다.

획득법: CometEvent.getHttpServletResponse()

'Programing' 카테고리의 다른 글

그래프 그리기  (0) 2012.10.15
Comet 부하테스트  (0) 2012.09.21
톰캣 - 이클립스에서 Comet 프로젝트 만들기  (0) 2012.09.21
Socket (소켓) 프로그래밍  (0) 2012.09.21
SNMP - 래퍼 net-snmp  (0) 2012.09.21