service()是在javax.servlet.Servlet接口中定義的, 在 javax.servlet.GenericServlet 中實現了這個接口, 而 doGet/doPost 則是在 javax.servlet.http.HttpServlet 中實現的, javax.servlet.http.HttpServlet 是 javax.servlet.GenericServlet 的子類. 所有可以這樣理解, 其實所有的請求均首先由 service() 進行處理, 而在 javax.servlet.http.HttpServlet 的 service() 方法中, 主要做的事情就是判斷請求類型是 Get 還是 Post, 然后調用對應的 doGet/doPost 執行.
doGet:處理GET請求 doPost:處理POST請求 doPut:處理PUT請求 doDelete:處理DELETE請求 doHead:處理HEAD請求 doOptions:處理OPTIONS請求 doTrace:處理TRACE請求 通常情況下,在開發基于HTTP的servlet時,開發者只需要關心doGet和doPost方法,其它的方法需要開發者非常的熟悉HTTP編程,因此這些方法被認為是高級方法。 而通常情況下,我們實現的servlet都是從HttpServlet擴展而來。 doPut和doDelete方法允許開發者支持HTTP/1.1的對應特性; doHead是一個已經實現的方法,它將執行doGet但是僅僅向客戶端返回doGet應該向客戶端返回的頭部的內容; doOptions方法自動的返回servlet所直接支持的HTTP方法信息; doTrace方法返回TRACE請求中的所有頭部信息。 對于那些僅僅支持HTTP/1.0的容器而言,只有doGet, doHead 和 doPost方法被使用,因為HTTP/1.
下邊是CSDN里邊的一些討論:
1.doGet和doPost的區別,在什么時候調用,為什么有時doPost中套用doGet
2.提交的form method=Post就執行DOPOST,否則執行GOGET 套用是不管method是post還是get都執行dopost方法
3.get:你可以通過URL傳參數。http://www.csdn.net/index.asp?user=1234 , Post不行
4.你的表單提交都有方法的,如果提交為get就調用get方法,用post就調用post方法.
get顯示你傳過去的參數,post則不顯示.
5.通常的寫法:先用doGet(),然后在doPost()中調用doGet(),這樣就萬無一失了
6. 簡單的說,get是通過http header來傳輸數據,有數量限制,而post則是通過http body來傳輸數據,沒有數量限制。
7.還有一點:get和post提交的數據量是不一樣的.
get好像最多只能在url后跟64K(?具體多少忘記了),
post好像沒這個限制,至少我post過5M以上的文本
還有url刷新時get好像可以不用重復提交原來提交的數據,
而post則會說內容已提交,想刷新請再提交.