SPRING/스프링 MVC

서블릿 리스너와 필터

JUMP개발자 2021. 6. 5. 15:37

서블릿 리스너와 필터 

서블릿 리스너 

- 웹 애플리케이션에서 발생하는 주요 이벤트를 감지하고 각 이벤트에 특별한 작업이 필요한 경우에 사용할 수 있다. 

 

public class MyListner implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("contextInitialized");
        sce.getServletContext().setAttribute("name","jump");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("contextDestroyed");
    }
}


public class HelloServlet extends HttpServlet {

    @Override
    public void init() throws ServletException {
        // 서블릿 생성 (처음 한번마 실행)
        System.out.println("init");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");
        resp.getWriter().write("Hello Servlet " + getName());
    }

    @Override
    public void destroy() {
        System.out.println("destroy");
    }

    private Object getName() {
        return getServletContext().getAttribute("name");
    }
}

Web.xml에 listener 추가

결과

서블릿 필터 

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

구조 

 

 

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 doget");
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {
        System.out.println("Filter destroy");
    }
}

 

실행순서 

Listener -> Filter -> Servlet

종료 순서

Servlet -> Filter -> Listener