您的位置:首页 > 其它

Servlet之Filter过滤器

2014-12-25 08:50 211 查看

过滤器是一个实现了javax.servlet.Filter 接口的 Java 类。javax.servlet.Filter 接口定义了三个方法:

1 public void doFilter (ServletRequest, ServletResponse, FilterChain)

该方法在每次一个请求/响应对因客户端在链的末端请求资源而通过链传递时由容器调用。

2 public void init(FilterConfig filterConfig)

该方法由 Web 容器调用,指示一个过滤器被放入服务。

3 public void destroy()

该方法由 Web 容器调用,指示一个过滤器被取出服务。

字符编码过滤器

public class CharacterEncodingFilter implements Filter{
private String characterEncoding;
private boolean enabled;

public void init(FilterConfig config)throws ServletException{
characterEncoding = config.getInitParameter(“characterEncoding”);
enabled =
"true".equalsIgnoreCase(config.getInitParameter("enabled").trim());
}
public void doFilter(ServletRequestrequest,ServletResponse response,
FilterChainchain) throws IOException,ServletExceprion{
if(enabled&& characterEncoding !=null){
request.setCharacterEncoding(characterEncoding);
response. setCharacterEncoding(characterEncoding);
}
chain.doFilter(request,response);  //不能漏写这一句
}

public void destroy(){
characterEncoding = null;  //销毁时清空
}

}


配置如下:

<filter>
<filter-name> CharacterEncodingFilter </filter-name>
<filter-class> filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name> characterEncoding </param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name> enabled </param-name>
<param-value>true</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name> CharacterEncodingFilter </filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>


页面编码方式与Filter的编码方式必须一致,另外,如果表单是GET方式提交的,还需要修改Tomcat的server.xml,指定URIEncoding(默认为ISO-8859-1)

<Connect port= "8080" protocol = ”HTTP/1.1” connectionTimeout = “20000”

redirectPort = “8443” URIEncoding = "UTF-8"/>

<dispatcher>标签一般不用配置,默认为REQUEST,一共有四种

REQUEST:只有直接请求Servlet时才生效

FORWARD:只有当某Servlet通过forward到该Servlet时才生效

INCLUDE:JSP中通过<jsp:include/>请求某Servlet时才生效

ERROR:JSP通过<%@ pageerrorPage = “error.jsp” %>指定错误页面时才生效

filter的顺序是按照<filter-mapping>的配置先后来执行的

filter的典型应用还有身份验证过滤器(Authentication Filters)、数据压缩过滤器(Data compression Filters)、加密过滤器(EncryptionFilters)、触发资源访问事件过滤器、图像转换过滤器(Image Conversion Filters)、日志记录和审核过滤器(Loggingand Auditing Filters)、MIME-TYPE 链过滤器(MIME-TYPE Chain Filters)、标记化过滤器(TokenizingFilters)、XSL/T
过滤器(XSL/T Filters)、转换 XML 内容,此外,通过重载HttpServletRequestWrapper类,自定义request还可以实现文件上传的Filter

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: