從零開始學習Servlet(1): 作用和生命週期
阿新 • • 發佈:2019-02-05
Servlet
作用
Servlet 是實現了 javax.servlet.Servlet 介面的 Java 類, 負責處理客戶端的 HTTP 請求。是客戶端 與 資料庫或後臺應用程式之間互動的媒介 。功能:
1. 讀取客戶端傳送的資料
2. 處理資料,生成結果
3. 傳送資料到客戶端
讀取的資料包括:顯式資料如(HTML表單),隱式HTTP請求資料(cookies、媒體型別和壓縮格式的內容)
處理過程涉及的操作:訪問資料庫,執行遠端方法呼叫(Remote Method Invocation)RMI或者公共物件請求代理體系結構(Common Object Request Broker Architecture)CORBA呼叫,呼叫Web服務,或者直接計算得出對應的響應。
傳送的資料:
顯示資料:文件(HTML/XML格式的文字檔案、二進位制檔案(GIF影象)、Excel檔案)。
隱式資料:通知客戶端返回的文件型別(如HTML)、設定cookies和快取引數、其他型別的任務。
生命週期
- 初始化 init()
- 處理客戶端的請求 service()
- 終結 destroy()
- 最後Servlet由JVM的垃圾回收器回收
init()
public void init() throws ServletException {
// 初始化程式碼...
}
- 只調用一次,在且僅在第一次建立Servlet時呼叫。
- Servlet創建於使用者第一次呼叫對應於該Servlet的url,但是也可以指定Servlet在伺服器第一次啟動時被載入。
- 使用者呼叫一個Servlet時,就會建立一個Servlet例項,用一個使用者請求都會產生一個新的執行緒。然後移交給doGet或doPost方法。init()方法簡單的建立或者載入一些資料,這些資料將會用於Servlet的整個生命週期。
service()
public void service(ServletRequest request,ServletResponse response)throws ServletException,IOException{
....
doGet();
...
doPost();
....
}
- 執行任務的主要方法,Web伺服器呼叫service()方法來處理來自客戶端的請求,並把格式化的響應結果返回給客戶端
- 當Web伺服器接收到一個Servlet請求時,會產生一個新的執行緒然後呼叫服務,service()方法檢查HTTP請求型別(GET、POST、PUT、DELETE等),並在適當的時候呼叫doGet、doPost、doPut、doDelete等方法。
- servive() 由Web伺服器呼叫,service()根據請求的型別呼叫doGet/doPost/…..等。所以我們不對service()方法做操作。只需根據客戶端的請求型別來重寫doGet()/doPost()/…
doGet()和doPost()
deget()和doPost()是請求中使用最多的方法
- doGet()
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException ,IOException{
//Servlet程式碼
}
doGet()方法 處理GET請求,一般GET請求來自於一個URL的正常請求,或者是來自一個未指定METHOD的HTML表單。
- doPost()
public void doPost(HttpServletRequest request,HttpResponse response)throws ServletException,IOException{
//Servlet 程式碼
}
doPost()方法處理POST請求 ,POST請求來自於一個特別指定了METHOD為POST的HTML表單。
destory()
public void desstroy(){
//
}
- destory()方法只會被呼叫一次,在Servlet生命週期結束時呼叫。
- destroy()負責關閉資料庫連線、停止後臺執行緒、把Cookie列表或者點選計數器寫入到磁碟,並執行其他類似的清理活動
總結
呼叫init()生成Servlet ,多次請求建立多個執行緒,執行單例的service()方法處理請求,處理完完成destory銷燬。