Struts2拦截器详解(作用原理及配置实例)

Struts2拦截器详解(作用原理及配置实例)-mikechen

Struts2拦截器定义

Struts2的拦截器是针对Struts2的,拦截器是用于在某个方法被访问之前,进行拦截然后在之前或之后加入某些操作。

举一个例子就更清楚了,比如:Spring AOP是针对Spring的拦截器,Struts2拦截器是针对Struts2框架的拦截器,拦截器就是AOP的一种实现策略。

 

Struts2拦截器作用

Struts2使用拦截器主要是用来处理用户的请求,OGNL的使用,表单验证 等。

比如:数据校验、国际化等,Struts2利用其内建的拦截器可以完成大部分操作,当内置拦截器不能满足时,开发者也可以自己扩展自定义拦截器。

 

Struts2拦截器原理

Struts2拦截器实现如下图所示:

Struts2拦截器详解(作用原理及配置实例)-mikechen

这个图清晰的描述出了拦截器的运行地位,红色我标准的就是用来负责在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面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法