当前位置: 移动技术网 > IT编程>开发语言>Java > Struts2笔记_拦截器

Struts2笔记_拦截器

2019年04月22日  | 移动技术网IT编程  | 我要评论

a.拦截器是什么

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

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

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

 

b.struts2的执行流程

          

 

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

 

c.拦截器入门

  1.搭建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就行。

 

                        

 

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网