从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值的隐藏值。 这会告诉您浏览器确切看到的地址。