필터 (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
복사










