2

在 struts2 中,我正在编写一个应用程序,我需要确保 url 重定向的工作方式相同,无论末尾是否有斜杠。

例如example.com/app,行为方式应该与用户输入的方式相同example.com/app/。目前我像这样改变了映射struts.xml-

<struts>
    <package name="default" namespace="/" extends="secure">
        <interceptors> ... <interceptors>

        <action name="app">
            <result type="redirectAction">/app/</result>
        </action>
    </package>
</struts>

<struts>
    <package name="app" namespace="/app" extends="secure">
        <interceptors> ... <interceptors>

        <action name="" class="com.example.action.app.LoginAction" method="display">
        <interceptor-ref name="store">
            <param name="operationMode">RETRIEVE</param>
        </interceptor-ref>
        <interceptor-ref name="basic" />

        <result type="redirectAction">home</result>
        <result name="display">/jsp/base/content/login/loginForm.jsp</result>
    </action> 
</package>
</struts>

但这似乎很骇人听闻,因为如果我去example.com/app它会显示example.com//app/.html在 URL 中。

任何帮助表示赞赏。

4

1 回答 1

0

答案是在答案下的评论中得出的。

四元数:

就我个人而言,我会在不带斜杠的情况下编写我的所有网址......然后我会使用应用程序外部的东西来适当地重写网址,也许 iptables 可以确定是否有斜杠,如果有的话,总是去掉它。

Mohana Rao SV:

如上所述,请遵循没有尾斜线。并覆盖 StrutsPrepareAndExecuteFilter 过滤器作业之一是来自它必须识别名称空间和动作名称并调用相应动作的 url。所以这里从 url 中删除尾部斜杠。

四元数:

在命名空间“/”中,您有一个名为 app 的操作。这就是调用 CONTEXT_ROOT/app 的全部内容(这是 struts2 所期望的),你永远不会期望在 url 的末尾看到一个“/”,所以你想找到一个解析 url 的方法在 struts2 解析映射之前。您所描述的仅需要删除尾随“/”(如果存在)的内容。我会考虑 iptables,因为我以前使用过它或其他一些 url 重写器...... Mahana 会将其保留在 Web 应用程序的所有部分并使用过滤器,方法不同但效果相同。

于 2012-04-03T17:51:53.860 回答