Spring/Spring 웹 MVC
[스프링 웹 MVC] 서블릿 리스너와 필터
메성
2020. 2. 11. 01:57
반응형
서블릿 리스너와 필터
서블릿 리스너
-
서블릿 컨테이너에서 발생하는 주요 이벤트를 감지하고 각 이벤트에 특별한 작업이 필요한 경우에 사용한다.
-
서블릿 컨텍스트 수준의 이벤트
-
컨텍스트 라이프사이클 이벤트
-
컨테스트 라이프사이클 이벤트의 리스너를 만들어보자
- 리스너
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>"); }
- 컨텍스트 라이프사이클에 맞춰, 초기화 할 시점과 끝나는 시점에 이벤트를 설정한 것이다.
-
-
-
- 컨텍스트 애트리뷰트 변경 이벤트
-
세션 수준의 이벤트
- 세션 라이프사이클 이베트
- 세션 애트리뷰트 변경 이벤트
서블릿 필터
-
들어온 요청을 서블릿으로 보내고, 또 서블릿이 작성한 응답을 클라이언트로 보내기 전에 특별한 처리가 필요한 경우에 사용한다.
-
필터들은 체인 형태의 구조이다.
-
간단한게 소스로 구성해보자.
- 필터
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>
반응형