过滤器的api包含有三个简单接口,Filter,Filter Chain,Filter Config。通过过滤器类实现Filter,该类将一个引用给Filter Chain,如果通过则把控制权交由下一个链接。init()是在服务器启动时自动调用执行,说白了就是为过滤器的处理做准备,这个方法接受Filter Config类型的对象作为输入。destory()折行清理操作,一般是在垃圾自动收集前调用执行
1 public void destroy() { 2 this.filterConfig = null; 3 }
doFilter()例子
1 //采用注解方式配置URL,此处就不必再在web.xml文件中配置。如果两者均配置的话,系统将以web.xml文件中配置信息为准 2 @WebFilter(filterName="CodeFilter",urlPatterns={"/*"}) 3 4 public class CodeFilter implements Filter{ 5 6 7 @Override 8 public void destroy() { 9 System.out.println("destroy---CodeFilter"); 10 } 11 12 @Override 13 public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) 14 throws IOException, ServletException { 15 16 HttpServletRequest request =(HttpServletRequest) arg0; 17 HttpServletResponse response =(HttpServletResponse) arg1; 18 //以上是强制内型转换,使用request对象和response对象 19 20 request.setCharacterEncoding("utf-8"); //设置过滤页面提取数据的编码 21 response.setContentType("text/html;charset=utf-8"); //设置过滤页面显示数据的编码 22 23 arg2.doFilter(arg0, arg1);//在页面跳转之前执行此语句前面的代码,执行完页面的代码之后,在执行后面的语句 24 25 } 26 27 @Override 28 public void init(FilterConfig filterConfig) throws ServletException { 29 30 } 31 32 }
以这个类为过滤类,执行其他servlet类时,调用此类,如果字符型通过,则可以正确跳转至期望页面