2012-06-26 48 views
0

我寫了一個Java Servlet,它查詢數據庫並將結果返回給JSP。 HTTP:: 我基於從URL如何從URL中讀取參數中的HashMark

//Reading Parameter 
String User = request.getParameter("userid"); 

//Executing the SQL 
String sqluser = "SELECT 1 FROM <table name> WHERE username = ? 

pstmt = con.prepareStatement(sqluser); 
pstmt.setString(1, User); 
rset = pstmt.executeQuery(); 

樣品URL傳遞的參數執行SQL語句\ testenv.com \測試的userid =塔納

上述URL顯示因爲正確的結果用戶=「塔納」。

但有些用戶的用戶名中包含「#」號。

對於如: HTTP:\ testenv.com \測試用戶id = LA#吶

的SQL語句不返回任何值,因爲在上述情況下用戶=「拉」,即使網址有「LA #NA」。我可以使用getParameter獲取值「la#na」嗎?如果是這樣,我需要做什麼?

謝謝。

回答

1

散列字符需要正確編碼,因爲它通常用作內部鏈接。

http://testenv.com/test?userid=la%23na 
+0

非常感謝您的意見。 –

+0

不客氣!如果一切正常,您應該將其標記爲答案;) –

0

'#'在URL中有作用,它不是普通的char。它被稱爲錨點,它標記請求頁面中的某個位置。錨點之後的部分僅由瀏覽器使用,因此它不是查詢字符串的一部分,也不會發送到服務器。所以你的服務器得到la,並且na停留在瀏覽器上。

如果您可以控制發送的URL,請將其編碼。否則,你可以做的事情不多。

+0

感謝您的回覆。我可以控制網址。是否可以在java servlet中使用URL編碼器/解碼器? –

+0

使用URL編碼可能無法解決問題,因爲'#'是URL的合法部分(出於同樣的原因,它不會編碼'/','?'等)。只需使用簡單的字符串替換,並將「#」轉換爲「%23」。 – eran

+0

我打算做的是param1 = encodeURIComponent(「userid」)。創建網址。 url =「http://testenv.com/test?userid="+param1=」。生成的完整URL應爲http://testenv.com/test?userid=la%23na。java servlet中的GetParameter應該解碼userid到userid = la#na。 –