当你使用带有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中执行此操作?
答案 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常量,但你可以用至少两种方式创建自己的:
答案 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")