拦截器配置样例
<package name="struts-testlogin" extends="struts-default">
<interceptors><interceptor name="testloginInterceptor" class="test.web.filter.TestLoginItcp" />
<interceptor name="checkloginInterceptor" class="test.web.filter.CheckLoginItcp" />
<interceptor-stack name="testInterceptor">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="testloginInterceptor" />
<interceptor-ref name="checkloginInterceptor" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="testloginInterceptor">
</default-interceptor-ref>
</package>
一、
其中要注意package中需要有extends="struts-default",否则在下面会包找不到“defaultStack”的错误,这个defaultStack是struts中默认的配置,
需要package配置继承下默认的struts配置才能用。
同理如果需要在拦截其中配置其他的拦截引用: <interceptor-ref name="testloginInterceptor" />
要不在本<interceptors></interceptors>中配置 <interceptor name="testloginInterceptor" class="test.web.filter.TestLoginItcp" />
或者继承一个配置了 <interceptor name="testloginInterceptor" class="test.web.filter.TestLoginItcp" />的拦截器的父配置。
二、
同样的:
当在action中配置拦截器时,也需要进行定义或者继承父配置:
<package name="test" namespace="/Test" extends="struts-default">
<action name="getName" class="test.TestAction">
<result>test.vm</result>
</action>
<action name="getLoginName" class="test.TestAction">
<result>testLogin.vm</result>
<!-- 使用此拦截器 -->
<interceptor-ref name="testloginInterceptor" />
</action>
</package>
上述配置的拦截器是会报“ Unable to find interceptor class referenced by ref-name testloginInterceptor”这个错误的
因为这个package继承的是"struts-default"而不是struts-testlogin。
将<package name="test" namespace="/Test" extends="struts-default">改为<package name="test" namespace="/Test" extends="struts-testlogin">后就ok了