我们在写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>