如何在多个servlet转发后从servlet/jsp获取原始请求url

Sal*_*cha 31 java struts servlets tiles java-ee

我正在使用struts/tiles工作巡航预订应用程序,它使用多个内部servlet/jsp转发到达正确的jsp进行显示.但是,一旦你到达用于呈现页面的最终jsp,jsp中的${pageContext.request.requestURL}调用将返回 jsp 的路径.

例如

  1. 原始要求: / booking/getCruiseDetails
  2. 转发到:/booking/validateCruiseDeteails.jsp
  3. 转发到:/booking/validateUser.jsp
  4. 最后转发到:/booking/showCruiseDetails.jsp

所以,当我调用/booking/showCruiseDetails.jsp时,在${pageContext.request.requestURL}/booking/showCruiseDetails.jsp中

如何从通过多个转发到达的jsp获取原始(客户端制作的)请求URL .我确实在stackoverflow上找到了以下关于此处此处的解决方案的帖子,但是他们没有解决在多次转发发生后如何查找原始请求URL的问题.

Len*_*kus 59

我在这篇文章中找到了一个更好的答案[ 如何在转发到JSP时检测Java Servlet中的URL?]

在目标JSP上使用:

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

找出原始网址是什么.

它不需要您在转发servlet上执行任何额外的步骤


luk*_*ymo 12

您可以使用过滤器将原始地址放入请求属性,然后从jsp中读取它

过滤映射到/ booking/*执行:

request.setAttribute("origin", request.getRequestURL());
Run Code Online (Sandbox Code Playgroud)

JSP:

${pageContext.request.attribute["origin"]}
Run Code Online (Sandbox Code Playgroud)

这是因为过滤器默认设置了REQUEST调度程序.这意味着过滤器仅针对不用于转发/包含的直接客户端请求执行