版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/106698438
拦截器 在 Struts2 中起到一个拦截 Action 的作用。它与我们之前在 Servlet 中学的过滤器还是有区别的,本篇博客就来给大家讲解 拦截器 的相关知识。
一、拦截器概述
拦截器(Interceptor),在 Struts2 中起到拦截 Action 的作用,它与 Filter 有很大的区别:
- Filter: 过滤器,过滤从客户端向服务器发送的请求。
- Interceptor: 拦截器,拦截的是客户端对 Action 的访问。它是更细粒度化的拦截。(可以拦截 Action 中的具体的方法)。
Filter 虽然也能简单的过滤 Action,但是没有办法实现更精细的拦截某个方法,而 Interceptor 它可以更加精细的拦截到某个方法,这就是它俩明显的区别。
Struts2 框架核心的功能都是依赖拦截器实现。
二、拦截器入门
1、创建拦截器类
编写一个类实现 Interceptor 接口或者继承 AbstractInterceptor 类即可创建一个 拦截器类。我们在这里给大家演示继承 AbstractInterceptor 类的方式。
public class InterceptorDemo1 extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("InterceptorDemo1 执行了...");
String s = invocation.invoke();
System.out.println("InterceptorDemo1 结束了...");
return s;
}
}
2、对拦截器类进行配置
对 拦截器类 进行配置有两种方式:
1)定义拦截器进行配置
<package name="demo1" namespace="/" extends="struts-default">
<!-- 定义拦截器 -->
<interceptors>
<interceptor name="interceptorDemo1" class="com.demo.web.interceptor.InterceptorDemo1" />
<interceptor name="interceptorDemo2" class="com.demo.web.interceptor.InterceptorDemo2" />
</interceptors>
<action name="actionDemo1" class="com.demo.web.action.ActionDemo1">
<result name="success">/demo1/demo1.jsp</result>
<!-- 引入默认拦截器(一旦引入自定义拦截器,默认拦截器栈的拦截器就不执行了) -->
<interceptor-ref name="defaultStack" />
<!-- 引入自定义拦截器 -->
<interceptor-ref name="interceptorDemo1" />
<interceptor-ref name="interceptorDemo2" />
</action>
</package>
2)定义一个拦截器栈的方式
<package name="demo1" namespace="/" extends="struts-default">
<!-- 定义拦截器 -->
<interceptors>
<interceptor name="interceptorDemo1" class="com.demo.web.interceptor.InterceptorDemo1" />
<interceptor name="interceptorDemo2" class="com.demo.web.interceptor.InterceptorDemo2" />
<!-- 定义拦截器栈 -->
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="interceptorDemo1" />
<interceptor-ref name="interceptorDemo2" />
</interceptor-stack>
</interceptors>
<action name="actionDemo1" class="com.demo.web.action.ActionDemo1">
<result name="success">/demo1/demo1.jsp</result>
<!-- 引入拦截器栈 -->
<interceptor-ref name="myStack" />
</action>
</package>