簡要說一下http請求報文的格式:
HTTP請求包括三部分:請求行(Request Line),頭部(Headers)和數據體(Body)。其中,請求行由請求方法(method),請求網址Request-URI和協議 (Protocol)構成,而請求頭包括多個屬性,數據體則可以被認為是附加在請求之后的文本或二進制文件。
get 請求表示客戶端請求一個uri,服務器返回客戶端請求的uri,post請求表示客戶端請求的時候還要提交數據,比如提交form表單,要提交的數據會放到請求報文的body部分,服務器收到后這樣的請求后通常需要來處理這些數據。
get請求是將數據放在請求的url之后,是一個以"?"打頭的查詢字符串,比如常見的test.jsp?name=aaa&age=10這種格式,這個是可以直觀看到的,(登陸的用戶名和密碼可不能用get哦)。由于http協議的限制,這樣放在url之后的get請求的數據是受大小限制的,最大長度不超過256字符(好像是,可能和web服務器有關)。
為了能夠傳輸更多的數據,可以采用post請求,post請求是將數據放到了http的Content中,這就無大小的限制了,而且傳輸的數據不能直接被看到(登陸的用戶名和密碼一般采用post請求),大量的數據或是文件上傳,都只能用post來傳輸。
簡單的說,get是通過http header來傳輸數據,有數量限制,而且可見,而post則是通過http body來傳輸數據,沒有數量限制。
再說servlet中的doget和dopost方法
web服務器處理這些請求的時候,如果客戶端提交的是get請求,則響應doget方法,如果客戶端提交的是post請求,則響應dopost方法。這是web服務器在響應doservice方法時,由doservice方法分發下來的(詳情請查看http協議和servlet生命周期方面的文章)