标签:des style blog class code c
过滤器:如图所示,可以对请求和响应资源进行拦截过滤,一般用于改变请求(request)和响应(response)的头信息与内容信息,改变信息的编码方式等等。可以指定按照一定顺 序调用的一个和多个过滤器,这就组成了链(chain)。
实现过滤器非常简单,只需要实现javax.servlet.Filter接口,就可以实现一个过滤器,Web容器负责创建javax.servler.FilterConfig对象,在容器启动时实例化和初始化过滤器在调用init()方法后开始(init是容器自动调用的)。Filter接口定义的方法如下:
现在看看web.xml的配置片段:
<filter> <display-name>EcodingFilter</display-name> <filter-name>EcodingFilter</filter-name> <filter-class>org.filter.ConfigFilter</filter-class> <init-param> <param-name>EncodeCoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>ConfigFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping
java片段代码:
public class ConfigFilter implements Filter{ private String parm=null; private FilterConfig filterconfig= null;//web容器负责创建 public ConfigFilter(){ super(); } public void destroy() { System.out.println("Filter destroy....."); } public void doFilter(ServletRequest res, ServletResponse rep, FilterChain chain) throws IOException, ServletException { _encoding=this.filterconfig.getInitParameter("filterParam"); res.setHeader("Pragma","No-cache"); res.setHeader("Cache-Control","no-cache"); String _encoding = this.encoding; if (_encoding != null) { /** * 采用设置的字符集 */ request.setCharacterEncoding(_encoding); } else { /** * 若未设置字符集,默认为utf-8 */ request.setCharacterEncoding("utf-8"); } chain.doFilter(res, rep); System.out.println("Filter in work"); } public void init(FilterConfig filter) throws ServletException { this.filterconfig=filter;//web容器初始化过滤器时自动调用 System.out.println("Initialing the Filter..."); } }
以上代码就是过滤器的一般流程,通过读取init-param参数获得编码方式,然后在每次请求时加以设置。doFilter方法作用是表示该过滤器已经完成了工作,现在将资源交给下一个过滤器,这也从而组成了所谓的过滤器链!
标签:des style blog class code c
原文地址:http://www.cnblogs.com/xiezichang/p/3726057.html