關於你上次提到的問題:
// --TCP/IP 協議詳解卷3
13.3.1 報文類型:請求與響應
HTTP / 1 . 0報文有兩種類型:請求和響應。HTTP / 1 . 0請求的格式是:
reqe t - l i n e
headers ( 0或有多個)
<blank line>
body (只對POST請求有效)
request - l i n e的格式是:
request request-URI HTTP版本號碼
支援以下三種請求:
1) G E T請求,返回re q u e s t - U R I所指出的任意資訊。
2) H E A D請求,類似於G E T請求,但伺服器程式只返回指定文檔的首部資訊,而不包含實際的文檔內容。該請求通常被用來測試超文本連結的正確性、可訪問性和最近的修改。
3) P O S T請求用來寄送電子郵件、新聞或發送能由互動使用者填寫的表格。這是唯一需要在請求中發送b o d y的請求。使用P O S T請求時需要在報文首部C o n t e n t - L e n g t h欄位中
指出b o d y的長度。
// --TCP/IP 協議詳解卷3
明白?get 請求表示用戶端請求一個uri,伺服器返回用戶端請求的uri,post請求表示用戶端請求的時候還要提交資料,比喻提交form表單,要提交的資料會放到請求報文的body部分。伺服器收到後這樣的請求後通常需要來處理這些資料。
應聘j2ee開發時問這個問題說明提問著的重點是伺服器對這兩種請求的處理有什麼不同,而不是這兩種請求的報文有什麼不同。當然作為一個jsp servlet的開發人員一般你是不會感覺到著兩種請求有什麼不同的,因為web伺服器已經對這些請求進行處理了,web伺服器調用相應的 jsp/servlet來響應用戶端請求的時候,對於post的請求,web伺服器已經把用戶端提交的資料取出來,添到request對象中去了。不過,對於get、post的請求servlet 的 doGet、 doPost方法會被響應調用。也就是說如果用戶端送來的是一個get的請求,那麼你寫到servlet中的dopost()方法中的代碼是不會執行的,反之如果是post的請求,寫在doget()中代碼是不會被調用的(對於所有方式的請求,寫在doservice的代碼是會被調用的,因為在HttpServlet類中doGet doPost的請求都是由doService來分發的,具體的看關於servlet的生命週期介紹)。