Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Struts2中,如何处理具有相同名称空间但带有或不带有尾随斜杠的url_Url_Url Rewriting_Struts2_Trailing Slash - Fatal编程技术网

在Struts2中,如何处理具有相同名称空间但带有或不带有尾随斜杠的url

在Struts2中,如何处理具有相同名称空间但带有或不带有尾随斜杠的url,url,url-rewriting,struts2,trailing-slash,Url,Url Rewriting,Struts2,Trailing Slash,在struts2中,我正在编写一个应用程序,在这个应用程序中,我需要确保url重定向的工作方式是相同的,无论最后是否有一个尾随斜杠 例如,example.com/app的行为应与用户输入example.com/app/的行为相同。目前我更改了struts.xml中的映射,如下所示- <struts> <package name="default" namespace="/" extends="secure"> <interceptors>

在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>

但这似乎有点骇人,因为如果我转到example.com/app,它会在URL中显示example.com//app/.html

感谢您的帮助。

答案来源于答案下方的评论

四元数:


就我个人而言,我会写我所有的网址没有尾随斜杠。。。 然后我会使用应用程序外部的东西来重写 适当的URL,也许iptables可以确定是否存在 尾随斜杠,如果是,则始终将其去除

莫哈纳·拉奥SV:


如上所述,遵循无尾随斜线。和覆盖 StrutsPrepareAndExecuteFilter其中一个筛选器作业来自它所属的url 必须标识名称空间和操作名称并调用相应的 行动所以这里从url中删除拖尾斜杠

四元数:


在namespace/中,您有一个名为app的操作。就这些了 要调用struts2所期望的上下文\ ROOT/app,您需要 永远不要期望在url的末尾看到/,所以您希望 在struts2解析映射之前,查找解析url的方法。 您所描述的内容只需要删除尾部 /如果存在的话。我会使用iptables,因为我以前或以后都使用过它 其他url重写器。。。Mahana将把它全部保留在网络上 应用程序和使用过滤器,方法不同,但效果相同

答案来源于答案下的注释

四元数:


就我个人而言,我会写我所有的网址没有尾随斜杠。。。 然后我会使用应用程序外部的东西来重写 适当的URL,也许iptables可以确定是否存在 尾随斜杠,如果是,则始终将其去除

莫哈纳·拉奥SV:


如上所述,遵循无尾随斜线。和覆盖 StrutsPrepareAndExecuteFilter其中一个筛选器作业来自它所属的url 必须标识名称空间和操作名称并调用相应的 行动所以这里从url中删除拖尾斜杠

四元数:


在namespace/中,您有一个名为app的操作。就这些了 要调用struts2所期望的上下文\ ROOT/app,您需要 永远不要期望在url的末尾看到/,所以您希望 在struts2解析映射之前,查找解析url的方法。 您所描述的内容只需要删除尾部 /如果存在的话。我会使用iptables,因为我以前或以后都使用过它 其他url重写器。。。Mahana将把它全部保留在网络上 应用程序和使用过滤器,方法不同,但效果相同


example.com/app/它将查找动作app/我们可以在动作名称中添加斜杠,但在这种情况下example.com/app将不起作用。这样要求的目的是什么?就我个人而言,我会写下我所有的URL,不带尾随斜杠。。。然后我会使用应用程序外部的东西来重写URL,如果合适的话,也许iptables可以确定是否有一个尾随斜杠,如果有,总是去掉它。和override StrutsPrepareAndExecuteFilter其中一个筛选器作业来自url,它必须标识名称空间和操作名称并调用相应的操作。所以这里从url中删除尾斜杠。在名称空间/中,您有一个名为app的操作。这就是调用CONTEXT\u ROOT/app所需要的一切,struts2希望如此,您永远不会在url的末尾看到/,因此您希望找到一个在struts2解析映射之前解析url的方法。您所描述的内容只需要删除尾随/如果它存在。我会使用iptables,因为我以前使用过它或者其他url重写器。。。Mahana会将其保留在web应用程序的所有部分,并使用过滤器,方法不同,但效果相同。example.com/app/它会查找动作应用程序/我们可以在动作名称中添加斜杠,但在这种情况下example.com/app将不起作用。这样做的目的是什么?就我个人而言,我会将我所有的URL都写出来,不带尾随斜杠。。。然后我会使用应用程序外部的东西来重写URL,如果合适的话,也许iptables可以确定是否有一个尾随斜杠,如果有,总是去掉它。和override StrutsPrepareAndExecuteFilter其中一个筛选器作业来自url,它必须标识名称空间和操作名称并调用相应的操作。所以这里从url中删除尾斜杠。在名称空间/中,您有一个名为app的操作。这就是调用CONTEXT\u ROOT/app的全部功能,这是struts2所期望的,您永远不会期望在t上看到a/ 他是url的结尾,因此您希望在struts2解析映射之前找到解析url的方法。您所描述的内容只需要删除尾随/如果它存在。我会使用iptables,因为我以前使用过它或者其他url重写器。。。Mahana会将其保留在web应用程序的所有部分,并使用过滤器,方法不同,但效果相同。
<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>