iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 6
0

前言

昨天其實已經就寫好今日的文章
但沒儲存到...
今天主要是淺談一下Servlet的生命週期
以及HTTP的一些API說明(對應到書的章節ch4)


Servlet life cycle

Servlet的生命週期,大致可分為:

  • init()
    Container建立Servlet instance後,會執行init()進行初始化工作
    如果有需要其他初始工作(註冊物件或是DB設定),可以去Override,只會執行一次

  • service()
    當client 傳送第一個request時,Container 會啟動一個新的thread,去執行此方法
    根據傳進的HTTP去呼叫對應的Servlet方法,通常service()是不會去Override的,service()只是讓HTTP
    找到該執行方法(eg. doGet())

  • doGet()& doPost()
    此為程式的起點,邏輯一開始的地方,至少會去Override doGet() 或是 doPost()
    不然Contsainer會當作不接受HTTP的方法

  • destory()
    同init()只會執行一次
    當Servlet準備GC(垃圾回收機制)前,會進行相關的清理工作

Servlet最重要的工作在於處理request
只會產生一個instance,由Container透過多個thread
來處理一個Servlet所發出的多個request

Servlet API

Servlet繼承了javax.servlet.http.HttpServlet
而HttpServlet又繼承了javax.servlet.GenericServlet
且GenericServlet實作了Servlet的interface

簡單以圖示表示一下
MyServlet -> HttpServlet -> GenericServlet --> Servlet

HttpServlet已經實作了大部分的servlet方法
另外這些HttpServlet傳入的參數HttpServletRequest&HttpServletResponse
由Container去實做這些介面
只要Servlet的service()被呼叫,Container會提供有哪些方法是可以使用的
只需透過interface的型別拿來使用即可

HTTP

HTTP提供的方法中
在開發最常只會用到GET 和POST
但在這裡還是簡單整理其他方法

  • HEAD
    類似get請求,但response不提供內容的資料,只回傳原本的header
    可在這看到本來request的url資訊

  • TRACE
    可做來debug或測試,讓client查出server接收到的訊息內容

  • PUT
    將附帶的資訊放到請求URL上

  • DELETE
    刪除URL上的resource

  • OPTIONS
    URL上列出可資源回應可使用的HTTP方法

  • CONNECT
    發出轉換TCP/IP的連線通道

最重要的還是GET 和POST方法
其中POST是屬於non-idempotent的
所以servlet也利用此特性來處理對資料的CRUD

此外如前幾天提到的
POST具有參數不受限制、以及安全性較高的特性
因此通常大部分都只會Override doPost()

今天就先記錄到這裡


上一篇
[Day 5] Servlet的頁面跳轉
下一篇
[Day 7] Request & Response
系列文
30 days JSP & Servlet學習紀錄 30

尚未有邦友留言

立即登入留言