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

时间:2008-09-25 08:28:20

标签: java servlets struts tiles

当你使用带有Struts的Tiles时,做...

request.getRequestURL()

...您获取了以下网址的网址: /WEB-INF/jsp/layout/newLayout.jsp代替用户输入/点击的真实网址,例如/context/action.do

在较新的Struts版本,1.3.x及更高版本中,您可以使用solution mentioned on javaranch并使用请求属性ORIGINAL_URI_KEY获取真实网址。

但是如何在Struts 1.2.x中执行此操作?

5 个答案:

答案 0 :(得分:14)

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

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

  • 在Action中获取原始请求URL并将其设置在请求上,并从JSP
  • 中调用它
  • 使用Servlet过滤器执行相同的操作

答案 3 :(得分:1)

这适用于Struts 1.2

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

答案 4 :(得分:0)

您只需要执行以下操作即可:

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