[Servlet & JSP] 서블릿 listener
서블릿에서 listener는 서블릿 컨테이너를 이용하면서 발생하는 이벤트를 감지하고 특정 이벤트가 발생했을 때 동작하는
listener는 스프링 프레임워크의 진입점으로 서블릿 컨테이너가 동작할 때 스프링 설정 내용을 읽고 스프링 컨테이너가 동작할 수 있도록한다.
서블릿 listener는 크게 3가지 종류의 이벤트를 감지하는데 context, session, request이다.
context listener
context listener는 ServletContextListener와 ServletContextAttributeListener가 있다.
ServletContextListener는 웹어플리케이션의 시작이나 종료를 감지하는 listener이며 ServletContextAttributeListener는 context에 attribute를 추가, 수정, 제거 할 때 동작하는 listener이다.
@WebServlet("/context")
public class ContextListenerServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = request.getServletContext();
context.setAttribute("key", "value");
context.setAttribute("key", "replaced value");
context.removeAttribute("key");
}
}
context listener의 동작을 확인해보기 위해서 context를 생성하고 attribute의 추가, 수정, 제거를 구현한다.
@WebListener
public class ContextLister implements ServletContextListener, ServletContextAttributeListener {
public ContextLister() {
System.out.println("context 생성자");
}
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("context init");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("context destroyed");
}
@Override
public void attributeAdded(ServletContextAttributeEvent scae) {
System.out.println("context added");
}
@Override
public void attributeReplaced(ServletContextAttributeEvent scae) {
System.out.println("context replaced");
}
@Override
public void attributeRemoved(ServletContextAttributeEvent scae) {
System.out.println("context removed");
}
}
ContextListener는 ServletContextListener와 ServletContextAttributeListener 인터페이스를 implements하고 @WebListener 어노테이션을 사용하여 구현할 수 있다.
context 생성자 메소드와 contextInitialized 메소드는 톰캣을 시작하게 되면 호출되며 종료하게 되면 contextDestroyed 메소드를 호출한다.
context에 setAttribute를 통해서 attibute의 추가, 수정, 제거될 때 attrubuteAdded, attributeReplaced, attributeRemoved 메소드가 호출된다.
session listener
sessionListener에는 HttpSessionListener와 HttpSessionAttributeListener가 있다.
HttpSessionListener는 HTTP 세션의 시작이나 종료를 감지하는 listener이며 HttpSessionAttributeListener는 HttpSession에 attribute를 추가, 수정, 제거 할 때 동작하는 listener이다.
@WebServlet("/session")
public class SessionListenerServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.setAttribute("key", "value");
session.setAttribute("key", "replaced value");
session.removeAttribute("key");
session.invalidate();
}
}
session listener의 동작을 확인해보기 위해서 session을 생성하고 attribute의 추가, 수정, 제거를 구현한다.
session의 sessionDestroyed메소드의 동작을 확인하기 위해서 invalidate로 세션을 만료시킨다.
@WebListener
public class SessionListener implements HttpSessionListener, HttpSessionAttributeListener {
public SessionListener() {
System.out.println("session 생성자");
}
public void sessionCreated(HttpSessionEvent se) {
System.out.println("session created");
}
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("session destoryed");
}
public void attributeAdded(HttpSessionBindingEvent se) {
System.out.println("session added");
}
public void attributeReplaced(HttpSessionBindingEvent se) {
System.out.println("session replaced");
}
public void attributeRemoved(HttpSessionBindingEvent se) {
System.out.println("session removed");
}
}
sessionListener는 HttpSessionListener와 HttpSessionAttributeListener 인터페이스를 implements하고 @WebListener 어노테이션을 사용하여 구현할 수 있다.
session생성자 메소드는 톰캣을 시작하게 되면 호출된다.
sessionCreated메소드는 세션이 최초에 생성될 때 호출되며 이미 세션이 생성되었다면 호출되지 않는다.
session에 setAttribute를 통해서 attibute의 추가, 수정, 제거될 때 attrubuteAdded, attributeReplaced, attributeRemoved 메소드가 호출된다.
invalidate 메소드를 통해서 세션이 만료되면 sessionDestroyed 메소드를 호출한다.
세션이 만료되면서 제거되지 않은 attribute가 있다면 attribute가 제거되면서 attributeRemoved 메소드가 호출된다.
request listener
request listener에는 ServletRequestListener와 ServletRequestAttributeListener가 있다.
ServletRequestListener는 ServletRequest의 시작이나 종료를 감지하는 listener이며 ServletRequestAttributeListener는 ServletRequest에 attribute를 추가, 수정, 제거 할 때 동작하는 listener이다.
@WebServlet("/request")
public class RequestListenerServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("key", "value");
request.setAttribute("key", "replaced value");
request.removeAttribute("key");
}
}
request listener는 서블릿에 요청이 들어오면 request가 생성되기때문에 attribute의 추가, 수정, 제거만 구현한다.
@WebListener
public class RequestListener implements ServletRequestListener, ServletRequestAttributeListener {
public RequestListener() {
System.out.println("request 생성자");
}
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("request init");
}
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("request destroyed");
}
public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("request attributeAdded");
}
public void attributeReplaced(ServletRequestAttributeEvent srae) {
System.out.println("request attributeReplaced");
}
public void attributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("request attributeRemoved");
}
}
requestListener는 ServletRequestListener와 ServletRequestAttributeListener 인터페이스를 implements하고 @WebListener 어노테이션을 사용하여 구현할 수 있다.
request 생성자 메소드는 톰캣을 시작하게 되면 호출된다.
requestInitialized 메소드는 서블릿에 요청이 왔을 때 호출되며 응답을 완료하면 requestDestroyed 메소드를 호출한다.
request 에 setAttribute를 통해서 attibute의 추가, 수정, 제거될 때 attrubuteAdded, attributeReplaced, attributeRemoved 메소드가 호출된다.
'Backend > Servlet & JSP' 카테고리의 다른 글
[Servlet & JSP] JSP 태그 종류 (0) | 2023.05.28 |
---|---|
[Servlet & JSP] JSP의 역할 (0) | 2023.05.27 |
[Servlet & JSP] 서블릿 filter (0) | 2023.05.25 |
[Servlet & JSP] 서블릿 cookie와 session (0) | 2023.05.24 |
[Servlet & JSP] 서블릿 forward와 redirect (0) | 2023.05.23 |
댓글