wyTT

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

拦截器:在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。

Ⅰ、实现原理

  Struts 2的拦截器实现相对简单。当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器,如图1所示。

 

 

Ⅱ、使用struts2里已经定义的拦截器

使用方法:在struts.xml文件里做下面配置即可:

  <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <include file="struts-default.xml"></include>  //关联struts2定义拦截器的文件
    <package name="mystruts" extends="struts-default">
        <action>
            <interceptor-ref name="interceptorName"></interceptor-ref>    //在这个action中使用某某拦截器,interceptorName--已经定义好的拦截器名

    <result name="success">/success.jsp</result>
        </action>      
    </package>
</struts>

Ⅲ、自定义拦截器

所有的Struts 2的拦截器都直接或间接实现接口com.opensymphony.xwork2.interceptor.Interceptor。除此之外,大家可能更喜欢继承类com.opensymphony.xwork2.interceptor.AbstractInterceptor。

通过继承AbstractInterceptor,我们可以很方便地完成一个拦截器类,写好拦截器类之后需要在struts.xml中做一下配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="mystruts" extends="struts-default">
        <!-- 定义拦截器 -->
        <interceptors>
            <interceptor name="interceptorName" class="拦截器类的URL"></interceptor>
        </interceptors>
        <!-- 定义action -->
        <action name="mystruts">
            <interceptor-ref name="interceptorName"></interceptor-ref>

    <result name="success">/success.jsp</result>
        </action>      
    </package>
</struts>

posted on 2015-08-17 01:30  wyTT  阅读(257)  评论(0编辑  收藏  举报