라이브러리는 도서관 아닌가요

JSP 6 - 서블릿의 필터 (filter) 본문

Java/JSP

JSP 6 - 서블릿의 필터 (filter)

veryhi 2022. 1. 8. 04:35

 

이전 포스트( JSP 5 - form 태그 POST 요청, HttpServletRequest의 메서드 )에서

 

HttpServletRequest에 존재하는 메서드들을 살펴보았다.

 

특정 메서드들을 통해 서블릿에 설정을 입힐 수 있는데,

 

각 서블릿 클래스마다 일일이 지정해줘야 하는 귀찮음이 존재한다.

 

따라서 filter라는 설정 파일을 통해 이를 일괄, 혹은 선택적으로

 

적용해주는 방법을 탐구해보자. 

 

 

 

 

 

요청의 흐름

WAS → request → 필터 → Servlet Container (Servlet 생성) → 필터 → response → WAS

 

실행 흐름상 필터(filter)는 각각 생성되는 Servlet Container의 외곽에 위치한다.

 

말 그대로 필터로서 서블릿 이전에 미리 설정을 적용시키는 역할을 한다.

 

필터링한다고도 한다.

 

 

 

 

 

일반적으로 서블릿의 Filter는 interface Filter를 구현한 클래스로 파일을 생성한다.

 

서블릿에 적용시키는 방식을 살펴보자.

 

 

 

 

 

 

 

 

 

 

1. xml 설정 파일 사용

 

# java 파일

package myPackage

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
 
 
public class myFilter implements Filter {
    public void init(FilterConfig config) throws ServletException {
    	System.out.println("필터 초기화");
    }
    
    public void doFilter(ServletRequest request, ServletResponse  response, FilterChain chain)
            throws IOException, ServletException {
        
        System.out.println("myFilter 적용 전");
        
        request.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);
        
        System.out.println("myFilter 적용 후");
    }
 
 
    public void destroy() {
    	System.out.println("필터 제거");
    }
}

chain.doFilter(request, response);

 

→ request, response에 필터링 설정 적용

 

 

 

# web.xml

<filter-mapping>
       <filter-name>내가 정의한 필터 클래스 이름</filter-name>
       <url-pattern>/*</url-pattern>
</filter-mapping>

 

모든 url 영역(/*)에 대하여, 지정한 filter를 적용

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

2. @ 어노테이션 사용 (초간단해진다.)

 

# java 파일

package myPackage

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
 
@WebFilter("/*")
public class myFilter implements Filter {
    public void init(FilterConfig config) throws ServletException {
    	System.out.println("필터 초기화");
    }
    
    public void doFilter(ServletRequest request, ServletResponse  response, FilterChain chain)
            throws IOException, ServletException {
        
        System.out.println("myFilter 적용 전");
        
        request.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);
        
        System.out.println("myFilter 적용 후");
    }
 
 
    public void destroy() {
    	System.out.println("필터 제거");
    }
}

 

@WebFilter("/*")에 영역만 String으로 추가해주면 된다.

 

Comments