在 Apache Struts 中,如何在不编写 Action 类的情况下重定向到外部 URL?

In Apache Struts, how can I redirect to an external URL without writing an Action class?

提问人:workerjoe 提问时间:8/2/2023 最后编辑:Roman Cworkerjoe 更新时间:8/3/2023 访问量:56

问:

在我的 Struts 应用程序中,我需要创建一个端点 (URL),它只是告诉用户的浏览器重定向到外部 URL。

看起来这可以通过创建一个新的 Action 类并定义一个新结果来完成,但这似乎有点矫枉过正。我不需要 Action 类来执行任何类型的处理,只需简单的重定向即可。<result type='redirect'>

有没有办法在配置文件中简单地用一两行来设置端点?

重定向 struts2 struts 端点 actionresult

评论

0赞 Roman C 8/2/2023
设置端点是什么意思?Struts 配置用于映射浏览器客户端请求的特定端点,然后找到相应的操作配置。
0赞 workerjoe 8/2/2023
一个端点,表示由我定义的 URL。通常,我使用术语“端点”来表示没有服务器/域名的 URL。所以我想知道我是否可以添加一行来映射类似“/redirect_to_outside_website”的东西,而不是到 Action 类,而是直接映射到外部 URL。struts.xml
0赞 Dave Newton 8/2/2023
如果您不想使用现有机制,请创建一个 - 如果命中的是您的应用,则必须发送重定向。您可以使用提供的内容来执行此操作,也可以以其他方式执行此操作 - 请求甚至不需要访问应用程序。
0赞 workerjoe 8/2/2023
好吧,这就是我的问题:有提供的东西吗?某种可以在 struts.xml 中进行重定向的快捷方式表示法?
0赞 Roman C 8/3/2023
@workerjoe 如果没有服务器/域名,则 URI 不是终结点。此外,Struts 结果也会降低您使用内部和外部 URL。如果你对 Struts 配置进行了一些深入研究,那么你可以找到 config-browser 插件如何创建和提供端点的信息。但是,结果配置是任何端点的占位符,但您不能直接执行它,即没有操作调用。目前尚不清楚要在 中的哪个位置添加结果。您应该将其添加到问题中。redirectredirectstruts.xml

答:

1赞 Roman C 8/3/2023 #1

您可以使用操作配置创建端点,而无需类。然后添加结果类型。您可以将它与任何扩展 .Actionredirectstruts-default

<package name="default" namespace="/" extends="struts-default">
  <action name="redirect_to_outside_website/*">
        <result type="redirect">{1}</result>
    </action>
</package>

您可以在此处查看更多详细信息。


若要在操作名称中使用斜杠,应使用以下常量

<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>


上面的示例可以使用通配符映射器(这是 Struts 2 中的默认映射器)重定向到任何 URL。如果需要修复配置文件中的 URL,则可以将固定的 URL 直接放置到标签中。<result>

<package name="default" namespace="/" extends="struts-default">
  <action name="redirect_to_outside_website">
        <result type="redirect">https://server_domain/my_fixed_location</result>
    </action>
</package>

评论

0赞 workerjoe 8/3/2023
是的,这有效。我发现,如果我想简单地重定向到固定的 URL,我可以在元素(您拥有的地方)中删除目标并对其进行硬编码。你想把它添加到答案中吗?/*result{1}
1赞 Roman C 8/3/2023
当然,刚刚添加。