在做DRP的过程中用到了filter。前几天昌哥和欢姐在小会议室向我们介绍了AOP的思想,用到filter时觉得它们两者特别相似。
如下图:
在我们正常的编程中,每一条线,都是从上到下依次调用,而filter是在每一个完整的调用中横着“切了一刀”。通过配置,它可以对任意代码路径进行过滤。
这里就以转码/设置字符集为例,简单了解一下如何使用filter。
建立Filter
CharsetEncodingFilter.java
package com.drp.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**采用filter统一处理filter
* @author Danny
*
*/
public class CharsetEncodingFilter implements Filter {
@Override
public void destroy() {}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("CharsetEncodingFilter---->>>>Filter开始");
request.setCharacterEncoding("utf-8"); //设置字符集
chain.doFilter(request, response); //继续执行
System.out.println("CharsetEncodingFilter---->>>>Filter结束");
}
@Override
public void init(FilterConfig arg0) throws ServletException {}
}
配置filter
web.xml
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">
CharsetEncodingFilter
com.drp.filter.CharsetEncodingFilter
CharsetEncodingFilter
*.jsp
此处配置所起的作用是,此filter对所有的jsp页面都有设置字符集的效果,当每次访问jsp页面时,都会执行filter中的doFilter()方法,因此每次访问jsp页面前后,都可以在Console中看到doFilter方法输出的 “ CharsetEncodingFilter---->>>>Begin ” 和 “CharsetEncodingFilter---->>>>End ”。
至此,无论访问哪个jsp页面,都会事先设置其字符集,不用分别对每个页面都进行设置了。
原文:http://blog.csdn.net/huyuyang6688/article/details/46276529