2016-01-07 61 views
0

在我的碼頭服務器日誌中,我注意以下事項:request.getParameter和request.getQueryString會產生不兼容的結果嗎?

2016年1月7日10:03:52605 DEBUG WS.DuccHandlerProxy - N/A手柄(GET/ducc-的servlet /文件內容FNAME = /家庭/ degenaro/ducc /日誌/ 1/X + Y + z.log &頁= 1)

2016年1月7日10:03:52605 DEBUG WS.DuccHandler - N/A handleDuccServletFileContents適量:FNAME = /家庭/ degenaro/ducc /日誌/ 1/X + Y + z.log &頁= 1

2016年1月7日10:03:52605 DEBUG WS.DuccHandler - N/A handleDuccServletFileContents FN:/家庭/ degenaro/ducc /記錄/ 1/xy z.log

對應於最後兩個條目的代碼分別包含request.getQueryString()和request.getParameter(「fname」)的結果。

後者爲什麼失去了「+」字?

+0

我沒有搜索,但沒有找到合適的答案。你有指向我尋求的答案的指針嗎?謝謝。 – user2133121

回答

0

當你調用request.getQueryString()你得到的查詢字符串,因爲它是在地址欄。當你打電話給request.getParameter("fname")時,你可以得到任何解碼後的參數值。 +中的一個url參數表示一個空格,所以將其解碼爲空格。

+0

謝謝!所以如果輸入是不可變的,那麼我想我必須自己解析查詢字符串並放棄使用request.getParameter()? – user2133121

+0

@ user2133121你想要文字'+'嗎?如果您創建鏈接,則在構建鏈接時應該在參數上使用urlencode函數。 (它會用'%2B'替換'+',通過'request.getParameter(「fname」)將其轉換回字面值'+'' – developerwjk

+0

更改請求不是我的第一選擇。注意什麼?我沒有找到HttpServlet文檔http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getParameter%28java.lang.String%29,它沒有提到不同的這兩種方法之間的行爲 – user2133121

相關問題