2013-04-19 2 views
3

내 서블릿에서 요청을 받으면 관련이 있고 몇 가지 지침이 포함 된 하나의 수신기 클래스를 실행하고 싶습니다.내 서블릿에서 요청을받을 때마다 Listener 클래스를 실행하는 방법

그래서 나는이 같은에 myListener의 인터페이스 ServletContextListener를 구현 : 내 web.xml 파일에

public class MyContextListener implements ServletContextListener { 

    @Override 
    public void contextDestroyed(ServletContextEvent arg0) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void contextInitialized(ServletContextEvent arg0) { 
     System.out.println("Context Created"); 
    } 

} 

:

내 시작 프로그램에 대한 요청을 수신 할 때 난 내 리스너를 실행할 수있는 방법을 그래서
<servlet> 
    <servlet-name>StartUp</servlet-name> 
    <servlet-class>com.servlets.StartUp</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>StartUp</servlet-name> 
    <url-pattern>/StartUp</url-pattern> 
    </servlet-mapping> 

    <listener> 
    <listener-class>com.servlets.MyContextListener</listener-class> 
    </listener> 

서블릿?

답변

3

ServletContextListener은 초기화시 대기하고 ServletContext을 파괴하도록 설계되었습니다. 즉, webapp의 시작 및 종료시에만 호출됩니다.

당신은 대신 ServletRequestListener 필요

@WebListener 
public class MyRequestListener implements ServletRequestListener { 

    @Override 
    public void requestInitialized(ServletRequestEvent event) { 
     System.out.println("Request initialized"); 
    } 

    @Override 
    public void requestDestroyed(ServletRequestEvent event) { 
     System.out.println("Request destroyed"); 
    } 

} 

또는, 아마도 단순한 servlet filter합니다. 차이점은 특정 URL 패턴이나 특정 서블릿을 수신하도록 설정하고 특히 전달 된 요청, 포함 된 요청 및/또는 오류가 발생한 요청까지도 수신하도록 구성 할 수 있다는 것입니다.

@WebFilter("/StartUp") // or @WebFilter(servletNames={"StartUp"}) 
public class StartUpServletFilter implements Filter { 

    @Override 
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     System.out.println("Before StartUp servlet is invoked"); 
     chain.doFilter(req, res); 
     System.out.println("After StartUp servlet is invoked"); 
    } 

    // Don't forget the init() and destroy() boilerplate. 

} 
+0

+1. Java EE 6 : 리스너 클래스 정의 (http://docs.oracle.com/javaee/6/tutorial/doc/bnafi.html#bnafk), [Java EE 5 : 리스너 클래스 정의] (http://docs.oracle.com/javaee/5/tutorial/doc/bnafi.html#bnafk) – informatik01

관련 문제