1. 程式人生 > 實用技巧 >doGet()、doPost() 、service()之間關係

doGet()、doPost() 、service()之間關係

主題: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()方法。	     			

呼叫順序:如下圖