Struts 2 Convention插件和WEB-INF下的JSP文件

时间:2013-12-27 09:59:18

标签: java jsp configuration struts2 struts2-convention-plugin

使用Struts2约定插件时,即使未定义hello-world.action,插件也会自动将/WEB-INF/content/hello-world.jsp请求转发给HelloWorld.java

请参阅http://struts.apache.org/release/2.1.x/docs/convention-plugin.html

另一方面,我们将JSP文件放在WEB-INF下,以避免直接访问JSP文件。

我认为约定插件的这种行为破坏了JSP访问策略。任何人都可以通过简单地调用a,即时构建,动作来直接访问JSP。

我说错了吗?!如果是,我们可以禁用此功能吗?

1 个答案:

答案 0 :(得分:2)

不,你不太正确。如果页面位于WEB-INF下,则页面无法直接访问。约定插件按照约定从Action类创建基于XML的配置。因此,您只能访问这些操作返回的结果。约定插件将其配置放在XWork包下,如文档和this答案中所述。因此,解决冲突,如果您未指定父包,则可能会发生冲突。您还可以使用约定注释来自定义生成的配置。默认情况下,约定插件会扫描基础包下的类,这些类可以是strutsactions,可配置且后缀为Action。这些都是常规插件的默认配置。如果您想更改默认设置,可以使用struts.xml中的常量标记或struts.properties中的相应属性。

但是,文档不清楚如何处理

  由URL

标识的

无操作结果

此外,还不清楚用于识别它的URL。我认为您已经熟悉无操作配置,您可以在不执行操作的情况下返回结果SUCCESS,因为默认情况下使用操作类。但是,问题甚至不在这里。约定插件以及它上面提到的配置也放置了一个未知的处理程序,它应该处理配置不存在的URL(即不是由约定创建的)。这是问题的根源。该插件也不允许替换/覆盖配置。令人高兴的是,有一个未知的处理程序管理器(如果需要可以替换),它通过"unknown-handler-stack"的迭代处理未知操作,由该管理器管理。使用处理程序堆栈,您可以配置迭代未知处理程序的顺序。注意,循环在处理程序返回操作配置时结束。这意味着如果您创建自己的未知处理程序并在堆栈中设置顺序,则可以绕过约定处理程序