【问题标题】:Get hash tag(#) character of URL in servlet request在 servlet 请求中获取 URL 的哈希标记 (#) 字符
【发布时间】:2017-05-07 23:25:02
【问题描述】:

我有一个网址 abc.com/#cancel。在我的 servlet 中,我需要存储 #cancel 以供将来使用。我已经尝试过 HttpServletRequest getRequestURI() 和其他几个选项。但是在请求对象中看不到这个值。我如何获得这个值。

在我的应用程序中,我使用的是使用 rpc 调用的 GWT,并且 rpc 请求是基于哈希标记值进行的。例如:mydomain.com/#profile,将请求转发到 profile.rpc。就我而言,我正在使用过滤器拦截此调用,该过滤器会进行一些基本检查,然后我想再次将请求转发到 mydomain.com/#profile。但我无法在请求对象中找到#profile。希望这能解释我的问题以及我在寻找什么。

【问题讨论】:

    标签: servlets uri hashtag


    【解决方案1】:

    Hash(#) 用于将片段与 Url 分开。片段是 URL 的可选部分,用于寻址资源的特定部分。

    请查看以下链接
    http://www.skorks.com/2010/05/what-every-developer-should-know-about-urls/
    URL fragment (#) allowed characters
    List of valid characters for the fragment identifier in an URL?

    【讨论】:

      【解决方案2】:

      request.getRequestURI() 将为您提供网址,例如:abc.com/#cancel。

      String url1=request.getRequestURI();
      
      url1.split("/");
      

      【讨论】:

      • 我猜它的 request.getRequestURI(),反正在请求 URI 中没有得到 # 值。已经在相同的问题中提到过。还是谢谢
      • 字符串 completeURL = requestURL.toString();你有没有试过这个并且你在 servlet 或任何其他框架中工作
      • 在 servlet 中发现,在请求中我们没有得到碎片化的 URL。即使在 requestURL 中,您也只会获得完整的 URL,而不是碎片 URL(#part)
      【解决方案3】:

      发现请求中没有碎片URL,当我们执行response.sedRedirect()时,浏览器不会从浏览器URL栏中删除碎片部分。但不确定这是如何发生的。无论如何,在我的情况下,我不是将请求发布到另一个 JSP,然后将表单提交到不同的 URL,而是直接执行 response.sendRedirect(),它不会删除碎片部分,所以它现在可以工作了 :)

      【讨论】:

        【解决方案4】:

        您无法获取 URL 服务器端的片段部分,因为浏览器不会将其发送到服务器。

        例如:用户单击指向http://www.example.com/foo#bar 的链接。浏览器连接到 www.example.com 并发送:

        GET /foo HTTP/1.1
        Host: www.example.com
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-05
          • 2013-05-06
          • 2021-03-22
          • 1970-01-01
          • 2013-05-16
          相关资源
          最近更新 更多