- [JSP] 17. 서블릿 필터와 리스너2024년 07월 03일
- Song hyun
- 작성자
- 2024.07.03.:51
728x90반응형[JSP] 17. 서블릿 필터와 리스너
1. 서블릿 필터-필터는 서블릿이나 JSP에 요청이 도달하기 전에, 요청과 응답을 가로채서 처리하는 컴포넌트이다.
-필터는 요청을 수정하거나, 응답을 변경하거나, 로깅 및 인증 등의 작업을 수행할 수 있다.
-필터는 클라이언트와 자원 사이에 여러 개의 필터가 모여 하나의 체인을 형성할 수도 있다.
-WAS 서버에 필터를 설정하는 방법은 (1) web,xml 파일에서 설정하거나 / (2) 어노테이션을 통해 사용할 수 있다.
-Java 코드에서 필터 사용 시, Filter라는 인터페이스를 구현하면 된다.
-Filter->doFilter(doGet/doPost를 생각해보자)
-필터에서 다음 필터체인으로 넘길 때, request/response를 함께 넘긴다.
2. 서블릿 필터의 역할
(1) 요청 및 응답의 전처리 및 후처리
-응답 전/후의 처리를 전처리/후처리라고 한다.
(2) 로깅 처리
(3) 인증 및 권한 부여
*꼭 필터에서만 인증 처리를 하진 않는다! 하지만 할 수도 있다!
(4) 데이터 압축
3. 서블릿 리스너
(1) 서블릿 리스너의 역할
-컨테이너에서 발생하는 이벤트를 모니터링하다가, 특정 이벤트가 발생하면 실행되는 특수한 클래스이다.
-즉 리스너는 특정한 사건이 일어났을 때, 그것을 알아차리고 적절한 처리를 하는 역할!
-WAS 서버에서 리스너를 설정하는 방법은 서블릿과 마찬가지로 web.xml 파일에서 설정하거나, 자바 코드 측에 어노테이션을 사용해 설정할 수 있다.
(2) 리스너의 주요 기능
-애플리케이션 시작 및 종료 감지
-세션 생성 및 소멸 감지
-요청 시작 및 종료 감지
-애플리케이션 속성 변경 감지
4. 시나리오 코드package com.tenco.filters; import java.io.IOException; import jakarta.servlet.DispatcherType; import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; import jakarta.servlet.FilterConfig; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import jakarta.servlet.annotation.WebFilter; /* * 필터 클래스를 만드는 방법 * 1. jakarta.servlet.Filter를 구현해야 한다. (javax.servlet.Filter <-톰캣 9버전) * 2. URL 패턴을 설정해야 한다. (web.xml / 어노테이션 기반 설정 가넝) * */ @WebFilter(urlPatterns="/*",dispatcherTypes= {DispatcherType.REQUEST}) public class SimpleFilter implements Filter{ // 필터가 생성될 때 초기화 작업을 수행하는 메서드! @Override public void init(FilterConfig filterConfig) throws ServletException { // 필요하다면 초기화 코드 작성 System.out.println("SimpleFilter 초기화"); } // 특정 URL 요청이 들어올 때 실행 또는 통과되는 메서드! @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("SimpleFilter doFilter() 메서드 호출됨."); } @Override public void destroy() { System.out.println("종료될 때 호출되는 메서드"); } }
-----------------------package com.tenco.controller; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/home") public class HomeServlet extends HttpServlet { private static final long serialVersionUID = 1L; public HomeServlet() { super(); } // 주소 설계 - http://localhost:8080/fl/home protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("HomeServlet doGet() 메서드 호출"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
위에서는 필터에서 두겟으로 못넘어감.
----------
----------package com.tenco.filters; import java.io.IOException; import jakarta.servlet.DispatcherType; import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; import jakarta.servlet.FilterConfig; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import jakarta.servlet.annotation.WebFilter; /* * 필터 클래스를 만드는 방법 * 1. jakarta.servlet.Filter를 구현해야 한다. (javax.servlet.Filter <-톰캣 9버전) * 2. URL 패턴을 설정해야 한다. (web.xml / 어노테이션 기반 설정 가넝) * */ @WebFilter(urlPatterns="/*",dispatcherTypes= {DispatcherType.REQUEST}) public class SimpleFilter implements Filter{ // 필터가 생성될 때 초기화 작업을 수행하는 메서드! @Override public void init(FilterConfig filterConfig) throws ServletException { // 필요하다면 초기화 코드 작성 System.out.println("SimpleFilter 초기화"); } // 특정 URL 요청이 들어올 때 실행 또는 통과되는 메서드! @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("SimpleFilter doFilter() 메서드 호출됨."); // 다음 필터로 또는 서블릿으로 요청/응답 객체를 전달! chain.doFilter(request,response); } @Override public void destroy() { System.out.println("종료될 때 호출되는 메서드"); } }
728x90반응형'JSP > 기본 이론' 카테고리의 다른 글
[JSP] 20. 세션과 리스너를 함께 사용하기 (0) 2024.07.03 [JSP] 18. 필터를 사용해 특정 IP 차단시켜보기 (0) 2024.07.03 [JSP] 16.server.xml과 context.xml, web.xml (0) 2024.07.03 [JSP] 15. 서블릿과 DB 연동 (0) 2024.07.03 [JSP] 14. 서블릿과 서블릿 컨텍스트 (0) 2024.07.03 다음글이전글이전 글이 없습니다.댓글