【问题标题】:How can I ensure all requests go through an interceptor stack?如何确保所有请求都通过拦截器堆栈?
【发布时间】:2011-03-23 13:29:17
【问题描述】:

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

我们一直在研究这两种方法,均未成功:

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

  2. 禁用以下功能 无需操作即可渲染模板 -- 这将迫使程序员为任何模板定义动作, 这也是一个很好的解决方案。

谢谢。

【问题讨论】:

    标签: struts2


    【解决方案1】:

    也许看看通配符映射。

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

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

    然后也把你的jsp文件放到WEB-INF目录下,防止直接访问

    【讨论】:

    • 我们已经这样做了——有点棘手,因为我们不使用 XML 来配置 Struts,而是使用注释,所以优先级不是那么清楚。但足以达到目的。
    【解决方案2】:

    在 Struts2 中工作时,创建模板并将 URL 引用到它太容易了,而无需创建关联的 Action。

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

    至于选择,我主张为您的每个模板创建显式映射。

    【讨论】:

    • 你是对的。我们将在下一个版本中采用此解决方案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 2018-10-31
    相关资源
    最近更新 更多