13

当您将 Tiles 与 Struts 一起使用并执行...

request.getRequestURL()

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

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

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

4

5 回答 5

17

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

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

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

<% out.println(request.getAttribute("javax.servlet.forward.query_string")); %>
于 2010-07-21T11:12:01.207 回答
2

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

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

于 2010-09-14T18:43:24.587 回答
1

这适用于 Struts 1.2

private String getOriginalUri(HttpServletRequest request) {
    String targetUrl = request.getServletPath();
    if (request.getQueryString() != null) {
        targetUrl += "?" + request.getQueryString();
    }
    return targetUrl;
}
于 2008-10-01T11:04:11.167 回答
1

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

  • 在 Action 中获取原始请求 URL 并将其设置在请求中,然后从 JSP 中调用它
  • 使用 Servlet 过滤器来做同样的事情
于 2008-09-25T20:10:08.920 回答
0

您只需要在您的操作中执行此操作:

    request.getAttribute("javax.servlet.forward.request_uri")
于 2020-07-14T12:06:14.193 回答