從URI

2009-10-28 54 views
9

我正在寫一個JSP/Servlet和我想要得到的URI e.g的錨部分獲取錨?很明顯request.getParameter()不起作用?從URI

任何幫助將受到歡迎。

+0

下面是一個類似PHP的問題,提供了類似的解決方案:http://stackoverflow.com/questions/1032242/how-to-obtain-anchor-part-of-url-after-in-php – 2009-10-28 13:43:11

回答

19

這是不可能的,因爲客戶沒有「錨部分」發送到服務器

舉個例子,下面是谷歌瀏覽提交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 

請參閱no #foobar。所以服務器應用程序無法讀取它。

你可以做一些JavaScript的魔術來將錨點存儲在cookie或隱藏的輸入字段或任何你想要的巫術。但它不會適用於不是源自您自己的網站的請求。在查詢字符串的服務器部分做任何你需要的東西並且只使用僅用於純JavaScript任務的錨點 - 或者用它在簡單的HTML文檔中導航 - 但這就是90年代了)。

這裏的自提RFC 1808的重要組成部分:

注意,片段標識符(和它前面的「#」)是 沒有考慮URL的一部分。但是,由於它在與URL相同的字符串上下文中通常使用 ,因此解析器必須能夠在出現片段時識別該片段,並將其作爲 解析過程的一部分。

+0

有關信息,[RFC 1808](http://www.ietf.org/rfc/rfc1808.txt),它解釋了爲什麼錨部分不發送到服務器。 – 2014-07-10 10:20:45

0

該解決方案將只工作後一個提交按鈕被按下,但:你可以使用JavaScript來把你的形式設置爲document.location價值的隱藏價值。這會告訴你到底是什麼瀏覽器看到你的地址。

2

我想你想製作一個可收藏的Ajax web應用程序,並且你想要替換DOM的某些片段而不用重新加載整個頁面。 (否則,您可以使用查詢參數。)由於sfussenegger提到,瀏覽器不會向服務器傳輸''。解決方案在客戶端。

Javascript window.location.hash給出錨點信息。您可以將追加window.location.hash的事件處理程序追加到window.onload事件中,並通過Ajax XHttpRequest將其發送到服務器。您可以捕獲響應並將其構建到DOM中。

不幸的是,這是兩個客戶端服務器往返。

更多關於這在ajaxpatterns