以前只是了解些Struts但是对其拦截器的使用云里雾里,今天着重学习了一下,然后写下来
Struts拦截器的配置写在struts.xml中,要先定义再使用。
如果手写的一个inteceptor的话,可以直接这样:
<interceptor name="myinteceptor" class="interceptors.MyIntercepoter"><!--class就是你实现拦截的东西了,这个类里写拦截后做什么操作要继承MethodFilterInterceptor类或其他intercepotor类 -->
<param name="includeMethods">book</param><!--这句的意思是对book的方法进行拦截,如果排除某些方法的拦截的话 name的值应为 includeMethods,然后方法名用逗号隔开 -->
</interceptor>
如果手写好多inteceptor就得用interceptor-stack,但是也得先定义自己写的interceptor然后再把他加入到interceptor-stack中,最后别忘了用<interceptors>将他们包起来
<interceptors>
<interceptor name="myinteceptor" class="interceptors.MyIntercepoter">
<param name="includeMethods">book</param><!-- -->
</interceptor>
<interceptor-stack name="myinteceptorList">
<interceptor-ref name="myinteceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref><!--这是系统默认的拦截器 -->
</interceptor-stack>
</interceptors>
在Action中使用自己写的拦截器:
<action name="BookAction" class="action.BookAction" method="book">
<result name="success">/result.jsp</result>
<result name="error">/error.jsp</result>
<interceptor-ref name="myinteceptorList"></interceptor-ref>
</action>
另外因为<package>的排序是有要求的:
造成如题错误的原因是package的内容必须按以下顺序写:
result-types
interceptors
default-interceptor-ref
default-action-ref
default-class-ref
global-results
global-exception-mappings
action*