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

2022-09-01 10:18:38

我正在开发一个使用支柱/磁贴的游轮预订应用程序,该应用程序使用多个内部servlet / jsp转发来达到正确的jsp以进行显示。但是,一旦到达用于呈现页面的最终 jsp,该 jsp 中的调用将返回 jsp 的路径。${pageContext.request.requestURL}

例如

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

所以,在/booking/showCruiseDetails中.jsp当我打电话时,我得到/booking/showCruiseDetails.jsp${pageContext.request.requestURL}

如何从通过多次转发到达的jsp中获取原始(客户端发出的)请求URL。我确实找到了以下关于stackoverflow的帖子,这些帖子暗示了这里这里的解决方案,但它们没有解决在发生多次转发后如何查找原始请求URL的问题。


答案 1

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

在目标 JSP 上使用:

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

找出原始 URL 是什么。

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


答案 2

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

映射到 /booking/* 的筛选器执行:

request.setAttribute("origin", request.getRequestURL());

Jsp:

${pageContext.request.attribute["origin"]}

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


推荐