Filter介绍

Filter的几个用处

1、在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest

2、根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和和数据

3、在HttpServletResponse到达Servlet之前,拦截客户的HttpServletResponse

4、根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和和数据

Filter的几个种类:

1、用户授权的Filter:Filter负责检查用户请求,根据请求过滤非法请求

2、日志Filter:详细记录某些特殊的用户请求

3、负责解码的Filter:包括对非标准编码的解码请求

4、能改变xml内容的XSLT Filter等

5、Filter可以负责拦截多个请求或响应;一个请求或响应也可被多个Filter拦截

Filter类的创建:

 

 1 package com.iot.myjee;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.Filter;
 6 import javax.servlet.FilterChain;
 7 import javax.servlet.FilterConfig;
 8 import javax.servlet.ServletContext;
 9 import javax.servlet.ServletException;
10 import javax.servlet.ServletRequest;
11 import javax.servlet.ServletResponse;
12 import javax.servlet.annotation.WebFilter;
13 import javax.servlet.http.HttpServletRequest;
14 
15 @WebFilter(filterName="log",urlPatterns={"/*"})       
16 public class LogFilter implements Filter {
17     
18     private FilterConfig config;//用于访问Filter的配置信息
19 
20     @Override
21     public void destroy() {
22         config = null;
23     }
24 
25     @Override
26     public void doFilter(ServletRequest request, ServletResponse response,
27             FilterChain chain) throws IOException, ServletException {
28         //------对用户请求进行预处理
29         ServletContext context = this.config.getServletContext();
30         long before = System.currentTimeMillis();
31         System.out.println("开始过滤...");
32         HttpServletRequest hrequest = (HttpServletRequest)request;
33         System.out.println("Filter已经截获到用户请求的地址:"+hrequest.getServletPath());
34         //Filter只是链式处理,请求依然放行到目的地址
35         chain.doFilter(request, response);
36         //-----后处理部分
37         long after = System.currentTimeMillis();
38         System.out.println("过滤结束...");
39         System.out.println("请求被定位到"+hrequest.getRequestURI()+"所花的时间为:"+(after-before));
40     }
41 
42     @Override
43     public void init(FilterConfig arg0) throws ServletException {
44         config = arg0;
45     }
46 
47 }

 

chain.doFilter(request,response)是 将请求依旧发送到目的地址,当不调用该函数时,将不会响应对应的servlet

Filter的配置:

在web.xml中增加一下片段:

 

<filter>
    <filter-name>log</filter-name>
    <filter-class>com.iot.myjee.LogFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>log</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

 

当访问该web应用提供的任意jsp页面时,都会进行一次过滤

如:

开始过滤...
Filter已经截获到用户请求的地址:/testJSPImage.jsp
过滤结束...
请求被定位到/MyJEE/testJSPImage.jsp所花的时间为:11

posted on 2013-05-19 10:28  X.P.Chen  阅读(184)  评论(0编辑  收藏  举报

导航