如何在带有Tiles的Struts中获取真实的请求URL?
时间:2020-03-06 14:42:33 来源:igfitidea点击:
当我们将Tiles与Struts结合使用并执行...
request.getRequestURL()
...我们获得的网址例如" /WEB-INF/jsp/layout/newLayout.jsp",而不是用户输入/点击的真实URL,例如" /context/action.do"。
在1.3.x及更高版本的Struts版本中,我们可以使用javaranch上提到的解决方案,并使用请求属性" ORIGINAL_URI_KEY"获得真实的URL。
但是如何在Struts 1.2.x中执行此操作?
解决方案
我不知道Struts 1.2.x是否具有类似的Globals常量,但是我们可以通过至少两种方式创建自己的常量:
- 在Action中获取原始请求URL并在请求上进行设置,然后从JSP调用它
- 使用Servlet过滤器执行相同的操作
这适用于Struts 1.2
private String getOriginalUri(HttpServletRequest request) { String targetUrl = request.getServletPath(); if (request.getQueryString() != null) { targetUrl += "?" + request.getQueryString(); } return targetUrl; }
我用这个,它也可以在Spring上使用:
<% out.println(request.getAttribute("javax.servlet.forward.request_uri")); %>
如果我们还需要查询字符串(由matchew贡献):
<% out.println(request.getAttribute("javax.servlet.forward.query_string")); %>
当我们从view / jsp / tiles层查询request.getRequestURL()时,它已经是另一个重写的请求。
正如Mwanji Ezana提到的,最合适的方法是在操作执行阶段将其保存为单独的属性。我们可能希望借助Struts2中的拦截器来自动执行此过程。