拦截器

先记住下面这几点:

1、filter是servlet,jsp里面的东西,应该说是属于规范了,而拦截器是struts的东西,不通用。

2、一个请求,get,post等方式,到后台,必须先经过filter,然后经过Interceptor,最后在通过在filter或者Interceptor里面的跳转,跳到指定的页面或者action或者servlet中。

3、Interceptor只能拦截action请求,而filter是万能的,是请求就能拦截。

4、filter是链式处理的,也就是一个filter过滤完后,如果还有过滤,那就得继续。顺序根据web.xml里面的顺序来

5、filter是servlet包里面的一个借口,写一个filter,只要实现它,然后实现它的几个方法就算一个filter了。别忘记还得再web.xml里面配置

 

一个示例图 ,不是很正确,能看懂就看,看不懂就算了。请求先经过filter,再经过interceptor,再跳到相应页面。

 

 

 

 

现在写个简单也filter给大家看看:

 

 

[java]  view plain  copy
 print ?
  1. package com.wyp12.filter;  
  2. import java.io.IOException;  
  3. import javax.servlet.Filter;  
  4. import javax.servlet.FilterChain;  
  5. import javax.servlet.FilterConfig;  
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.ServletRequest;  
  8. import javax.servlet.ServletResponse;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11. public class RequestFilter implements Filter {  
  12.     private FilterConfig config; // 这个东西好,可以从配置文件里面读,就是读的filter里面那个参数  
  13.     public void destroy() {  
  14.         System.out.println("listener destory");  
  15.         config = null;  
  16.     }  
  17.     public void doFilter(ServletRequest paramServletRequest,  
  18.             ServletResponse paramServletResponse, FilterChain paramFilterChain)  
  19.             throws IOException, ServletException {  
  20.         HttpServletRequest request = (HttpServletRequest) paramServletRequest;// 强制转换  
  21.         System.out.println("do filter");  
  22.         System.out.println(request.getServletPath());// 测试拿到的request能不能用  
  23.         HttpServletResponse response = (HttpServletResponse) paramServletResponse;// 强制转换  
  24.         System.out.println(config.getInitParameter("say"));// 从配置文件读取参数为say的值  
  25.         response.sendRedirect("index.jsp");// 过滤完之后跳转,这样跳转是从定向,客户端跳转  
  26.         /** 
  27.          * RequestDispatcher rd = request.getRequestDispatcher("login.jsp");   //request的重定位,服务端跳转 
  28.          * rd.forward(request, response); 
  29.          */  
  30.         paramFilterChain.doFilter(paramServletRequest, paramServletResponse);// 如果不写这个,那么服务器就不会响应客户端的请求,也就是不会有response产生  
  31.     }  
  32.     public void init(FilterConfig paramFilterConfig) throws ServletException {  
  33.         this.config = paramFilterConfig;  
  34.     }  
  35. }  

 

 

下面是配置文件

 

[xhtml]  view plain  copy
 print ?
  1. <filter>  
  2.  <filter-name>myFilter</filter-name>  
  3.  <filter-class>com.wyp12.filter.RequestFilter</filter-class>  
  4.  <init-param>  
  5.  <param-name>say</param-name>  <!-- 这个就是在filter里面要获取的参数-->  
  6.  <param-value>hello world !</param-value>  
  7.  </init-param>  
  8.  </filter>  
  9.  <filter-mapping>  
  10.  <filter-name>myFilter</filter-name>  
  11.  <url-pattern>/*</url-pattern>  
  12.  </filter-mapping>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值