Any given action mapping can create an "ad-hoc" interceptor stack
<action name="login" class="tutorial.Login"> <interceptor-ref name="timer"/> <interceptor-ref name="logger"/> <interceptor-ref name="defaultStack"/> <result name="input">login.jsp</result> <result type="redirectAction">/secure/home</result> </action>
Or, we can create our own named stacks and even declare a new default interceptor stack for a package
<package name="default" extends="struts-default" > <interceptors> <interceptor-stack name="myStack"> <interceptor-ref name="timer"/> <interceptor-ref name="logger"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="myStack"/> <action name="login" class="tutorial.Login"> <result name="input">login.jsp</result> <result type="redirectAction">/secure/home</result> </action> </package>
Packages can extend other packages. If all the other packages in your application extend "default", then they will all inherit the new default interceptor.
See also Configuring Interceptors, and the layout of the struts-default package. The struts-default package is automatically included into the base configuration. Anything we do in the struts-default package, you can do in your own packages.