Struts 个命名空间和 WEB-INF 文件夹

Struts namespaces and WEB-INF folder

我想将 view.jsp 文件放在 WEB-INF 文件夹中。它位于 WEB-INF\user\view.jsp

<package name="user" extends="struts-default"  namespace="user">
     <action name="view" class="com.example.user.ViewUserAction">
             <result>/WEB-INF/user/view.jsp</result>
     </action>
</package>

但 Struts 将此 url 更改为 application/user/WEB-INF/user/view.jsp

据我所知,如果我的命名空间不是 "/",我将永远不会访问 WEB-INF 中的 JSP ?

我发现我哪里错了。

正如 Alexander M 在评论中指出的,不会生成这样的 url。

问题是我尝试了各种糟糕的解决方案,但大多数都有下一个概要。

我在struts.xml中写道:

<package name="product" namespace="/" extends="struts-default">
        <action name="view" class="com.example.action.product.ViewProduct">
            <result name="success">/WEB-INF/view/product/view.jsp</result>
        </action>
</package>

在 jsp 中,我将某些操作称为:

<a href="product/view">View product</a>

但这样做似乎是错误的方式 - 在我的例子中,我有 url 像:

http://localhost:8080/app/product/product/view.action

无效。

所以我将 struts.xml 命名空间更改为:

  <package name="product" namespace="/product" extends="struts-default">
            <action name="view" class="com.example.action.product.ViewProduct">
                <result name="success">/WEB-INF/view/product/view.jsp</result>
            </action>
   </package>

然后在view.jsp中使用struts<s:a>标签(或者你可以使用<s:url>):

<a href="<s:url action='view' namespace="/product"/>"> View product</a>

<s:a action="view" namespace="/product"> View product</s:a>

有关包和命名空间理解的进一步参考:

  1. Struts Namespace Configuration
  2. Struts Package Configuration