zoukankan      html  css  js  c++  java
  • Struts2的默认拦截器执行顺序

    我们在写Struts2的时候package属性默认都是差不多这样吧

    <package name="packageName" namespace="/" extends="struts-default"> 

    而extend是就是一个默认包的继承,就是我们这个package默认继承struts-default:

    而Struts-default:中包含了:默认使用的拦截器、默认的Action类,使用的类型等等...

    我 们这里就分析默认拦截器的执行顺序包

    查看struts-default的源代码:
    打开struts2-core-2.3.14.jar----->找到struts-default.xml文件,找到<interceptor-stack name="defaultStack">

    这个就是我们的默认拦截器栈,每个Action请求都会不断的回调(如果不知道Action的请求流程可以看我下一遍文章)这个拦截器栈里的拦截器直到被调用完了,

    <interceptor-stack name="defaultStack">
                    <interceptor-ref name="exception"/>
                    <interceptor-ref name="alias"/>
                    <interceptor-ref name="servletConfig"/>
                    <interceptor-ref name="i18n"/>
                    <interceptor-ref name="prepare"/>//这个是为了ModelDriven拦截器做准备的拦截器,原理就是prepare这里准备好了ModelDriven的对象,那么ModelDriven对象                              //就不用重新声明了
                    <interceptor-ref name="chain"/>
                    <interceptor-ref name="scopedModelDriven"/>
                    <interceptor-ref name="modelDriven"/>//这里就用到了ModelDriven拦截器吧,
                    <interceptor-ref name="fileUpload"/>
                    <interceptor-ref name="checkbox"/>
                    <interceptor-ref name="multiselect"/>
                    <interceptor-ref name="staticParams"/>
                    <interceptor-ref name="actionMappingParams"/>
                    <interceptor-ref name="params">//这个就是我们栈顶对象的属性被自动匹配赋值的拦截器,
                   <param name="excludeParams">dojo..*,^struts..*,^session..*,^request..*,^application..*,^servlet(Request|Response)..*,parameters...*</param>
                    </interceptor-ref>
                    <interceptor-ref name="conversionError"/>
                    <interceptor-ref name="validation">
                        <param name="excludeMethods">input,back,cancel,browse</param>
                    </interceptor-ref>
                    <interceptor-ref name="workflow">
                        <param name="excludeMethods">input,back,cancel,browse</param>
                    </interceptor-ref>
                    <interceptor-ref name="debugging"/>
                </interceptor-stack>
  • 相关阅读:
    (译)构建Async同步基元,Part 3 AsyncCountdownEvent
    (译)构建Async同步基元,Part 5 AsyncSemaphore
    SICP学习笔记(P3P17)
    关于汇编语言寄存器和指令操作的整理
    VS2010和IE8是怎样让"Ctrl+鼠标滚轮的上下操作"实现改变字体或页面大小的
    "六度空间"的应用——找出两个陌生人之间的关系(二)
    关于QQ一些功能的实现(二)
    用Socket做一个局域网聊天工具
    SICP学习笔记(P27P28)
    算法练习 (二)
  • 原文地址:https://www.cnblogs.com/jeremy-blog/p/3992038.html
Copyright © 2011-2022 走看看