欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Struts2笔记_拦截器

程序员文章站 2022-11-27 16:02:38
A.拦截器是什么 Interceptor:拦截器,起到拦截Action的作用。 Filter:过滤器,过滤从客户端向服务器发送的请求。 Interceptor:拦截器,拦截是客户端对Action的访问。更细粒度化的拦截。(拦截Action中的具体的方法)。Struts2框架核心的功能都是依赖拦截器实 ......

a.拦截器是什么

 --- interceptor:拦截器,起到拦截action的作用。

 ---filter:过滤器,过滤从客户端向服务器发送的请求。

 ---interceptor:拦截器,拦截是客户端对action的访问。更细粒度化的拦截。(拦截action中的具体的方法)。struts2框架核心的功能都是依赖拦截器实现。

 

b.struts2的执行流程

     Struts2笔记_拦截器     Struts2笔记_拦截器

 

客户端向服务器发送一个action的请求,执行核心过滤器(dofilter)方法。在这个方法中,调用executeaction()方法,在这个方法内部调用dispatcher.serviceaction();在这个方法内部创建一个action代理,最终执行的是action代理中的execute(),在代理中执行的execute方法中调用actioninvocation的invoke方法。在这个方法内部递归执行一组拦截器(完成部分功能),如果没有下一个拦截器,就会执行目标action,根据action的返回的结果进行页面跳转。

 

c.拦截器入门

  1.搭建struts2环境

    Struts2笔记_拦截器

  2.编写拦截器类

       --编写一个类实现interceptor接口或者继承abstractinterceptor。当然继承abstractinterceptor的子类methodfilterinterceptor更好,里面两个变量专门可以拦截或者放行某些方法。

自定义拦截器:   

public class myinterceptor extends abstractinterceptor {

    @override
    public string intercept(actioninvocation invocation) throws exception {
        system.out.println("自定义拦截器开始执行");
        string obj = invocation.invoke();
        system.out.println("自定义拦截器执行结束");
        return obj;
    }
}

配置拦截器:

 1.定义拦截器方式配置

 

<package name="struts" extends="struts-default"><interceptors>    <!--配置自己的拦截器-->
            <interceptor name="myinterceptor" class="com.xxx.web.action.myinterceptor"/>
        </interceptors>
        <action name="upload" class="com.xxx.web.action.fileuploadaction">
            <interceptor-ref name="myinterceptor"></interceptor-ref>   <!--引入拦截器,让它生效-->
            <interceptor-ref name="defaultstack"></interceptor-ref>
            <result>/file/success.jsp</result>
        </action>
    </package>

 

  2.自定义拦截器栈

<interceptors>
            <interceptor name="myinterceptor" class="com.xxx.web.action.myinterceptor"/>
            <interceptor-stack name="mystack">              <!--直接定义自己的拦截器栈,将所有需要的拦截器放进去,在action中直接放拦截器栈声明生效就行了-->
                <interceptor-ref name="myinterceptor"></interceptor-ref>
                <interceptor-ref name="defaultstack"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        <action name="upload" class="com.xxx.web.action.fileuploadaction">
            <interceptor-ref name="mystack"></interceptor-ref>
            <result>/file/success.jsp</result>
        </action>

上面两种方式都有一个defaultstack,这是struts2框架的拦截器栈,如下图所示,里面有很多拦截器,如国际化,校验,文件上传等等,想要运行struts2,就需要该defaultstack拦截器栈,当然,如果你可以做出比他更好,功能更强的,那就用你自己的就行,只要配置了自定义拦截器栈,原先struts2的拦截器就不会生效,要想原先的生效,要加上defaultstack就行。

 

                        Struts2笔记_拦截器