阅读量:9
Struts2的拦截器是用来在请求处理前后进行一些额外的处理操作的,可以用于日志记录、权限验证、参数校验等。
在Struts2中,可以通过继承AbstractInterceptor
类来自定义拦截器。
以下是使用AbstractInterceptor
类的步骤:
- 创建一个类,继承
AbstractInterceptor
类,并实现intercept
方法。
public class MyInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { // 在请求处理前的处理逻辑 System.out.println("Before action execution"); // 执行下一个拦截器或Action String result = invocation.invoke(); // 在请求处理后的处理逻辑 System.out.println("After action execution"); return result; } }
- 在
struts.xml
配置文件中配置拦截器。
<struts> <package name="default" extends="struts-default"> <interceptors> <interceptor name="myInterceptor" class="com.example.MyInterceptor" /> <interceptor-stack name="myInterceptorStack"> <interceptor-ref name="myInterceptor" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="myInterceptorStack" /> <!-- 配置Action --> </package> </struts>
在上面的配置中,首先定义了一个名为myInterceptor
的拦截器,指定了对应的类名。然后定义了一个名为myInterceptorStack
的拦截器栈,该栈包含了前面定义的myInterceptor
和defaultStack
(默认的拦截器栈)。最后通过default-interceptor-ref
指定了默认使用的拦截器栈为myInterceptorStack
。
- 在需要使用该拦截器的Action或全局配置中进行引用。
<struts> <package name="default" extends="struts-default"> <interceptors> <!-- ... --> </interceptors> <default-interceptor-ref name="myInterceptorStack" /> <!-- 引用拦截器 --> <action name="myAction" class="com.example.MyAction"> <interceptor-ref name="myInterceptor" /> <!-- Action配置 --> <result name="success">/success.jsp</result> </action> </package> </struts>
在上面的配置中,我们在myAction
配置中引用了名为myInterceptor
的拦截器。
这样,在请求myAction
时,会先执行myInterceptor
拦截器的intercept
方法,然后再执行对应的Action方法。在Action方法执行完毕后,会再次执行myInterceptor
拦截器的intercept
方法。
注意:如果在拦截器的intercept
方法中调用了invocation.invoke()
方法,它会执行下一个拦截器或Action方法,如果没有调用该方法,请求将不会继续执行。