【问题标题】:Get anchor from URI从 URI 获取锚点
【发布时间】:2010-12-10 20:49:44
【问题描述】:

我正在编写一个 JSP/Servlet,我正在尝试获取 URI 的锚点部分,例如:

blabla.rdf#mark

如何从我的请求中获得我的分数?明明request.getParameter()不行?

欢迎任何帮助。

【问题讨论】:

标签: java jsp servlets anchor


【解决方案1】:

这是不可能的,因为客户端不会将“锚点部分”发送到服务器

例如,以下是 Chrome 在提交 http://example.com/#foobar 后生成的确切请求(使用 Wireshark 记录):

GET / HTTP/1.1
Host: example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.3 (KHTML, like Gecko) Chrome/4.0.223.11 Safari/532.3
Cache-Control: max-age=0
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
If-None-Match: "b300b4-1b6-4059a80bfd280"
If-Modified-Since: Tue, 15 Nov 2005 13:24:10 GMT

看,没有#foobar。所以服务器应用程序无法读取它。

您可以使用一些 JavaScript 魔术来将锚点存储在 cookie 或隐藏的输入字段或您喜欢的任何巫术中。但它不适用于不是来自您自己网站的请求。在查询字符串的服务器部分创建您需要的任何内容并仅将锚用于仅 JavaScript 的任务 - 或使用它在简单的 HTML 文档中导航 - 但这是 90 年代;)。

这是来自上述 RFC 1808 的重要部分:

请注意,片段标识符(以及它前面的“#”)是 不被视为 URL 的一部分。但是,由于它是常用的 在与 URL 相同的字符串上下文中,解析器必须能够 识别存在的片段并将其作为 解析过程。

【讨论】:

  • 有关信息,RFC 1808 解释了为什么锚部分不发送到服务器。
【解决方案2】:

我猜您想制作一个可收藏的 Ajax Web 应用程序,并且您想替换 DOM 的某些片段而不重新加载整个页面。 (否则您可以使用查询参数。)正如 sfussenegger 所述,浏览器不会将“anchor”传输到服务器。解决方案在客户端。

Javascript window.location.hash 提供锚点信息。您可以将事件处理程序附加到window.onload 事件,该事件获取window.location.hash 并在Ajax XHttpRequest 中将其传输到服务器。您捕获响应并将其构建到 DOM 中。

不幸的是,这是两次客户端-服务器往返。

更多信息请访问ajaxpatterns

【讨论】:

    【解决方案3】:

    此解决方案仅在按下提交按钮后起作用,但是:您可以使用 javascript 在表单上放置一个隐藏值,该值设置为 document.location 的值。这将准确地告诉您浏览器将您的地址视为什么。

    【讨论】:

      猜你喜欢
      • 2014-04-14
      • 2020-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多