Struts2的拦截器的使用详解

xiaoxiao2022-06-12  52

Struts2的拦截器:     一,拦截器的使用:         新建一个MyInterceptor拦截器类,实现com.opensymphony.xwork2.ActionInvocation接口中。         public class MyInterceptor implements Interceptor {             /**              * 由xml中可以提定Action中的参数值              */             private String myparam;                     public String getMyparam() {                 return myparam;             }                     public void setMyparam(String myparam) {                 this.myparam = myparam;             }                     public void destroy() {                 System.out.println("服务器关闭执行销毁操作!");             }                     public void init() {                 System.out.println("服务器启动时执行初始化操作!");             }                     public String intercept(ActionInvocation invocation) throws Exception {                         System.out.println(myparam);                 /**                  * 执行之前的操作                  */                 String result = invocation.invoke();                 /**                  * 执行之后操作                  */                 return result;             }         }     二,在strust.xml中配置拦截器     `    <struts>             <package name="mengya" extends="struts-default">                         <!-- 拦截器在struts2中的配置 -->                 <interceptors>                     <interceptor name="myInterceptor"                         class="com.mengya.interceptor.MyInterceptor">                         <!-- param可以没有,向拦截器中的属性赋值 -->                         <param name="myparam">mengya</param>                     </interceptor>                                         <!-- 配置自己的拦截器栈 -->                     <interceptor-stack name="myStack">                         <interceptor-ref name="myInterceptor"></interceptor-ref>                         <interceptor-ref name="defaultStack"></interceptor-ref>                     </interceptor-stack>                         </interceptors>                 <!--                     为该package指定一个默认的拦截器栈,这样就可以不用为每个action指定一拦截器栈                 -->                 <default-interceptor-ref name="myStack"></default-interceptor-ref>                         <!--                     郑重说明                     当某个action中引用了某了interceptor之后就替换了原用的一个默认interceptor                     即defaultStack,页defaultStack包含了很多完成sturs2一些基本功能的拦截器。                     故当某个action中引用了某了interceptor之后还要引用defaultStack这个拦截器栈。                 -->                         <action name="login" class="com.mengya.action.LoginAction">                     <result name="success">/show.jsp</result>                     <result name="input">/index.jsp</result>                     <!--                         <interceptor-ref name="myInterceptor"></interceptor-ref>                         <interceptor-ref name="defaultStack"></interceptor-ref>                     -->                     <!--                         也可以在action中引用自己的拦截器栈                     -->                     <!--                         <interceptor-ref name="myStack"></interceptor-ref>                     -->                 </action>                     </package>         </struts>         三,对于Struts2中拦截器栈里的拦载器执行的顺序:         Struts2中的拦截器中的拦截器最上面的最先执行,即进入拦截器的顺序是按照拦截栈中配置的顺序,出拦截器         是先配置的后执行,即与进入拦载器的顺序相反。         四,Struts2的拦截器除了实现ActionInvocation接口外还可以继承com.opensymphony.xwork2.interceptor.AbstractInterceptor         AbstractInterceptor抽象器实现了ActionInvocation接口,空实现了init和destroy方法。因此继承了AbstractInterceptor类我们只需重写它的intercept即可。             五,    Struts2的方法过滤拦截器:         1,继承com.opensymphony.xwork2.interceptor.MethodFilterInterceptor类重写doIntercept方法         2,方法过滤拦截器的配置:             <interceptors>                 <!-- 声明方法过滤拦截器 -->                 <interceptor name="myMethodFilterInterceptor" class="com.mengya.interceptor.MyMethodFilterInterceptor"></interceptor>             </interceptors>             <!-- 在action配置方法过滤拦截器 -->             <action name="login" class="com.mengya.action.LoginAction">                 <result name="success">/show.jsp</result>                 <result name="input">/index.jsp</result>                 <interceptor-ref name="defaultStack"></interceptor-ref>                 <interceptor-ref name="myMethodFilterInterceptor">                     <!-- 不拦截的方法,即,号隔开 -->                     <param name="excludeMethods">execute,test</param>                     <!-- 要拦截的方法,即,号隔开 -->                     <param name="includeMethods">execute</param>                 </interceptor-ref>             </action>         3,说明:若某个方法同时出现在excludeMethods(不拦截的方法)和includeMethods(要拦截的方法)当中时             那么这个方法会被拦截。除它情况下excludeMethods里面的方法不拦截,includeMethods里面的方法会被拦截。

相关资源:Struts2拦截器Interceptor的原理与配置实例详解
转载请注明原文地址: https://www.6miu.com/read-4934014.html

最新回复(0)