Search
Duplicate
moon
sun

필터 (Filter)

필터 (Filter)

: Java 웹 어플리케이션에서 HTTP 요청과 응답을 중간에서 가로채고 조작하는 데 사용되는 구성요소
여러 서블릿 클래스에서 반복되는 코드를 일괄적으로 처리하기 위하여 사용한다.
필터는 주로 요청과 응답의 헤더 수정, 요청 데이터 검증, 인증 및 권한 부여, 로깅 등과 같은 작업을 수행하는 데 활용됩니다.
자바 웹 어플리케이션 개발에서는 필터를 적용하기 위해 Filter 인터페이스를 구현

Filter 인터페이스

주요 메소드
메소드
설명
init()
필터 초기화 시 호출되며, 필터 설정 및 초기화 작업을 수행합니다.
doFilter()
실제 필터 동작을 정의하는 메서드로, 요청과 응답을 가로채고 수정하는 작업을 수행합니다. 필터 체인 내 다음 필터로 요청을 전달하거나 필터 체인의 끝에 도달하면 서블릿으로 요청을 전달합니다.
destroy()
필터가 소멸될 때 호출되며, 리소스 해제 또는 정리 작업을 수행합니다.

JSP 필터 등록하는 방법

✅ javax EE
✅ jakarta EE

✅ javax EE

1.
Filter 인터페이스를 구현한 클래스 정의
2.
web.xml 에 등록

Filter 클래스 정의

import javax.servlet.*; import java.io.IOException; public class EncodingFilter implements Filter { private String encoding; public void init(FilterConfig filterConfig) throws ServletException { // web.xml에서 설정한 초기 매개변수 "encoding"을 읽어옵니다. encoding = filterConfig.getInitParameter("encoding"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 요청과 응답의 문자 인코딩을 설정합니다. request.setCharacterEncoding(encoding); response.setCharacterEncoding(encoding); // 다음 필터로 요청을 전달합니다. 필터 체인의 끝에 도달하면 서블릿으로 요청이 전달됩니다. chain.doFilter(request, response); } public void destroy() { // 필터가 소멸될 때 필요한 정리 작업을 수행합니다. } }
Java
복사

web.xml 에 등록

<web-app> <!-- EncodingFilter를 필터로 등록합니다. --> <filter> <filter-name>EncodingFilter</filter-name> <filter-class>EncodingFilter</filter-class> <!-- 필터 초기 매개변수로 문자 인코딩을 설정합니다. --> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <!-- 필터를 URL 패턴에 매핑합니다. --> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 다른 서블릿과 서블릿 매핑 설정 등을 추가할 수 있습니다. --> </web-app>
XML
복사

필터를 사용하는 주요 예시

인코딩 및 문자 집합 처리
인증 및 권한 검사
로그 처리
이미지 및 자원 압축

이클립스에서 Filter 클래스 생성하기

1.
필터 클래스 : [NEW] > [Filter]
2.
필터 생성하기
a.
Class Name : TestFilter
3.
필터 매핑 경로 설정하기
a.
Filter mappings > [Edit] > 경로 지정

web.xml

<!-- 필터 --> <filter> <filter-name>TestFilter</filter-name> <filter-class>filter.TestFilter</filter-class> </filter> <filter-mapping> <filter-name>TestFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
HTML
복사

✅ jakarta EE

TestFilter.java
package filter; 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; import jakarta.servlet.http.HttpFilter; import java.io.IOException; //@WebFilter("/TestFilter") // 필터 패턴 경로 public class TestFilter extends HttpFilter implements Filter { /** * 생성자 */ public TestFilter() { super(); } /** * 필터를 초기화하는 메소드 */ public void init(FilterConfig fConfig) throws ServletException { System.out.println("TestFilter 초기화..."); } /** * 필터에서 처리할 작업을 작성하는 메소드 */ public void doFilter( ServletRequest request ,ServletResponse response ,FilterChain chain) throws IOException, ServletException { System.out.println("TestFilter 필터 처리 작업..."); // 필터 체인의 다음 필터로 요청과 응답을 넘겨주는 메소드 chain.doFilter(request, response); } /** * 필터가 제거될 때 호출되는 메소드 */ public void destroy() { System.out.println("TestFilter 제거..."); } }
Java
복사
TestServlet.java
package servlet; 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("/TestFilter") public class TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("TestServlet 서블릿 작업..."); response.getWriter().append("Served at: ").append(request.getContextPath()); response.getWriter().append("Served at: ").append("테스트"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
HTML
복사