[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("종료될 때 호출되는 메서드");
}
}
'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 |