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的拦截器的使用详解
最新推荐文章于 2021-09-29 23:06:34 发布