2012-06-01 99 views
2

我已經通過URLEncoder和URLDecoder的javadocs。然後變得更好奇。將服務器視爲tomcat。在任何web應用程序中,每當我們提交 表單時,服務器都會將表單字段轉換爲urlencoded字段,以及何時request.getParamter(「fieldName」)。服務器再次使用URLDecoder對其進行解碼。 這是正確的嗎?服務器執行它還是瀏覽器?當我們在地址欄中輸入任何網址時會出現同樣的東西? 如果服務器或瀏覽器在我們需要在URLEncoder和URLDecoder的幫助下顯式地編碼或解碼請求參數,那麼 ?雖然這些都是基本問題,但無法清楚地找到這些問題。關於URLEncoder和URLDecoder的一些問題?

回答

1

在當我們提交表單的任何web應用,服務器表格字段轉換成url編碼領域,當我們做request.getParamter(「字段名」)。

不是。瀏覽器會這樣做。

服務器再次使用URLDecoder對其進行解碼。那是對的嗎?

是的。

服務器執行它還是瀏覽器?

瀏覽器。

如果服務器或瀏覽器確實,當我們需要進行編碼或類URLEncoder和URLDecoder的幫助下明確解碼請求參數 ?

我不知道這意味着什麼,但它仍然是瀏覽器。如果您從應用程序代碼發送請求,則只需要對請求參數進行編碼。如果你在一個servlet容器中運行,你根本不需要解碼它們:它會爲你做到這一點。

+0

當你回答說,我們在瀏覽器中鍵入URL,瀏覽器在默認情況下不編碼。在我的代碼中,我看到了當我從servlet執行response.redirect時,它沒有編碼請求參數。但是,如果瀏覽器默認編碼不應該response.redirect也做編碼,因爲重定向請求被視爲從瀏覽器觸發的情況下處理? –

+0

看起來Response.Redirect的,因爲我們有響應即response.encodeRedirectURL獨立方法不編碼請求PARAM –

1

儘管瀏覽器在將URL傳遞給Web服務器之前確實對其進行了編碼,但瀏覽器可能始終沒有涉足。

例如您的服務器應用程序可能正在進行基於REST的調用,並通過簡單的GET請求傳遞一些數據。然後,如果您不將它編碼到您的服務器上,接收器解碼時可能會出現亂碼。

因此,強烈建議在將URL發送到服務器代碼之前始終對URL進行編碼。

+0

嗨anubhava看起來像我們在瀏覽器中輸入url的答案,瀏覽器在默認情況下執行編碼。在我的代碼中,我看到了當我從servlet執行response.redirect時,它沒有編碼請求參數。但是,如果瀏覽器默認編碼不應該response.redirect也做編碼,因爲重定向請求被視爲從瀏覽器觸發的情況下處理? –

+0

正如您已經評論了response.encodeRedirectURL(),它提供了用於編碼指定的URL以用於sendRedirect方法的目的,或者如果不需要編碼,則返回URL不變。 – anubhava

+0

另一件事anubhava,在http://docs.oracle.com/javase/1.4.2/docs/api/java/net/URLEncoder.html,一點說,所有其他字符是不安全的,並首先轉換成一個或使用某種編碼方案的更多字節,爲什麼所有其他字符都被認爲是不安全的。是否因爲黑客可以對這些角色進行一些操作,比如他們可以在空間角色中嵌入一些任意的東西。對? –