您的位置:首页 > 编程语言 > Java开发

Struts2学习——(十一)Struts2拦截器

2015-12-15 10:47 344 查看
Struts2拦截器和servlet过滤器很相似。在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器。在执行完所有引用的拦截器的intercept方法之后,会执行Action的execute方法。

一般来说,struts2自带的拦截器足够完成我们日常的工作,一般来说不需要创建自己的拦截器。

首先举一个创建自身拦截器的例子:

①写拦截器,继承AbstractInterceptor类或者继承Interceptor接口:

package cn.wqy.interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class MyFirstInterceptor implements Interceptor {

/**
*
*/
private static final long serialVersionUID = 1L;

@Override
public void destroy() {
// TODO Auto-generated method stub

}

@Override
public void init() {
// TODO Auto-generated method stub

}

@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
long start = System.currentTimeMillis();
String s = arg0.invoke();
long end = System.currentTimeMillis();
System.out.println("Time :" + (end - start));
return s;
}

}
invoke的返回值通知了struts2下一步应该执行什么。

②配置struts.xml:

<package name="struts_demo" namespace="/demo" extends="struts-default">
<interceptors>
<interceptor name="timeInterceptor" class="cn.wqy.interceptor.MyFirstInterceptor"></interceptor>
</interceptors>
<action name="login" class="cn.wqy.LoginAction">
<result name="success">/loginsuc.jsp</result>
<result name="error">/loginfal.jsp</result>
<interceptor-ref name="timeInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- <result name="invalid.token">/index.jsp</result> <interceptor-ref
name="token"></interceptor-ref> -->
</action>
</package>

<interceptor>标签定义了拦截器,<interceptor-ref>定义了拦截器的引用。需要注意的是,在定义了自己的拦截器之后,通常需要加上defaultStack中

默认拦截器的引用。拦截器一般都是不断累加,如果不加上默认拦截器的话会被省略掉,而产生很多别的问题。在没有定义自定义拦截器时,系统会自

动使用defaultStack里面定义好的拦截器,而定义了自定义拦截器而不加上defaultStack的话会有很多不便。

在每个拦截器中,都会执行invocation.invoke()方法,会自动转向执行下一个interceptor的intercept方法,当没有后面的拦截器时,会自动转向执行

action,随后在逆向执行完原先的拦截器中invoke方法之后的函数内容。

Struts2中内建的拦截器在帮助文档中都有介绍,需要时去读帮助文档即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: