티스토리 뷰

반응형

서블릿 리스너와 필터

서블릿 리스너

  • 서블릿 컨테이너에서 발생하는 주요 이벤트를 감지하고 각 이벤트에 특별한 작업이 필요한 경우에 사용한다.

    • 서블릿 컨텍스트 수준의 이벤트

      • 컨텍스트 라이프사이클 이벤트

        • 컨테스트 라이프사이클 이벤트의 리스너를 만들어보자

          • 리스너
          public class MyListener implements ServletContextListener {
                //리스너 초기 설정
              @Override
              public void contextInitialized(ServletContextEvent sce) {
                  System.out.println("Context Initialized");
                  sce.getServletContext().setAttribute("name", "mesung");
              }
          
              @Override
              public void contextDestroyed(ServletContextEvent sce) {
                  System.out.println("context destroyed");
              }
          }
          
          • web.xml 리스너 설정
          <listener>
            <listener-class>com.mesung.MyListener</listener-class>
          </listener>
          • 리스너 호출 in Serlvet
          //HelloServlet
          
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
            //req와 resp는 filter에서 등록된 ServletRequest와 ServletResponse와 연결되는 것이다.
            System.out.println("doGet");
            resp.getWriter().println("<html>");
            resp.getWriter().println("<head>");
            resp.getWriter().println("<body>");
            resp.getWriter().println("<h1>hello " + getServletContext().getAttribute("name") + "servlet</h1>");
            resp.getWriter().println("</body>");
            resp.getWriter().println("</head>");
            resp.getWriter().println("</html>");
          }
          • 컨텍스트 라이프사이클에 맞춰, 초기화 할 시점과 끝나는 시점에 이벤트를 설정한 것이다.
- 컨텍스트 애트리뷰트 변경 이벤트
  • 세션 수준의 이벤트

    • 세션 라이프사이클 이베트
    • 세션 애트리뷰트 변경 이벤트

서블릿 필터

  • 들어온 요청을 서블릿으로 보내고, 또 서블릿이 작성한 응답을 클라이언트로 보내기 전에 특별한 처리가 필요한 경우에 사용한다.

  • 필터들은 체인 형태의 구조이다.

  • image
  • 간단한게 소스로 구성해보자.

    • 필터
    import javax.servlet.*;
    
    public class MyFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            System.out.println("Filter init");
    
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.println("Filter");
            filterChain.doFilter(servletRequest, servletResponse);  //다음 필터로 연결을 해줘야한다.
              //만약 마지막 필터일 경우 다음 연결은 servlet이다.
        }
    
        @Override
        public void destroy() {
            System.out.println("Filter Destroy");
        }
    }
    • web.xml
    <filter>
      <filter-name>myFilter</filter-name>
      <filter-class>com.mesung.MyFilter</filter-class>
    </filter>
    
    <filter-mapping>
      <filter-name>myFilter</filter-name>
      <!-- 적용 서블릿 이름 (만약 여러 개의 서블릿에 적용할 시 url-pattern으로 설정한다.)-->
      <servlet-name>hello</servlet-name>
    </filter-mapping>
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함