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

来源:互联网 发布:人脸三维重建软件 编辑:程序博客网 时间:2024/06/10 20:31

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;@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void init() {// TODO Auto-generated method stub}@Overridepublic String intercept(ActionInvocation invocation) throws Exception {// TODO Auto-generated method stublong 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中内建的拦截器在帮助文档中都有介绍,需要时去读帮助文档即可。

0 0
原创粉丝点击