Struts 2读书笔记-----拦截器之拦截器的使用(转http://blog.csdn.net/chenssy/article/details/7354645)

Coordinator
May 31, 2012 at 1:08 AM

 

 

分类: 程序设计-----SSH 2012-03-14 21:23 238人阅读 评论(0) 收藏 举报
         上面的配置中通过excludeMethods参数指定executelogin方法不需要被拦截,includeMethods参数指定login方法需要被拦截,则拦截器会拦截login方法。

         

         四、拦截器的执行顺序

         随着系统中配置拦截器的顺序不同,系统执行拦截器的顺序也会不同。通常认为:先配置的拦截器,会先获得执行机会,但是有时候也会存在一些特殊的情况。

         有如下的配置文件:

  1. <package name="mystruts" extends="struts-default">  
  2.         <!-- 应用所需使用的拦截器都在改元素下配置 -->  
  3.         <interceptors>  
  4.             <!-- 配置没有simple拦截器 -->  
  5.             <interceptor name="mysimple" class="com.app.interceptor.SimpleInterceptor">  
  6.                 <!-- 为该拦截器指定参数值 -->  
  7.                 <param name="name">简单拦截器</param>  
  8.             </interceptor>  
  9.         </interceptors>  
  10.           
  11.         <action name="login" class="com.app.action.LoginAction">  
  12.             <result name="error">/error.jsp</result>  
  13.             <result name="success">/welcome.jsp</result>  
  14.             <!-- 配置系统的默认拦截器 -->  
  15.             <interceptor-ref name="defaultStack"></interceptor-ref>  
  16.             <!-- 应用自定义的mysimple拦截器 -->  
  17.             <interceptor-ref name="mysimple">  
  18.                 <param name="name">第一个</param>  
  19.             </interceptor-ref>  
  20.             <interceptor-ref name="mysimple">  
  21.                 <param name="name">第二个</param>  
  22.             </interceptor-ref>  
  23.         </action>  
  24.     </package>  
<textarea class="html" style="display: none;" name="code" readonly="readonly"><package name="mystruts" extends="struts-default"> <!-- 应用所需使用的拦截器都在改元素下配置 --> <interceptors> <!-- 配置没有simple拦截器 --> <interceptor name="mysimple" class="com.app.interceptor.SimpleInterceptor"> <!-- 为该拦截器指定参数值 --> <param name="name">简单拦截器</param> </interceptor> </interceptors> <action name="login" class="com.app.action.LoginAction"> <result name="error">/error.jsp</result> <result name="success">/welcome.jsp</result> <!-- 配置系统的默认拦截器 --> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- 应用自定义的mysimple拦截器 --> <interceptor-ref name="mysimple"> <param name="name">第一个</param> </interceptor-ref> <interceptor-ref name="mysimple"> <param name="name">第二个</param> </interceptor-ref> </action> </package></textarea>

         通过上面的配置文件中我们可以看到,对于上面的名为loginAction,有两次使用了mysimple拦截器拦截该Action。两个拦截器名分别为:第一个、第二个。

         当用户再浏览器中向该Action发送请求时,就会看到如下效果:



         从上面的效果中可以看到,对于在execute方法之前的动作,第一个拦截器会先起作用,也就是说配置在前面的拦截器会先起作用;对于在execute方法之后的动作,则第二个拦截器先起作用,也就是说,配置在后的拦截器会先起作用。

         所有可以得到如下结论:在Action的控制方法执行之前,位于拦截器链前面的拦截器会先起作用。在Action控制方法执行之后,位于拦截器链后面的拦截器会先起作用。