Struts2拦截器定义
Struts2的拦截器是针对Struts2的,拦截器是用于在某个方法被访问之前,进行拦截然后在之前或之后加入某些操作。
举一个例子就更清楚了,比如:Spring AOP是针对Spring的拦截器,Struts2拦截器是针对Struts2框架的拦截器,拦截器就是AOP的一种实现策略。
Struts2拦截器作用
Struts2使用拦截器主要是用来处理用户的请求,OGNL的使用,表单验证 等。
比如:数据校验、国际化等,Struts2利用其内建的拦截器可以完成大部分操作,当内置拦截器不能满足时,开发者也可以自己扩展自定义拦截器。
Struts2拦截器原理
Struts2拦截器实现如下图所示:
这个图清晰的描述出了拦截器的运行地位,红色我标准的就是用来负责在Action执行之前和Result执行之后处理一些功能的类。
也就是说上图示意了有3个拦截器的类,分别是Interceptor1、Interceptor2和Interceptor3,它们分别执行不同的功能处理,而运行的时机就是在Action执行之前和Result执行之后。
Struts2 拦截器采用xwork2的interceptor,而Spring AOP基于Spring IOC基础,其底层采用Java动态代理与CGLIB动态代理两种方式结合的实现方式。
Struts2拦截器实例
1.创建拦截器类
Struts2提供了Interceptor接口,以及对该接口实现的一个对应抽象拦截器类AbstracInterceptor,在interceptor方法中加入相关的处理代码。
如下所示:
public class MyIntercepter extends AbstractInterceptor { @Override public String intercept(ActionInvocation actionInvocation) throws Exception { return actionInvocation.invoke(); } }
2.在Struts.xml中注册拦截器并引用拦截器
如下所示:
<struts> <package name="intercepter" extends="struts-default" > <!--注册拦截器----> <interceptors> <interceptor name="replace" class="com.mikechen.MyIntercepter"></interceptor> </interceptors> <action name="public" class="com.mikechen.PublicAction" method="execute"> <result name="success">/拦截器/success.jsp</result> <!--引用拦截器---> <interceptor-ref name="replace"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action> </package> </struts>
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》