如何确保所有请求都通过拦截器堆栈?

时间:2011-03-23 13:29:18

标签: struts2

在Struts2中工作时,创建模板并将URL引用到它而不创建关联的Action太简单了。 Struts2很快地呈现模板 - 在大多数情况下这很好,但在我们的情况下不是这样:为了确保正确选择语言环境,我们需要所有请求都通过一个最小的拦截器堆栈。

我们一直在研究这两种方式,但都没有成功:

  1. 定义“默认操作” 将被执行任何模板 哪个没有关联 动作。

  2. 禁用该功能 渲染模板没有动作 - 这会迫使程序员为任何模板定义操作, 这也很好。

  3. 感谢。

2 个答案:

答案 0 :(得分:1)

或许查看通配符映射。

<action name="*" class="struts2you.examplelogin.BaseActionSupport">
    <result name="success">{1}.jsp</result>
</action>

如果您将这样的内容放在第一个动作中,我认为所有未映射的jsp都将通过您可以在struts.xml中定义的默认拦截器堆栈运行

然后还将您的jsp文件放在WEB-INF目录下以防止直接访问

答案 1 :(得分:1)

  

在Struts2中工作时,创建模板并在不创建关联操作的情况下引用URL就太容易了。

由于Struts2是一个MVC框架,因此每个请求都应调用一个动作类,因此需要通过一个拦截器堆栈。我假设您的意思是您拥有不在WEB-INF下的JSP,因此可以通过URL直接调用它们。这通常是MVC世界中的一种不好的做法,因为您的JSP应该只代表视图层。将JSP放在WEB-INF下的某个地方,所有请求都将被强制执行,这将解决您的问题。

至于选择,我建议为每个模板创建显式映射。