Struts2笔记七---拦截器

来源:互联网 发布:河北网络电视台官网 编辑:程序博客网 时间:2024/06/05 16:33
1.自定义拦截器:
要有一个自定义的拦截器类,它需要实现Interceptor接口,里面有一个intercept方法。这个就是拦截器主要的实现方法。
intercept这个方法有一个参数ActionInvocation invocation,这里必须要在intercept方法中使用invocation调用invoke()方法。
在这个invoke()方法之前执行的代码就是Struts执行我们的Action之前执行的拦截内容,invoke()方法之后执行的代码就是执行完
我们的Action后再执行的拦截过程。具体如下:
public class MyInterceptor implements Interceptor {public void destroy() {}public void init() {}public String intercept(ActionInvocation invocation) throws Exception {long start = System.currentTimeMillis();String invoke = invocation.invoke();long end = System.currentTimeMillis();System.out.println("action time = " + (end - start));return invoke;}}

以上拦截器是计算执行自定义Action的时间。
写好了拦截器类,下一步就需要在struts.xml中配上我的自定义拦截器了。
<package name="test" namespace="/" extends="struts-default"><interceptors><!-- 配一个拦截器名字叫my,这个拦截器的实现类是com.edifier.interceptor.MyInterceptor --><interceptor name="my" class="com.edifier.interceptor.MyInterceptor"></interceptor></interceptors><action name="test" class="com.edifier.action.TestAction"><result>/test.jsp</result><interceptor-ref name="defaultStack"></interceptor-ref><!-- 执行这个action会想执行struts默认的拦截器 --><interceptor-ref name="my"></interceptor-ref><!-- 之后执行我们自定义的拦截器 --></action></package>

这里的struts.xml还有一种写法

<package name="global-package" namespace="/" extends="struts-default"><interceptors><!-- 配一个拦截器名字叫my,这个拦截器的实现类是com.edifier.interceptor.MyInterceptor --><interceptor name="my" class="com.edifier.interceptor.MyInterceptor"></interceptor><interceptor-stack name="myInterceptor"><!-- 再自定义一个拦截器栈,这个拦截器栈会先执行我的自定义拦截器,然后再执行默认拦截器 --><interceptor-ref name="my" /><interceptor-ref name="defaultStack" /></interceptor-stack></interceptors></package><package name="test" namespace="/" extends="global-package"><action name="test" class="com.edifier.action.TestAction"><result>/test.jsp</result><!-- 继承global-package包,在这个Action中加上自定义的拦截器栈,它就会先执行我的自定义拦截器,然后再执行默认拦截器 --><interceptor-ref name="myInterceptor"></interceptor-ref></action></package>

0 0