필터(filter)란?
1. HTTP요청과 응답을 변경할 수 있는 재사용 가능한 코드 ( 클래스 )
2. 객체의 형태로 존재하며 , 클라이언트에서 오는 요청과 최종 자원 ( JSP , 서블릿 , 기타자원 ) 사이에 위치하여 클라이언트의 요청 정보를 알맞게 변경할 수 있다 .
3. 필터의 기본 구조는 다음과 같다
요청 à 필터 à 자원 à 필터 à 응답
4.
요청의 내용을 변경하거나 응답의 내용을 변경 가능하다 .
5. 1개 이상의 필터 연동 가능하다 .
필터구현은 어떻게 할까?
1. Javax.servlet.Filter 인터페이스
클라이언트와 최종 자원 사이에 위치하는 필터를 나타내는 객체가 구현해야 하는 인터페이스
2. Javax.servlet.ServletRequestWrapper 클래스
필터라 요청을 변경한 결과를 저장하는 Wrapper
3. Javax.servlet.ServletResponseWrapper 클래스
필터가 응답을 변경하기 위해 사용하는 Wrapper
4. Filter 인터페이스 사용
5. Filter 인터페이스의 method
Public void init(FilterConfig filterConfig) throws ServletException
è 필터를 초기화할 때 호출된다.
Public void doFilter(ServletRequest request, ServletResponse response , FilterChain chain)
Throws java.io.IOException , ServletException
è 체인을 따라 다음에 존재하는 필터로 이동한다. 체인의 가장 마지막에는 클라이언트가 요청한 최종 자원이 위치한다.
Public void destroy()
è 필터가 웹 컨테이너에서 삭제될 때 호출된다 .
필터 구현은 되었고 , 필터 설정은 어떻게 하는 것일까??
<web-app ...>
<filter>
<filter-name>FilterName</filter-name>
<filter-class>javacan.filter.FileClass</filter-class>
<init-param>
<param-name>paramName</param-name>
<param-value>value</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>FilterName</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
... </web-app>
<filter> : 웹 어플리케이션에서 사용할 필터를 지정한다.
<filter-mapping> : 특정 자원에 대해 어떤 필터를 사용할지 지정한다
<init-param> : 필터를 초기화할 때 , 즉 필터의 init()메소드를 호출할 때 전달할 파라미터를 설정한다
<url-pattern> : 클라이언트가 요청한 특정 URI에 대해서 필터링 할 때 사용한다.
<servlet-name> : url-pattern 대신 사용한다면 특정 서블릿에 대해서 필터를 적용한다.
필터를 설정할 때 특정 시점을 설정할 수 있는데 , 구현은 다음과 같이 된다.
<filter-mapping>
<filter-name>AuthCheckFilter</filter-name>
<servlet-name>FileDownload</servlet-name>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<dispatcher> : 필터가 적용되는 시점을 설정할 수 있다.
<dispatcher> 값은 다음과 같다.
REQUEST : 클라이언트의 요청인 경우에 필터를 사용 ( 기본값 , Default )
FORWARD : forward()를 통해서 제어를 이동하는 경우에 필터를 사용한다.
INCLUDE : include() 를 통해서 포함되는 경우에 필터를 사용한다.
필터또한 @WebFilter 애노테이션을 이용하여서 web.xml 파일에 지정하지 않더라도 Filter 클래스를 자동으로 필터 등록할 수 있다 .
@WebFilter 애노테이션의 구현은 다음과 같이 한다 .
import javax.servlet.annotation.WebFilter;
@WebFilter(filterName=“xslFilter” , urlPatterns={“/xml/*”}) public class XSLTFilter implement Filter { …..필터 구현 }
주요 속성은 다음과 같다.
urlPattern : 필터를 적용할 URL 패턴 목록을 지정한다
servletNames : 필터를 적용할 서블릿 이름 목록을 지정한다.
filterName : 필터의 이름을 지정한다.
initParams : 초기화 파라미터 목록을 지정한다.
dispatcherTypes : 필터를 적용할 범위를 지정 – 기본값 : DispatchType.REQUEST
'학부공부 > 웹시스템설계및개발' 카테고리의 다른 글
Spring 개발환경 구축하기 (0) | 2018.11.24 |
---|---|
Command 패턴을 알아보자. (0) | 2018.10.29 |
MVC 패턴 기초. (0) | 2018.10.13 |
서블릿(Servlet) 기초. (0) | 2018.10.13 |
태그 파일의 variable 디렉티브와 name-given을 이용한 변수 추가 (0) | 2018.10.13 |
#IT #먹방 #전자기기 #일상
#개발 #일상