doGet()、doPost() 、service()之間關係
阿新 • • 發佈:2020-12-19
主題:doget()、doPost()、service()關係
1、首先:先明白Servlet體系結構
一、Servlet 介面 二、GenericServlet 抽象類 1、實現了:Servlet介面 2、將Servlet介面中其他的方法:預設做了(空實現),只將service()方法作為抽象 3、如何實現它? 定義:Servlet類時, 可直接繼承GenericServlet,實現service()方法即可 三、HttpServlet 抽象類 1、孫子類(繼承了:GenericServlet) 2、HttpServlet:是對http協議的一種封裝,簡化操作 3、如何使用它? 定義類繼承:HttpServlet 複寫doGet/doPost方法 service:會根據,method是:get或post等型別,自動呼叫
- 層次圖
2、正題:它們內部的方法
- Servlet(介面)
- GenericServlet(抽象類)
-
HttpServlet(抽象類)
- 擁有的方法
- doGet方法()
- doPost方法()
- service方法()有兩個
第一個:HttpServlet自己建立的Projected修飾的service()
第二個:HttpServlet(繼承父類)GenericServlet的, 但是這個service()方法,起源於Servlet介面
3、總結:三者執行的順序
一、當客戶端傳送請求:比如在遊覽器(提交表單) 二、伺服器會接收到資訊, 通過表單的action="定位servlet地址" 找到servlet 三、然後預設會去找:public修飾的service()方法: 1、當重寫了(父類)HttpServlet的public修飾的service方法時: 只執行(重寫的service方法的內容) 2、當(沒有)重寫了(父類)HttpServlet的public修飾的service方法時: 會自動呼叫HttpServlet中的service()方法, 這個方法最終會呼叫:HttpServlert中的 protected service(HttpServletRequest req, HttpServletResponse resp)方法, 進而會依次找doGet()、doPost()方法 四、當提交表單時 1、若使用get方式提交, 若沒有重寫doGet()方法, 那麼會報錯。 2、若使用post方式提交,若沒有重寫doPost()方法,那麼也會報錯。 五、所以很多(老師)推薦: 1、不去重寫(父類public修飾的)service()方法,直接寫doGet()、doPost()方法。 2、因為(不重寫)public修飾的service()方法, 會(先呼叫)(HttpService抽象類的) public的service()方法 (在呼叫)其protected 修飾的 service()方法。
呼叫順序:如下圖