从URI获取锚点

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

blabla.rdf#mark 

如何从我的请求中获得我的标记? 显然request.getParameter()不起作用?

欢迎任何帮助。

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

例如,以下是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相同的字符串上下文中使用,因此解析器必须能够在片段存在时识别该片段,并将其作为解析过程的一部分放在一边。

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

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

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

更多关于这个在ajaxpatterns 。

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

Interesting Posts