1.自定义拦截器:
要有一个自定义的拦截器类,它需要实现Interceptor接口,里面有一个intercept方法。这个就是拦截器主要的实现方法。
intercept这个方法有一个参数ActionInvocation invocation,这里必须要在intercept方法中使用invocation调用invoke()方法。
在这个invoke()方法之前执行的代码就是Struts执行我们的Action之前执行的拦截内容,invoke()方法之后执行的代码就是执行完
我们的Action后再执行的拦截过程。具体如下:
以上拦截器是计算执行自定义Action的时间。
写好了拦截器类,下一步就需要在struts.xml中配上我的自定义拦截器了。
这里的struts.xml还有一种写法
要有一个自定义的拦截器类,它需要实现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>