Filter可以改变一个request和修改一个response。Filter不是一个Servlet,它不能产生一个response,它能够在一个request到达Servlet之前预处理request,也可以在离开Servlet时处理response。
一个Filter必须实现javax.servlet.Filter接口并定义三个方法:
· public void init(FilterConfig config):Filter实例化后进行初始化的回调方法。
· public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain):处理过滤业务的方法。
· public void destory():Filter在释放时回调的方法。
package com.yyq.filter; import javax.servlet.*; import java.io.IOException; /** * Created by gao on 16-4-14. */ public class CharacterEncodingFilter implements Filter { private FilterConfig filterConfig; //Filter初始化时的回调方法 //FilterConfig接口实例中封装了这个Filter的初始化参数 @Override public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; } //主要负责过滤工作 //FilterChain用于调用过滤器链中的下一个顾虑器 @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //获取此Filter的初始化参数的值 String encoding = filterConfig.getInitParameter("encoding"); if (null != encoding && !"".equals(encoding)){ //设置请求数据的编码方式 servletRequest.setCharacterEncoding(encoding); } //把请求和响应对象传给过滤器链中的下一个要调用的过滤器或Servlet filterChain.doFilter(servletRequest,servletResponse); } //此Filter被释放时的回调方法 @Override public void destroy() { //空 } }
web.xml注册这个Filter实现类,并配置初始化参数
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <!--定义一个过滤器--> <filter> <!--过滤器的标识名--> <filter-name>characterEncodingFilter</filter-name> <!--过滤器实现类的全限定名--> <filter-class>com.yyq.filter.CharacterEncodingFilter</filter-class> <!--配置初始化参数--> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <!--过滤器的映射配置--> <filter-mapping> <!--过滤器的标识名--> <filter-name>characterEncodingFilter</filter-name> <!--过滤器的URL匹配模式--> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>