如何在Struts with Tiles中获取真实的请求URL?

发布于 2024-07-05 07:36:01 字数 611 浏览 3 评论 0原文

当您将 Tiles 与 Struts 一起使用时...

request.getRequestURL()

...您将获得 URL,例如 /WEB-INF/jsp/layout/newLayout.jsp 而不是输入的真实 URL/用户点击,类似于 /context/action.do

在较新的 Struts 版本 1.3.x 及更高版本中,您可以使用 javaranch上提到的解决方案并使用请求属性获取真实URLORIGINAL_URI_KEY

但在 Struts 1.2.x 中如何做到这一点呢?

When you're using Tiles with Struts and do...

request.getRequestURL()

...you get the URL to e.g. /WEB-INF/jsp/layout/newLayout.jsp instead of the real URL that was entered/clicked by the user, something like /context/action.do.

In newer Struts versions, 1.3.x and after, you can use the solution mentioned on javaranch and get the real URL using the request attribute ORIGINAL_URI_KEY.

But how to do this in Struts 1.2.x?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

橙味迷妹 2024-07-12 07:36:01

这适用于 Struts 1.2

private String getOriginalUri(HttpServletRequest request) {
    String targetUrl = request.getServletPath();
    if (request.getQueryString() != null) {
        targetUrl += "?" + request.getQueryString();
    }
    return targetUrl;
}

This works in Struts 1.2

private String getOriginalUri(HttpServletRequest request) {
    String targetUrl = request.getServletPath();
    if (request.getQueryString() != null) {
        targetUrl += "?" + request.getQueryString();
    }
    return targetUrl;
}
痴骨ら 2024-07-12 07:36:01

我不知道 Struts 1.2.x 是否有类似的 Globals 常量,但您可以通过至少两种方式创建自己的常量:

  • 在 Action 中获取原始请求 URL 并将其设置在请求上,然后从 JSP
  • 使用 中调用它Servlet Filter 做同样的事情

I don't know if Struts 1.2.x has a similar Globals constant, but you could create your own in at least two ways:

  • get the original request URL in the Action and set it on the request, and call that from the JSP
  • use a Servlet Filter to do the same thing
山田美奈子 2024-07-12 07:36:01

当您从 view/jsp/tiles 层查询 request.getRequestURL() 时,它已经是另一个重写的请求。

正如 Mwanji Ezana 提到的,最合适的方法是在操作执行阶段将其保存到单独的属性中。 您可能希望借助 Struts2 中的拦截器来自动化此过程。

When you query request.getRequestURL() from your view/jsp/tiles layer, it's already another rewritten request.

As Mwanji Ezana mentions, the most suitable way is to save it to separate property on the action execution phase. You may want to automate this process with the help of interceptors in Struts2.

不再让梦枯萎 2024-07-12 07:36:01

我使用这个,它也适用于 Spring:

<% out.println(request.getAttribute("javax.servlet.forward.request_uri")); %>

如果您还需要查询字符串(由 matchew 贡献):

<% out.println(request.getAttribute("javax.servlet.forward.query_string")); %>

I use this, which also works on Spring:

<% out.println(request.getAttribute("javax.servlet.forward.request_uri")); %>

If you also need the query string (contributed by matchew):

<% out.println(request.getAttribute("javax.servlet.forward.query_string")); %>
等你爱我 2024-07-12 07:36:01

你只需要在你的行动中做到这一点:

    request.getAttribute("javax.servlet.forward.request_uri")

You just need to do this in your action:

    request.getAttribute("javax.servlet.forward.request_uri")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文