bestcxx的专栏

程序爱好者。

Struts2配置拦截器和拦截链

1.拦截器的配置

此处以“检测用户是否登录”为例,

MyInterceptor.Java

[java] view plain copy
  1. public class MyInterceptor extends AbstractInterceptor {  
  2.   
  3.     @Override  
  4.     public String intercept(ActionInvocation invocation) throws Exception {  
  5.         System.out.println("---------intercept()---------");  
  6.         Map<String, Object> session = invocation.getInvocationContext().getSession();  
  7.         if (session.get("username") != null) {  
  8.             return invocation.invoke();  
  9.         } else {  
  10.             return "checkError";  
  11.         }  
  12.     }  
  13. }  


struts.xml文件中配置:

[html] view plain copy
  1. <package name="testLogin" namespace="/" extends="struts-default">  
  2.     <interceptors>  
  3.         <interceptor name="myInterceptor" class="MyInterceptor" />  
  4.         <!-- class="MyInterceptor"已在spring配置文件中配置bean -->  
  5.     </interceptors>  
  6.       
  7.     <action name="user" class="UserManagerAction">  
  8.         <result name="success">/user.jsp</result>  
  9.         <result name="error" type="redirect">/error.jsp</result>  
  10.         <result name="checkError">/checkSession.jsp</result>  
  11.         <interceptor-ref name="myInterceptor" />  
  12.         <interceptor-ref name="defaultStack" />  
  13.     </action>  
  14. </package>  

 

注意:action中,设置好自己的interceptor后,别忘了配置defaultStack拦截器。

defaultStack是Struts2默认的拦截器,帮助我们完成许多struts2提供的服务。

2.拦截链的配置

当一个action需要多个拦截器时,我们可以配置拦截链

[html] view plain copy
  1. <package name="testLogin" namespace="/" extends="struts-default">  
  2.     <interceptors>  
  3.         <interceptor name="myInterceptor" class="MyInterceptor" />  
  4.         <interceptor name="otherMyInterceptor" class="OtherMyInterceptor" />  
  5.         <!-- 已在spring的applicationContext-bean.xml中配置相关bean -->  
  6.           
  7.         <interceptor-stack name="defaultInterceptor">  
  8.             <interceptor-ref name="myInterceptor" />  
  9.             <interceptor-ref name="defaultStack" />  
  10.         </interceptor-stack>  
  11.           
  12.         <interceptor-stack name="otherDefaultInterceptor">  
  13.             <interceptor-ref name="otherMyInterceptor" />  
  14.             <interceptor-ref name="defaultStack" />  
  15.         </interceptor-stack>  
  16.     </interceptors>  
  17.       
  18.     <action name="user" class="UserManagerAction">  
  19.         <result name="success">/user.jsp</result>  
  20.         <result name="error" type="redirect">/error.jsp</result>  
  21.         <result name="checkError">/checkSession.jsp</result>  
  22.         <interceptor-ref name="otherDefaultInterceptor" />  
  23.     </action>  
  24. </package>  

3.设置默认拦截器/拦截链(普遍配置)

当多个action都需要配置相同的拦截器/拦截链时,考虑设置默认的拦截器/拦截链,则不用在每个action中依次配置了。

[html] view plain copy
  1. <package name="testLogin" namespace="/" extends="struts-default">  
  2.     <interceptors>  
  3.         <interceptor name="myInterceptor" class="MyInterceptor" />  
  4.         <interceptor name="otherMyInterceptor" class="OtherMyInterceptor" />  
  5.         <!-- 已在spring的applicationContext-bean.xml中配置相关bean -->  
  6.           
  7.         <interceptor-stack name="defaultInterceptor">  
  8.             <interceptor-ref name="myInterceptor" />  
  9.             <interceptor-ref name="defaultStack" />  
  10.         </interceptor-stack>  
  11.           
  12.         <interceptor-stack name="otherDefaultInterceptor">  
  13.             <interceptor-ref name="otherMyInterceptor" />  
  14.             <interceptor-ref name="defaultStack" />  
  15.         </interceptor-stack>  
  16.     </interceptors>  
  17.       
  18.     <default-interceptor-ref name="defaultInterceptor" />  
  19.       
  20.     <action name="user" class="UserManagerAction">  
  21.         <result name="success">/user.jsp</result>  
  22.         <result name="error" type="redirect">/error.jsp</result>  
  23.         <result name="checkError">/checkSession.jsp</result>  
  24.     </action>  
  25. </package>  

4.屏蔽默认拦截器/拦截链(特殊配置)

当所在package中设置了默认拦截器/拦截链,某些个别action需要特殊拦截器/拦截链时,单独在action中配置所需拦截器/拦截器,即可屏蔽默认拦截器/拦截链,执行单独设置的拦截器/拦截链。

[html] view plain copy
  1. <package name="testLogin" namespace="/" extends="struts-default">  
  2.     <interceptors>  
  3.         <interceptor name="myInterceptor" class="MyInterceptor" />  
  4.         <interceptor name="otherMyInterceptor" class="OtherMyInterceptor" />  
  5.         <!-- 已在spring的applicationContext-bean.xml中配置相关bean -->  
  6.           
  7.         <interceptor-stack name="defaultInterceptor">  
  8.             <interceptor-ref name="myInterceptor" />  
  9.             <interceptor-ref name="defaultStack" />  
  10.         </interceptor-stack>  
  11.           
  12.         <interceptor-stack name="otherDefaultInterceptor">  
  13.             <interceptor-ref name="otherMyInterceptor" />  
  14.             <interceptor-ref name="defaultStack" />  
  15.         </interceptor-stack>  
  16.     </interceptors>  
  17.       
  18.     <default-interceptor-ref name="defaultInterceptor" />  
  19.       
  20.     <action name="user" class="UserManagerAction">  
  21.         <result name="success">/user.jsp</result>  
  22.         <result name="error" type="redirect">/error.jsp</result>  
  23.         <result name="checkError">/checkSession.jsp</result>  
  24.         <interceptor-ref name="otherDefaultInterceptor" />  
  25.     </action>  
  26. </package>  
阅读更多
文章标签: interceptor struts2
个人分类: struts2
上一篇JQuery计数器+延时+从隐藏域取值赋值+页面加载自动运行
下一篇struts2的interceptor总结
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭