개발/JAVA

listener를 사용한 servlet 객체 공유하는 법

신매력 2013. 6. 11. 23:57

초기화 파라미터로 쓸 수 있는것은 String 밖에 없기 때문에, 
객체를 초기화 파라미터로 사용하기 위해서는 Listener를 써야한다.






여러 서블릿간에 특정 객체를 공유할 때 다음과 같이한다. 

(서블릿마다 객체를 각각 생성하지 않는)



 

1. web.xml 에서 Servlet과 Listener 설정



<web-app>
<!-- 서블릿 설정 -->
    <servlet>
        <servlet-name>First</servlet-name>
           <servlet-class>FirstServlet</servlet-class>    <!-- 클래스명 -->
    </servlet>


    <servlet>
        <servlet-name>Second</servlet-name>
        <servlet-class>SecondServlet</servlet-class>
    </servlet>


<!-- 리스너 설정 -->
    <listener>
        <listener-class>ContextListener</listener-class>
    </listener>

</web-app>





2. 리스너 (ContextListener.java)



웹 어플리케이션이 생성될 때 발생하는 이벤트를 처리하는 리스너  : ServletContextListener



 public class ContextListener implements ServletContextListener {


    public void contextInitialized(ServletContextEvent event) {

        Example example = new Example(); // 공유할 객체 생성
        ServletContext sc = event.getServletContext(); 
        sc.setAttribute("common", example);  
    }

    public void contextDestroyed(ServletContextEvent event){
        // TODO
    }
}




3. servlet 구현 (FirstServlet,java)

 public class FisrtServlet {

    
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws Exception {

        ServletContext sc = request.getSession().getServletContext();
        Example ex = (Example) sc.getAttribute("common");
    }
}



getAttribute를 통해서 리스너에서 set해줬던 객체를 가져올 수 있다.