具体说明如下:
每个拦截器都是实现了com.opensymphony.xwork2.interceptor.Interceptor接口的java类;Struts会依次调用为某个Action而注册的每一个拦截器的interecept()方法;每次调用interecept()方法,Struts均会传递一个ActionInvocation接口的实例;ActionInvocation接口代表一个给定Action的执行状态,拦截器可以从该类的对象中获得与该Action相关的Action对象和Result对象;在完成拦截器自己的任务之后,拦截器将调用ActionInvocation对象的invoke()方法前进到Action处理流程的下一个环节;AbstractInterceptor类实现了Interceptor接口,并为init()方法和destroy()方法提供了空白实现。可以直接实现Interceptor接口或选择继承于AbstractInterceptor抽象类。核心示例代码如下:
package com.qiaobc.struts.interceptors;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class MyInterceptor extends AbstractInterceptor { PRivate static final long serialVersionUID = 1L; @Override public String intercept(ActionInvocation invocation) throws Exception { System.out.println("before invocation.invoke() ..."); String result = invocation.invoke(); System.out.println("after invocation.invoke() ..."); return result; }}可以在struts.xml文件中配置自定义的拦截器类,核心配置代码如下:
<interceptors> <interceptor name="test" class="com.qiaobc.struts.interceptors.MyInterceptor"></interceptor> </interceptors><action name="testToken" class="com.qiaobc.struts.token.TokenAction"> <interceptor-ref name="test"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> <result>/success.jsp</result> <result name="invalid.token">/token-error.jsp</result></action>注意:在自定义拦截器中可以选择不调用ActionInvocation的invoke()方法,则后续拦截器和Action方法将不会被调用;同时,Struts会渲染自定义拦截器intercept()方法返回值所对应的result。
新闻热点
疑难解答