서블릿 컨텍스의 리스닝을 위해서는 ServletContextListner를 구현하면 되는데 이 인터페이스의 이벤트를 이용하여 컨텍스가
시작되거나 종료될 때 어떤일 을 할 수 있다.
contextDestroyed는 컨텍스가 더 이상의 웹요청을 받을 수 없을 때 , 즉 톰캣등이 종료될 때 호출되는 이벤트이고
contextInitialized 메소드는 톰캣등이 시작됨으로서 컨텍스트가 요청을 받아들 일 수 있을때 호출되는 이벤트이다.
결국 서블릿 컨텍스트가 초기화 되거나 소멸될 때 어떤 일을 하고싶을 때 이용하면 된다.
1. OnjListener.java
package onj;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.*;
import javax.servlet.ServletContextEvent;
import javax.servlet.*;
public class OnjListener implements ServletContextListener {
private ServletContext ctx = null;
//Tomcat Shutdown 시키면 아래 메시지 확인
public void contextDestroyed(ServletContextEvent event) {
System.out.println(">>> onjweb Webapp destroyed!!");
this.ctx = null;
}
//Tomcat시작시 아래 메시지 출력
public void contextInitialized(ServletContextEvent event) {
this.ctx = event.getServletContext();
System.out.println(">>> onjweb Webapp start!!");
}
}
private ServletContext ctx = null;
//Tomcat Shutdown 시키면 아래 메시지 확인
public void contextDestroyed(ServletContextEvent event) {
System.out.println(">>> onjweb Webapp destroyed!!");
this.ctx = null;
}
//Tomcat시작시 아래 메시지 출력
public void contextInitialized(ServletContextEvent event) {
this.ctx = event.getServletContext();
System.out.println(">>> onjweb Webapp start!!");
}
}
2. web.xml(리스너등록)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<listener>
<listener-class>onj.OnjListener</listener-class>
</listener>
</web-app>
<listener-class>onj.OnjListener</listener-class>
</listener>
</web-app>
3. 결과(통캣을 기동하고 리로드 시켜보라.)
Tomcat을 그냥 꺼버리면 contextDestroyed에서 정의한 메시지가 출력안되니 , 테스트를 위해
OnjListener.java를 살짝 수정해 보라.
Tomcat의 conf/context.xml에서 Context정의시 reloadable=true 로 되어 있다면 Context가 reload되니 그때 contextDestroyed() 가 호출된다.
[context.xml]
19라인쯤에 <context> 를 <Context reloadable="true">로 수정 (자바코드 변경 시 톰캣 자동 리로드 설정)
19라인쯤에 <context> 를 <Context reloadable="true">로 수정 (자바코드 변경 시 톰캣 자동 리로드 설정)
11월 09, 2013 3:54:15 오전 org.apache.catalina.core.StandardService
startInternal
INFO: Starting service Catalina
11월 09, 2013 3:54:15 오전 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.42
11월 09, 2013 3:54:16 오전 org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
>>> onjweb Webapp start!!
11월 09, 2013 3:54:16 오전 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
11월 09, 2013 3:54:16 오전 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
11월 09, 2013 3:54:16 오전 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1155 ms
11월 09, 2013 3:54:46 오전 org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/onjweb] has started
>>> onjweb Webapp destroyed!!
11월 09, 2013 3:54:47 오전 org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
>>> onjweb Webapp start!!
11월 09, 2013 3:54:47 오전 org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/onjweb] is completed
INFO: Starting service Catalina
11월 09, 2013 3:54:15 오전 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.42
11월 09, 2013 3:54:16 오전 org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
>>> onjweb Webapp start!!
11월 09, 2013 3:54:16 오전 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
11월 09, 2013 3:54:16 오전 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
11월 09, 2013 3:54:16 오전 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1155 ms
11월 09, 2013 3:54:46 오전 org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/onjweb] has started
>>> onjweb Webapp destroyed!!
11월 09, 2013 3:54:47 오전 org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
>>> onjweb Webapp start!!
11월 09, 2013 3:54:47 오전 org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/onjweb] is completed
[개강임박강좌, 오프라인교육장에 오시면 보다 자세히 배울 수 있습니다.]
오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)
[주간]
[11/25]Spring3.X, MyBatis, Hibernate실무과정
[11/25]초보자를위한실전SQL
[11/25]안드로이드개발자과정
[11/25]iPhone 하이브리드 앱 개발 실무과정
[평일야간]
[11/22]자바초보에서안드로이드까지
[11/26]JAVA&WEB프레임워자실무과정
[11/26]iPhone하이브리드앱개발실무과정
[11/26]웹퍼블리싱 마스터
[11/27]SQL초보에서실전전문가까지
[11/28]Spring3.X, MyBatis, Hibernate실무과정
[주말]
[11/23]JAVA&WEB프레임워크실무과정
[11/23]웹퍼블리싱 마스터
[11/23]C#,ASP.NET마스터
[11/30]SQL초보에서전문가까지
[11/30]Spring3.X,MyBatis,Hibernate실무과정
댓글 없음:
댓글 쓰기