以下是Struts 2的struts.xml文件中的代码片段。如果您在下面看到,它们引用“basicStack”,然后在接下来的几行中引用“prepare”和“servletConfig”。如果你看一下struts-default中“basicStack”的定义,看起来这两个已经作为“basicStack”的一部分被引用了。因此,在您已经引用“basicStack”之后不会引用它们是多余的而不是必需的?提前致谢。
<interceptor-ref name="basicStack">
<param name="exception.logEnabled">true</param>
<param name="exception.logLevel">info</param>
</interceptor-ref>
<interceptor-ref name="servletConfig" />
<interceptor-ref name="staticParams"/>
<interceptor-ref name="prepare" />
<interceptor-ref name="chain"/>
<interceptor-ref name="tokenSession">
答案 0 :(得分:3)
将拦截器置于堆栈中两次意味着它们将执行两次。这并不总是多余的 - 例如,paramsPrepareParamsStack配置了两次params拦截器。
所以你需要看一下拦截器的作用。 servletConfig拦截器根据它们实现的接口设置各种动作属性。它用于设置请求对象。我看不出让拦截器运行两次会有所帮助的方法,所以我会猜测并说它实际上是多余的。
有问题的第二个拦截器prepare拦截器触发你的动作类的prepare方法运行。这可能是有价值的用途 - 例如,如果您的prepare方法需要请求对象才能执行。如果是这种情况,那么对prepare interceptor的第一次调用可能是多余的,并且无论是谁定义了这个堆栈,都不想自己枚举整个堆栈。
答案 1 :(得分:2)
如果打算让拦截器运行两次,那就没有多余了。但是,这似乎不太可能。