2011-03-03 56 views
0

以下是Struts 2的struts.xml文件的代码片段。如果您看到下面的内容,它们引用“basicStack”,然后在接下来的几行中引用“prepare”和“servletConfig”。如果你看struts-default中的“basicStack”的定义,看起来这两个已经被引用为“basicStack”的一部分。所以在你已经引用“basicStack”之后不会引用它们是多余的而不是必需的?提前致谢。Struts 2是这个配置冗余吗?

<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"> 

回答

3

使栈中的拦截器两次意味着它们将执行两次。这并不总是多余的 - 例如,paramsPrepareParamsStack具有两次params拦截器配置。

所以你需要看看拦截器是做什么的。 servletConfig拦截器根据它们实现的接口设置各种操作属性。它用于设置请求对象等。我无法看到拦截器运行两次会有帮助,所以我会猜测并说它实际上是多余的。

第二个拦截器,prepare拦截器触发您的动作类的准备方法运行。这可能会有宝贵的用处 - 例如,如果您的prepare方法需要请求对象才能执行。如果是这样的话,对准备拦截器的第一次调用可能是多余的,并且定义这个堆栈的人不想枚举整个堆栈本身。

+0

听起来对我很好,根据你所说的话,我无法想象它的意图是让这些运行两次。但是知道创作者COULD有意为之会很有帮助。我会保持我的这种情况。 – JasonStoltz

2

这不是多余的,如果意图是有拦截器运行两次。但是,这似乎不太可能。