1. 那么登录验证拦截器将会对除了welcome与login之外的所有方法进行拦截了。
<interceptors> -- 登录验证拦截器
<interceptor name=”authority” class=”com.authorityInterceptor”/>
<interceptor-stack name=”boloStack”> --将登录验证拦截器加入默认拦截器栈中
<interceptor-ref name=”authority”>
<param name=”excludeMethods”>welcome,login</param>
</interceptor-ref>
<interceptor-ref name=”paramParamsStrack”/>
</interceptor-stack>
</interceptors>
2. 拦截器里面的return Action.LOGIN 这句话,当程序执行完这一行后,就会到struts.xml文件中去找name为login全局转向配置。
3. 注意两个interceptor-ref的顺序,顺序不同,执行效果也不同:先配置的先执行/后配置的先退出(先进后出)。
4. struts2拦截器interceptor的三种配置方法:
方法1. 普通配置法
<struts>
<package name="struts2" extends="struts-default">
<interceptors>
<interceptor name="myInterceptor" class="edu.hust.interceptor.MyInterceptor"></interceptor>
</interceptors>
<action name="register" class="edu.hust.action.RegisterAction">
<result name="input">/register.jsp</result>
<result>/result.jsp</result>
<!-- 在自定义interceptor并将其ref时,系统会覆盖掉默认的interceptor-stack(defaultStack),为了保证系统默认的defaultStack不受印象,我们需要显式的将其引入 -->
<!-- 注意两个interceptor-ref的顺序,顺序不同,执行效果也不同:先配置的先执行/后配置的先退出(先进后出) -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="myInterceptor"></interceptor-ref>
</action>
</package>
</struts>
方法2. 配置拦截器栈(即将多个interceptor串联的一种元素)。然后在<action>中引入该拦截器栈就可以了。
<struts>
<package name="struts2" extends="struts-default">
<interceptors>
<interceptor name="myInterceptor" class="edu.hust.interceptor.MyInterceptor"></interceptor>
<interceptor-stack name="myInterceptorStack">
<interceptor-ref name="myInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="register" class="edu.hust.action.RegisterAction">
<result name="input">/register.jsp</result>
<result>/result.jsp</result>
<interceptor-ref name="myInterceptorStack"></interceptor-ref>
</action>
</package>
</struts>
方法3. 修改默认拦截器,将自定义的拦截器栈定义为struts2的默认拦截器。
<struts>
<package name="struts2" extends="struts-default">
<interceptors>
<interceptor name="myInterceptor" class="edu.hust.interceptor.MyInterceptor"></interceptor>
<interceptor-stack name="myInterceptorStack">
<interceptor-ref name="myInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 此默认interceptor是针对所有action的 -->
<!-- 如果某个action中引入了interceptor,则在这个action中此默认interceptor就会失效-->
<default-interceptor-ref name="myInterceptorStack"></default-interceptor-ref>
<action name="register" class="edu.hust.action.RegisterAction">
<result name="input">/register.jsp</result>
<result>/result.jsp</result>
</action>
</package>
</struts>
5. <!-- myInterceptor3拦截器只对RegisterAction中的queryAll()方法和insert()方法进行了拦截,其他方法未进行拦截 -->
<interceptor-ref name="myInterceptor3">
<param name="includeMethods">queryAll, insert</param>
</interceptor-ref>
6. EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。 因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。