볼륨조절불가 2023. 11. 11. 15:34
728x90

 
 
* 본 글은 뉴렉처(Newlecture) 채널의 서블릿, JSP 강의를 참고하여 작성되었습니다.
 
 
 


 
 

서블릿 필터의 필요성

지금까지 서블릿을 작성하면서 입출력 인코딩, 문자셋 지정을 위해 필수적으로 썼던 코드들이 있다.
(모르겠으면 앞의 글을 참고하자)
 
이처럼 여러 서블릿에 공통적으로 작성하는 내용들이 있을 때 코드를 반복해서 작성하는 것은 개발자 입장에서 번거롭고 불필요한 일이다.
 
그래서 코드 작성시의 불필요한 반복을 줄이기 위한 방법이 필요한데, 이러한 방법 중 하나가 바로 서블릿 필터이다.
 
 


 
 

서블릿 필터

서블릿 필터란 브라우저의 요청에 따른 응답 과정에서 WAS가 서블릿을 실행하기 전, 또는 실행하고 난 후에 실행되는 코드를 말한다.
 
서블릿 필터를 위한 인터페이스는 javax.servlet.Filter이며, 해당 인터페이스에서 doFilter() 메서드를 구현하는 방식으로 서블릿 필터를 작성하게 된다.
 
doFilter()의 매개변수로 ServletRequest, ServletResponse, FilterChain 객체가 들어가는데, FilterChain 객체를 통해 서블릿 필터와 매핑되는 서블릿을 실행할 수 있다.
 
그 방법은 서블릿 필터의 doFilter()에서 filterChain.doFilter()를 실행하는 것이다.
 
filterChain.doFilter()를 실행하기 전에 코드를 작성하면 서블릿을 실행하기 전 필터링을 할 수 있고, filterChain.doFilter()를 실행하고 난 후에 코드를 작성하면 서블릿 실행 이후 필터링을 할 수 있다.
 
서블릿 필터는 아래와 같이 구현할 수 있다.
 

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        /*
        	서블릿이 실행되기 전 실행하고 싶은 코드(전처리용)
        */
        
        // 서블릿으로 제어를 넘겨 서블릿 내용 실행
        filterChain.doFilter(request, response);
        
        /*
        	서블릿이 실행된 이후 실행하고 싶은 코드(후처리용)
        */
        
    }
}

 
 

서블릿 필터 적용

서블릿 필터를 구현하고 난 뒤에 어느 시점에 서블릿 필터가 실행될지를 정의해야 한다.
 

방법

  1. web.xml에 태그 정의
  2. 서블릿 필터 클래스에 애노테이션 적용

 

1. web.xml에 태그 정의

web.xml 파일에 아래와 같은 필터 매핑 정보를 추가해주면 브라우저의 요청 url과 서블릿 필터가 연결된다.

<filter>
    <filter-name>
        web.xml에서 서블릿 필터를 정의하는 이름
    </filter-name>
    <filter-class>
        실제 서블릿 필터의 클래스 이름
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>
        web.xml에서 서블릿 필터를 정의하는 이름
    </filter-name>
    <url-mapping>
    	필터의 실행 범위(해당 url이 요청될 때 서블릿 필터 실행)
    </url-mapping>
</filter-mapping>

 

2. 서블릿 필터 클래스에 애노테이션 적용

클래스에 WebFilter("요청url") 애노테이션을 추가하여 요청 url과 서블릿 필터를 연결할 수 있다.

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

@WebFilter("/hi")
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
       
        filterChain.doFilter(request, response);
        
    }
}
728x90