티스토리 뷰
필터란?
위 책에서는 'HTTP 요청을과 응답을 변경할 수 있는 재사용 가능한 클래스' 라고 정의한다.
필터는 클라이언트와 최종자원(JSP, Servlet, 기타자원) 사이에 위치하며 request 와 response를 알맞게 변경하는 역할을 한다.
필터의 핵심타입 3개
javax.servlet.Filter interface
클라이언트와 최종자원 사이에 위치하는 필터는 이 인터페이스를 구현해야한다.
javax.servlet.ServletRequestWrapper 클래스
필터가 요청을 변경한 결과를 저장하는 래퍼
javax.servlet.ServletResponseWrapper 클래스
필터가 응답을 변경하기 위해 사용하는 래퍼
Filter를 사용하려 Filter interface와 클래스들은 tomcat의 servlet-api.jar에 있으므로 클래스패스에 추가해주어야한다.
Filter인터페이스
Filter 인터페이스는 세가지 메소드를 선언하고 있으며 필터의 기능에 맞게 알맞게 구현해 주어야한다.
public void init(FilterConfig filterConfig) throws ServletException
필터를 초기화할 때 호출한다
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
필터 기능을 수행 chain을 이용해 다음 필터로 요청을 전달할 수 있다.
public void destroy()
필터가 웹 컨테이너에서 삭제될 때 실행된다.
example
public class ExampleFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// filter init
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// request 요청 수행
...
// 다음 필터 처리
chain.doFilter(request, response);
// response를 이용하여 응답의 필터링 작업 수행
}
@Override
public void destroy() {
// 필터가 사용한 자원 반납
}
}
FilterConfig
init 메서드의 인자로 FilterConfig를 넘겨주는에 FilterConfig는 필터의 초기화 파라미터를 읽어올 때 사용한다. 제공하는 메서드는 아래와 같다.
메서드 | 리턴타입 | 설명 |
getFilterName() | String | 설정 파일에서 filter-name에 지정한 필터의 이름을 리턴 |
getInitParameter(String name) | String | 설정파일의 init-param에 지정한 초기화 파라미터 값을 읽어옴 존재하지 않을경우 null을 리턴 |
getInitParameterNames() | Enumeration<String> | 초기화 파라미터 이름목록을 불러옴 |
getServletContext() | ServletContext | 서블릿 컨텍스트 객체를 불러옴 |
필터 적용하기
필터 적용방법은 두가지가 있다. 하나는 web.xml에 설정하는 것이고 두번째는 @WebFilter 어노테이션을 활용하는것이다.
web.xml
<?xml version="1.0" encoding="utf-8" ?>
<web-app>
...
<filter>
<filter-name>FilterName</filter-name>
<filter-class>main.filter.FilterClass</filter-class>
<init-param>
<param-name>paramName</param-name>
<param-value>paramValue</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>FilterName</filter-name>
<url-pattern>/filter/*.jsp</url-pattern>
<servlet-name>ApplyServlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
</web-app>
filter
<filter></filter> 안에 사용할 필터이름과 클래스를 정하고 초기화 parameter를 지정해준다.
filter-mapping
filter-mapping에서 필터를 적용할 서블릿을 결정한다. url-pattern을 이용해 특정 경로로 요청했을 때 적용할 수도 있고 servlet-name으로 서블릿 이름을 정할수도 있다.
dispatcher
필터가 적용되는 시점을 정한다
REQUEST : 클라이언트의 요청인 경우 필터를 적용한다(기본값)
FORWARD : forward()를 통해서 이동될 경우 적용된다
INCLUDE : include()를 통해서 포함되는 경우 적용한다
어노테이션
@WebFilter(filterName = "myFilter", urlPatterns={ /xml/*.jsp })
public class MyFilter...
WebFilter의 주요속성은 다음과 같다.
urlPatterns : 필터를 적용할 URL 패턴 목록
servletNames : 필터를 적용할 서블릿 이름 목록
filtername : 필터의 이름을 지정
initParams : 초기화 파라미터 목록을 지정
dispatcherTypes : 필터를 적용할 범위를 지정한다. 열거 타입인 DispatcherType에 정의된 값을 사용한다. 기본값은 DispatchType.REQUEST다.
'JSP &Servlet' 카테고리의 다른 글
Servlet ServletContextListener (0) | 2021.05.15 |
---|---|
Servlet MVC 패턴 구현과정 (0) | 2021.05.05 |
JSP JDBC 드라이버 로딩 및 Connection Pool 만들기 (0) | 2021.05.05 |
JSP JSTL(JSP Standard Tag Library) (0) | 2021.04.28 |
표현언어(Expression Language EL) (0) | 2021.04.28 |