1、新建类,实现 Filter 接口,并实现其中的方法:init 、 doFilter 、 destroy 。其中init和destroy只在程序启动和程序销毁时执行一次(tomcat)
1 public class OneFilter implements Filter{ 2 private FilterConfig config; 3 public void init(FilterConfig filterConfig) throws ServletException { 4 this.config=filterConfig; 5 System.out.println(config.getInitParameter("name")); 6 System.out.println(config.getInitParameter("age")); 7 } 8 public void doFilter(ServletRequest request, ServletResponse response, 9 FilterChain chain) throws IOException, ServletException { 10 System.out.println("1.................");//过滤前 11 chain.doFilter(request, response);//放行 12 System.out.println("2.................");//过滤后 13 14 } 15 public void destroy() { 16 } 17 18 }
2、配置web.xml
1 <filter> 2 <filter-name>one</filter-name> 3 <filter-class>cn.test.filter.OneFilter</filter-class> 4 <init-param> 5 <param-name>name</param-name> 6 <param-value>tom</param-value> 7 </init-param> 8 <init-param> 9 <param-name>age</param-name> 10 <param-value>11</param-value> 11 </init-param> 12 </filter> 13 <filter-mapping> 14 <filter-name>one</filter-name> 15 <url-pattern>/pages/*</url-pattern> 16 </filter-mapping>
PS:
1、init-param:初始化参数,可以通过config.getInitParameter("name")获取值,一般在init函数中
2、url-pattern:要过滤的url路径(只能过滤url)
url-pattern的设置:
/* 对所有url都请求这个servlet。| 都被这个filter过虑.
/ 只可以给servlet。 - 所有其他的servlet不处理的url都由这个url所指定的servlet处理。默认servlet。
*.jspx 所有以jspx结束都请求到这个Servlet或是被某个Filter拦截。如http://local:8080/proj/abc.jspx
/jsps/* 所有路径中以/jsps/开头的都请求到这个servlet或是被某个filter拦截到。
/jsps/*.jspx 错误的:SUN规定*两边不可以同时出现字符。
3、在<filter></filter>中
Dipatcher属性:
Request – 默认值,只拦截用户的新的请求。
Forward – 对转发进行拦截。
Include – 对include拦截。
Error - 对错误进行拦截。
4、当一个项目中有多个过滤器时,过滤器的执行顺序与filter-mapping的注册顺序有关,与filter的注册无关