經常使用表單,一直使用的都是post方式,post將資料封裝到請求體中,相對於get安全一點;而post處理中文編碼問題也比get簡單(get需要將url編碼,後台接受到後還需要解碼)。今天我想要使用get方式提交表單,卻遇到了引數丟失的問題(姑且這樣稱呼這個問題吧),並不是get方式表單提交的資料就會丟失,而是自己對表單理解的還不到位,使用錯誤。
乙個get方式提交的表單:
<form
action
="$/myservlet?name=lz"
method
="get"
>
<
input
type
="text"
name
="password"
/>
<
input
type
="submit"
value
="提交"
/>
form
>
重點在於?號後面的name引數,我想當然的以為password的值會最加到後面,就如:
但是事實上,真正的url為:
沒錯,完全不管?號後面是否有值,直接將password追加到?號後面,所以我們在後台想要得到這個name的值,當然就得不到了。
而我們常用的post方式會怎樣呢?
將method改為post之後,再次提交,可以發現提交的url:
而password引數封裝在請求體中傳給後台,所以後台既可以得到name的值,也可以得到password的值,都沒有問題。
我們姑且將追加在?後面的引數稱之為查詢字串,而將寫在input中的值稱之為表單資料。
注意:查詢字串不能使用get方式的表單進行提交,想要提交可以使用隱藏域的方式(作為表單資料),而post沒有問題;表單資料不論使用哪種方式提交都是可以正確提交到後台的。
這個例子即使是比較極端的,但是如果有類似的需求還是需要注意一下。
既然這裡說到表單,我再記錄一下如何使用表單發put或者delet型別的請求,其實表單只支援get或post的請求,其method的方法選項也只有這兩種,如果我們使用restful風格的url,就需要解決這個問題。
步驟:1.在web.xml中配置hiddenhttpmethodfilter 這個filter,其實就是這個filter將post請求轉變為put或是delet,其實在頁面發的還是post請求:
2.表單一定要使用post請求,然後在表單中新增乙個隱藏域:
<%--因為使用put提交,所以需要乙個隱藏域name
=_method
--%>
<
input
type
="hidden"
name
="_method"
value
="put"
/>
隱藏域input的名應定要是_method,至此,就可以根據隱藏域value的值發出put或delete請求了。
表單的提交方式POST和GET
post和get都是表單屬性method的可選值,method的預設值為get,兩者的主要區別在於 1.在客戶端,get方式在通過url提交資料,提交後在位址列中的位址如圖1.4.3所示。圖1.4.3 get方式提交表單後的位址列 而post提交後地欄不變,如圖1.4.4所示。圖1.4.4 post...
表單的提交方式POST和GET
post和get都是表單屬性method的可選值,method的預設值為get,兩者的主要區別在於 1.在客戶端,get方式在通過url提交資料,提交後在位址列中的位址如圖1.4.3所示。圖1.4.3get方式提交表單後的位址列 而post提交後地欄不變,如圖1.4.4所示。圖1.4.4post方式...
表單的提交方式POST和GET的區別
具體區別是 1 伺服器端獲取資料的方式不同。post方式傳遞的資料,必須用request.form 獲取。get方式傳遞的資料,必須用request.querystring 獲取。2 post比get安全性較強。在客戶端,get方式在通過url提交資料,提交後在位址列中的位址如圖所示 而post提交...