剛開始學Servlet時,隻想着去學怎麼用Servlet了,沒有想過Servlet怎麼工作的?今天花點時間總結一下,給你加油!!!
Servlet生命周期
大家都知道Servlet的生命周期分為三個階段:
1、初始化階段——調用Servlet的init()方法。在屬于下面情況時,Servlet容器會裝載Servlet:
- 在web.xml檔案中的<servlet></servlet>之間有添加如下代碼時,Servlet容器啟動時自動裝載某些Servlet,
這裡的loadon-startup取值有三種情況:
1) 小于0,負數的情況下,Web容器啟動時不做執行個體化,當Servlet首次被調用時執行個體化。
2) 大于0,Web容器啟動時執行個體Servlet,順序是由小到大,小值先被執行個體化。
3) 等于0,相當于是最大正整數,Web容器啟動時最後被執行個體化,
注意:不設定的話,則第一次請求時被執行個體化。
- Servlet容器啟動後,用戶端首次向Servlet發送請求
- Servlet類檔案被更新後,重新裝載Servlet,重新執行個體化
2、響應客戶請求階段——調用Servlet的service()方法。
3、銷毀——調用Servlet的destroy()方法,當Servlet容器(Tomcat)停止或重新啟動時,就會調用Servlet的destroy()方法銷毀,釋放資源。
在整個生命周期中,Servlet隻被執行個體化一次,即單執行個體,隻被銷毀一次
Servlet工作原理
Servlet工作原理基本上都是出于第二階段,即響應客戶請求階段。在這裡就舉個TomcatServlet是如何工作的,看下面幾步:
- 用戶端向Servlet容器(Tomcat)發出Http請求
- Servlet容器接收用戶端的請求
- Servlet容器建立一個HttpServletRequest對象,将用戶端請求的資訊封裝到這個對象中
- Servlet容器建立一個HttpServletResponse對象
- Servlet容器調用HttpServlet對象的service()方法,把HttpServletRequest對象與HttpServletResponse對象作為參數傳遞給HttpServlet
- HttpServlet調用HttpServletRequest對象的相關方法擷取Http請求資訊
- HttpServlet調用HttpServletResponse對象的相關方法,生成響應資料
- Servlet容器把HttpServlet的響應結果傳給用戶端
對于不了解Servlet的service()方法如何調用doGet()、doPost()等doXxxx()方法的,可以去http://blog.csdn.net/shixhzjy/article/details/8945849看看。