使用GET方式提交的表單遇到的問題

2022-02-04 20:11:10 字數 2182 閱讀 9956

經常使用表單,一直使用的都是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提交...