[WAS]Tomcat Filter
http://www.ibm.com/developerworks/java/library/j-tomcat/
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html
servlet 2.3에서 구현할 수 있는 필터는 Apache, IIS 또는 Netscape server에서 구현된 것과는 달리 어쩌구 저쩌구... 효과적이고 좋다.
Chain of callsservlet2.3에서는 javax.servlet.Filter
interface를 구현하며 아래 세 가지 메소드가 구현되어야 한다.1. void doFilter(ServletRequest, ServletResponse, FilterChain)
filter action이 실행될 때 호출되는 메소드. upstream filter가 호출하고 FilterChain 객체 내에 downstream filter가 호출할 정보가 들어 있다. 보통 아래와 같은 내용을 구현한다.
1) request검증
2) request 객체 가공
3) response 객체 가공
4) FilterChain 객체를 사용하여 연결된 다음 작업 실행(chain.doFilter)
또는 다음 작업을 막음
5) 작업 수행 후, response의 header정보를 직접 가공
2. void init(FilterConfig)
컨테이너가 doFilter 실행 이전에 호출하는 메소드. web.xml에서 설정한 parameter를 인자로 받을 수 있다.
3. destroy()
filter객체가 없어지기 전에 호출하는 메소드. doFilter에서 발생한 모든 상태(객체들..)가 사라진다.
아래는 위 ibm url에서 제공하는 예제..
package com.ibm.devworks.filters;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public final class IEFilter implements Filter {
private FilterConfig filterConfig = null;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
String browserDet = ((HttpServletRequest) request).getHeader("User-Agent").toLowerCase();
if ( browserDet.indexOf("msie") != -1) {
PrintWriter out = response.getWriter();
out.println("<html><head></head><body>");
out.println("<h1>Sorry, page cannot be displayed!</h1>");
out.println("</body></html>");
out.flush();
return;
}
chain.doFilter(request, response);
}
public void destroy() {
}
public void init(FilterConfig filterConfig) {
this.filterConfig = filterConfig;
}
}