Struts2 拦截器具体配置过程

拦截器差点儿遍布每个程序中,所以贴出拦截器配置的具体过程,希望可以帮到大家。

Struts2 拦截器具体配置过程

<interceptors>           

<!-- 先定义拦截器 -->          

<interceptor name="myInterceptor" class="com.zzz.struts2.interceptor.MyInterceptor">              

<!-- 指定系统初始化给拦截器的參数 -->               

<param name="hello">张钊钊</param>           

</interceptor>            

<!-- 加到自己设置的拦截器栈里边去 -->           

<interceptor-stack name="myStack">              

<interceptor-ref name="myInterceptor">              

</interceptor-ref>               

<interceptor-ref name="defaultStack"></interceptor-ref>          

</interceptor-stack>       

</interceptors>      

<!-- 改变系统默认的拦截器,改成自己的默认拦截器,而且一个系统仅仅能有一个默认的拦截器,这样这个拦截器栈会默认应用到全部的Action上去 -->      

<default-interceptor-ref name="myStack">       

</default-interceptor-ref>        

也能够在使用拦截器的时候给它设置參数:  就是在一个action reslut以下配置上例如以下:    

<action name="register" class="com.zzz.struts2.action.RegisterAction">          

<result name="success">/success.jsp</result>           

<!-- result 它当中另一个信息转发类型 type=""记住,假设不转向JSP,转向图表。能够改

type=""值 -->           

<result name="input">/register.jsp</result>            

<interceptor-ref name="myInterceptor">              

<param name="hello">welcome</param>           

</interceptor-ref>       

<interceptor-ref name="myStack"></interceptor-ref>       

</action>

 

2.拦截器,拦截器栈和默认的拦截器之间的关系 

1:拦截器和拦截器栈是一个级别的,也就是说一个拦截器栈中包含很多拦截器一个拦截器栈中还能够包含很多拦截器栈,配置例如以下方式:

 

<interceptors>           

<!-- 先定义拦截器 -->           

<interceptor name="myInterceptor" class="com.zzz.struts2.interceptor.MyInterceptor">             

<!-- 指定系统初始化给拦截器的參数 -->              

<param name="hello">张钊钊</param>           

</interceptor>           

<!-- 加到自己设置的拦截器栈里边去 -->           

<interceptor-stack name="myStack">             

<interceptor-ref name="myInterceptor">             

</interceptor-ref>              

<interceptor-ref name="defaultStack"></interceptor-ref>           

</interceptor-stack>       

</interceptors> 

拦截器的使用:1.先定义;2.在引用使用

<interceptor name="myInterceptor" class="com.zzz.struts2.interceptor.MyInterceptor"> 

<interceptor-ref name="myInterceptor">              

</interceptor-ref>

 

 2:struts2中有一个系统默认的拦截器栈是 defaultStack,假设你手动引用自己的拦截器,系统默认的拦截器栈将不起作用;这样必需手动引入系统的拦截器栈

<interceptor-ref name="defaultStack"> </interceptor-ref> 

假设想改变系统默认的拦截器栈,能够这样配置

<default-interceptor-ref name="myStack"> </default-interceptor-ref>

当中myStack是自定义的拦截器栈名字假设拦截器栈中有多个拦截器,在运行action之前的顺序跟配置拦截器的顺序一致,而在action之后运行的顺序是相反的

 

3:抽象的拦截器类AbstractInterceptor 

1:Interceptor这个超级拦截器接口,有三方法须要实现,可是假设不想使用init();  destroy()

方法,能够去继承这个抽象拦截器类它的使用跟上边的没有什么差别;

 

 

 

4:方法过滤拦截器MethodFilterInterceptor 

1:上边的拦截器都要是针对整个action,假设针对某个方法进行拦截能够去继承这个类

它的使用跟上边的用法差点儿相同,仅仅是须要要配置它对那个方法进行拦截,方法过滤拦截器

好不要配置到自己设置默认的拦截器栈里边,自己手动配置

<interceptor-ref name="myInterceptor3">              

<param name="includeMethods">execute</param>               

<param name="excludeMethods">execute</param>           

</interceptor-ref>           

<interceptor-ref name="defaultStack"></interceptor-ref>

 

当中includeMethods ,excludeMethods是固定写法: includeMethods 包括拦截那些方法,多个方法须要用”,”隔开; excludeMehtods是排除拦截的那些方法;

 

5:鉴听器PreResultListener接口

 

1:它的鉴听点在拦截器运行完某个action方法后,在渲染视图之前做一些事情;让某个类去实现这个接口; 然后向须要它的拦截器中注冊进去例如以下代码:

 

publicclass MyInterceptor3 extends MethodFilterInterceptor {    

privatestaticfinallongserialVersionUID = 3756655410194005443L;

@Override    

protected String doIntercept(ActionInvocation invocation) throws Exception {

 

//

把鉴听器注冊到拦截中去;

 

       invocation.addPreResultListener(new MyListener()); 

       System.out.println("my Interceptor3"); 

       String result=arg0.invoke(); 

       System.out.println("my interceptor3 finshed!");       

return result; 

    } 

}

 

 


posted @ 2016-01-28 12:53  mengfanrong  阅读(229)  评论(0编辑  收藏  举报