본문 바로가기

web../servlet/jsp

ServletContextListener 란?

" ServletContextListener "

서블릿컨텍스트리스너는 컨텍스트 초기화 파라미터를 읽어들여 파라미터를 인자로 하여 객체를 생성한다.그 다음 리스너는 객체를 ServletContext 속성에 묶어 둔다.

그러면 서블릿에서는 객체를 끄집어 낼 수가 있다. 이 부분이 핵심인데 이렇게 하면 서블릿이 객체를 공유 할 수 가 있다. 이제 서블릿이 컨텍스트 파라미터를 읽을 필요가 없다.객체를 끄집어 내어 사용하면 된다.



import javax.servlet.ServletContextListener;

public class MyServletContextListener implements ServletContextListener{

public void contextInitialized(ServletContextEvent event)

        {

//DB연결이라면 초기화 코딩, 객체 컨텍스트에 담기.

ServletContext sc = event.getServletContext();         //이벤트에게 컨텍스트를 얻어온다

String value = sc.getInitParameter("test");         //컨텍스트에서 초기화 파라미터를 읽는다

Dog dog = new Dog(value); //일반 자바객체를 만들고

sc.setAttribute("dog",dog); //콘텍스트에 저장한다.

}

public void contextDestroyed(ServletContextEvent event)

       {

// DB연결이라면 해제코딩, 객체라면 할 일 없음. 컨텍스트가 소멸된다는 것은 모든 애플리 케이션이 

        //    소모 되고 Dog객체도 사라질것이기 때문이다.?? 모든 어플리케이션이 소모될 거라면 DB연결도 자동으로 끊김..

}

}

* ServletContext 이벤트를 리스닝하기 위해선 ServletContextListener를 구현해야 한다.

* 그 다음 컴파일된 클래스를 WEB-INF/calsses 디렉토리에 배포하고 DD 파일에 <listener> 항목을 추가하여 

* 컨테이너에게 이런 놈이 있다는 것을 알려야 한다.



[참고] 클래스가 들어갈수 있는 부분은 WEB-INF/classes 뿐만은 아니다. 컨테이너가 클래스를 찾는 곳 중 하나일 뿐이다.

> DD 에서...

<listener>

<listener-class> org.thinker.MyservletContextListener </listener-class>

</listener>

>컨텍스트리스너를 사용하려면 3개의 클래스와 DD파일이 필요하다. ServletContextListener를 구현한 클래스,

                  평범한 자바객체 클래스, 서블릿 클래스, DD파일



- 다른종류의 리스너들 - ( 만약 필요하다면 API찾아보자 )

javax.servlet.ServletContextAttributeListener : 컨텍스트에 속성을 추가,제거,수정했는지 알고 싶을 때..

javax.servlet.http.HttpSessionListener : 얼마나 많은 동시 사용자가 물려 있는지..

javax.servlet.HttpRequestListener : 요청이 들어올때마가 알고 싶을때..로그를 남기고 싶어서 그럴때.

javax.servlet.ServletRequestAttributeListener : Request속성이 추카,제거,수정 되었는지 알고 싶을때.

javax.servlet.http.HttpSessionBindingListener : 속성 객체가 하나 있는데 이 객체가 세션에 바인딩 되었는지 아니면 제거 

                                                                          되었는지 알고싶을때.

javax.servlet.http.HttpSessionAttributeListener : 세션 속성이 추가,제거,수정 되었는지 알고 싶을때.

javax.servlet.http.HttpSessionActivationListener : 속성 객체가 하나 있는데, 세션에 바인딩한 이 타입의 객체가 다른 

                                                                             JVM으로 옮겨 갔는지,또는 왔는지 알고 싶을때.

'web.. > servlet/jsp' 카테고리의 다른 글

서블릿 welcome-file 변경  (0) 2013.03.19
ServletConfig & ServletContext  (0) 2013.01.09
HttpServletRequest 객체 & HttpServletResponse 객체  (0) 2013.01.09
서블릿의 생명주기 & 멱등  (0) 2013.01.09
HTML과 HTTP  (0) 2013.01.09