我正在使用struts / tiles工作巡航预订应用程序,使用多个内部servlet / jsp转发到达正确的jsp进行显示。但是,一旦你到达用于呈现页面的最终jsp,那个jsp中的${pageContext.request.requestURL}
调用将返回 this jsp的路径。
例如
所以,当我调用${pageContext.request.requestURL}
时,在/booking/showCruiseDetails.jsp中我
获取/booking/showCruiseDetails.jsp
如何从通过多个转发到达的jsp获取原始(客户端制作的)请求网址。我确实在stackoverflow上找到了提示解决方案here和here的以下帖子,但它们没有解决在多次转发发生后如何查找原始请求网址的问题。
答案 0 :(得分:57)
我在这篇文章[How do you detect the URL in a Java Servlet when forwarding to JSP?]
中找到了更好的答案在目标JSP上使用:
request.getAttribute("javax.servlet.forward.request_uri")
找出原始网址的内容。
它不需要您在转发servlet上执行任何额外的步骤
答案 1 :(得分:11)
您可以使用过滤器将原始地址放入请求属性,然后从jsp
中读取它过滤映射到/ booking / *执行:
request.setAttribute("origin", request.getRequestURL());
JSP:
${pageContext.request.attribute["origin"]}
这是有效的,因为过滤器默认设置了REQUEST调度程序。这意味着过滤器仅针对直接客户端请求而不是转发/包括
执行答案 2 :(得分:3)
${requestScope["javax.servlet.forward.request_uri"]}
或单引号
${requestScope['javax.servlet.forward.request_uri']}
答案 3 :(得分:1)
请考虑使用servlet过滤器来验证信息。这意味着您可以避免验证转发,只需保留在单个JSP文件中。
答案 4 :(得分:0)
您可以在不使用bean引用的情况下显示它:
<h:outputText value="#{requestScope['javax.servlet.forward.request_uri']}" />
当然,您需要在web.xml文件中映射404页面。
<error-page>
<error-code>404</error-code>
<location>/xhtml/pg/error/404.xhtml</location>
</error-page>
答案 5 :(得分:0)
与@Lenny Markus相同,但使用Request Dispatcher类中提供的常量。
request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI)