【问题标题】:How to get the url of the client如何获取客户端的url
【发布时间】:2010-01-18 21:57:28
【问题描述】:

我正在将请求从Display.jsp 发送到 TrialShow.jsp 页面,但是每当我在 TrialShow JSP 页面中调用${pageContext.request.requestURL} 时,我都会得到http://localhost:8081/newjsp1/TrialShow.jsp 作为输出。如何在 TrialShow JSP 页面中显示http://localhost:8081/newjsp1/Display.jsp

【问题讨论】:

    标签: java jsp jstl


    【解决方案1】:

    所以你想要通过一个完整的 HTTP 请求调用当前页面的页面的 URL?我认为没有转发的方法,因为您通常不会为此使用 JSP(因为它可能会产生 IllegalStateException: Response already committed),而且,有了转发,您的要求就会按照您想要的方式工作。

    最简单的方法和最好的选择是获取 HTTP Referer 标头(是的,包括传说中的错字)。你可以在 EL 中按如下方式获取:

    ${header.referer}
    

    我说的是“最佳选择”,因为客户不需要填写推荐人标头。大多数浏览器都会发送它们,但请记住,此值完全由客户端控制,因此客户端(或任何客户端安装的软件,以及某些特定的诺顿软件作为已知示例)可以欺骗甚至完全删除标头值。

    更可靠一点的方法是让原始页面将其 URL 作为(隐藏的)请求参数传递。例如

    <input type="hidden" name="from" value="${pageContext.request.requestURI}">
    

    这样就可以在下一页通过

    ${param.from}
    

    我说“位”,因为客户端仍然可以更改它,但现在您不再依赖于客户端特定的环境。您仍然需要记住,您不应该将此值用于商业目的。最高可用于统计或调试。

    【讨论】:

    • 非常感谢先生的帮助。
    【解决方案2】:

    使用${requestScope['javax.servlet.forward.request_uri']}

    编辑:更正语法

    编辑:如果您将请求转发到第二个 jsp(例如,使用 &lt;jsp:forward .../&gt;),则此方法有效

    【讨论】:

    • 我不认为这里有任何前锋的手段。它是 JSP --> JSP,而不是 JSP --> Servlet --> JSP。如果确实有转发的方法,您会在请求 URL 中看到 Display.jsp 的 URL!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2016-02-13
    • 2020-09-22
    • 1970-01-01
    • 2012-03-31
    • 2019-01-02
    • 1970-01-01
    相关资源
    最近更新 更多