2014-04-14 22 views
0

我有以下形式的HTML頁面爲什麼url在GET請求中沒有按預期構建?

<form name="input" action="sayHello1.jsp?param1=test1" method="get"> 
Username: <input type="text" name="user"> 
<input type="submit" value="Submit"> 
</form> 

我在文本框中輸入值「測試」並提交。

我希望看到在瀏覽器提交的URL爲

http://localhost:8080/helloWorld/sayHello1.jsp?param1=test1&user=test 

,但我看到的網址爲

http://localhost:8080/helloWorld/sayHello1.jsp?user=test 

爲何如此?

+0

您使用哪種瀏覽器?這與Java無關。 –

+0

我正在使用chrome – emilly

+2

無論如何我都會使用隱藏值,但這並不能回答問題。 –

回答

1

窗體的實現似乎是重寫查詢字符串(不合並它)。要獲得所需的行爲,請在表單中添加<input type="hidden" name="param1" value="test1">,並且不要嘗試向操作網址添加值。

根據this answer,我們應該期待這種行爲。

因此,您的瀏覽器將垃圾清除您的URI中現有的「?...」部分,並根據您的表單將其替換爲新的部分。

+0

但是這僅適用於Get請求不適用於POST。對? – emilly

+0

對。我認爲Sotirios的回答(以及說明和答案中的答案)在這一點上是明確的。 – PaulProgrammer

2

HTML specification狀態

當窗體元件形式從一個元素提交 (通常爲按鈕)提交,任選與腳本提交標誌置位,該 用戶代理必須運行以下步驟:

[...]

  • 讓查詢是重使用 application/x-www-form-urlencoded編碼算法編碼表單數據集,解釋爲 US-ASCII字符串。

  • 設目的地是一個新的URL,它是等於所不同的是 其部件的動作是由查詢替換(添加U + 003F QUESTION MARK字符(?)如果合適的話)。

基本上,它取代了現有的查詢串與來自形式參數產生一個新的。

您的瀏覽器與規格相關。

+0

+1。有趣的是,HTML 4規範說*如果方法是「get」並且動作是一個HTTP URI,那麼用戶代理將採取action的值,追加一個'?'然後附加表單數據集,使用「application/x-www-form-urlencoded」內容類型進行編碼。*如果該操作已經包含查詢字符串,那麼顯然會導致錯誤的URL,並且我猜測該行爲在這種情況下是不確定的。 HTML5規範更清晰。 –

+0

但是有了post請求,我看到了正確的url,即「http:// localhost:8080/helloWorld/sayHello1.jsp?param1 = test1」 – emilly

+1

@ user3222249如果你關注這個鏈接,GET和POST有不同的行爲。對於POST,瀏覽器保持原樣。 –

相關問題