在學(xué)習(xí)JavaWeb最初的開始階段,大家都會(huì)遇到HttpServlet中的doGet和doPost方法。前兩天看《Head First Servlets & JSP》看到其中講關(guān)于Servlet中get請(qǐng)求和post請(qǐng)求的區(qū)別,現(xiàn)總結(jié)如下:
1:請(qǐng)求數(shù)據(jù)的大小不同。
因?yàn)間et請(qǐng)求的數(shù)據(jù)是要追加到URL中,而URL的數(shù)據(jù)量一般不能超過2K,所以用get請(qǐng)求的方法對(duì)數(shù)據(jù)的大小有限制。而post請(qǐng)求方法是把數(shù)據(jù)放在消息體中,所以理論上對(duì)數(shù)據(jù)量沒有限制。(但是實(shí)際操作中也不能能太大)
2:安全性不一樣
因?yàn)間et請(qǐng)求的數(shù)據(jù)是追加在URL中,外部用戶能很方便的看到,從這個(gè)角度上來講不安全。而post方法因?yàn)槭侵v請(qǐng)求放在消息體中,不會(huì)直接在URL中顯示所以從這個(gè)角度來說數(shù)據(jù)會(huì)比較安全。
3:書簽建立
get請(qǐng)求可以建立書簽;post請(qǐng)求則不能。例如:假設(shè)你有一個(gè)頁面允許用戶指定搜索規(guī)則。用戶可能一個(gè)星期之后才回來,想要得到原來的數(shù)據(jù),但此時(shí)服務(wù)器上已經(jīng)有新的數(shù)據(jù)了。
4:方法的使用
get用于得到某些東西,只是簡單的獲取,不會(huì)對(duì)服務(wù)器做任何的改變。post則用戶發(fā)送數(shù)據(jù)來進(jìn)行處理,可以修改服務(wù)器上的數(shù)據(jù)。
5:請(qǐng)求是否冪等
get請(qǐng)求是冪等的,它只是要得到一些東西,不會(huì)修改服務(wù)器上的內(nèi)容。它能執(zhí)行多次,而且不會(huì)產(chǎn)生任何不好的副作用。而post不是冪等的,post體中的提交的數(shù)據(jù)可能用于不可逆轉(zhuǎn)的事務(wù)。所以從這個(gè)角度上來看的話要慎重使用doPost()功能。
若表單中未指出method=“POST”,就會(huì)默認(rèn)為HTTPGET請(qǐng)求。即缺省狀態(tài)是調(diào)用get請(qǐng)求。
在學(xué)習(xí)JavaWeb最初的開始階段,大家都會(huì)遇到HttpServlet中的doGet和doPost方法。
(1)doGet方法:主要是處理Http中的Get請(qǐng)求
(2)doPost方法:主要是處理Http中的Post請(qǐng)求
那么Get請(qǐng)求和Post請(qǐng)求到底有什么樣的區(qū)別
(1)get只有一個(gè)流,參數(shù)附加在url后,大小個(gè)數(shù)有嚴(yán)格限制且只能是字符串
例如,http://localhost:8888/javaweb/getServlet?name=123
(2)post的參數(shù)是通過另外的流傳遞的,不通過url,所以可以很大,也可以傳遞二進(jìn)制數(shù)據(jù),如文件的上傳。
什么時(shí)候使用doGet和doPost方法 :
1.通過表單提交到的servlet,看form的method是get還是post
2.通過鏈接<a href…>訪問的servlet,doGet
3.直接在ie地址欄中鍵入的servlet地址,doGet