1. 程式人生 > >淺談Servlet

淺談Servlet

在做BS模式的程式的時候就會涉及到Servlet,那麼Servlet到底是什麼呢? 今天我就結合老師所講的內容和我自己的理解對Servlet的知識做一下整理

我主要從以下幾個方面來對Servlet展開介紹:

**1. Servlet 的概念 . 2. Servlet的作用 3. Servlet的執行步驟 4. Servlet的生命週期 5. Servlet的應用**

- Servlet的概念:

我們都知道sun公司在設計Java的時候就限定了13套介面規範.這13個介面規範其實就是我們平時使用的API文件,這裡面就包括xml,JDBC,jsp,Servlet等等,(在這兒不得不說一下Java的魅力所在,面向介面程式設計,對於面向介面程式設計我還會寫一篇文章轉門來說說),所以說Servlet其實就是sun公司的指定的一套介面規範,sun公司只負責定義這些介面需要實現什麼功能就可以了,而具體的實現就需要每個廠商根據sun公司定義的介面去做具體的實現,這就相當與USB介面,電腦生產廠商只需要定義好USB介面的標準,然後各種USB廠商則根據這個標準去生產各自的優盤,最後雖然有很多不同種類的優盤,但是都可以在同一臺電腦上使用,而Servlet就是這個USB插口的標準,我們使用的servlet.jar就是廠商生產的優盤. 那麼Servlet幹了什麼事情呢?

- Servlet的作用

web]專案是由三部分組成的,那就是 資料庫:儲存資料 伺服器:對客戶端的請求進行處理 瀏覽器:與使用者進行互動 因為這三部分之間是有資料互動的,所以要讓這三部分工作就需要將他們聯絡起來,聯絡起來的話就需要橋樑,其中資料庫和伺服器之間的橋樑就是JDBC,JDBC可以根據伺服器的不同的請求將資料從資料庫傳遞到伺服器,而瀏覽器和伺服器之間的互動就是通過Servlet進行互動的,Servlet將瀏覽器使用者的請求傳送給伺服器,然後伺服器經過處理,再通過Servlet將響應傳送給瀏覽器.並且Servlet必須放在Web伺服器(tomcat)中執行,web伺服器也可以稱之web容器,有了這個前提,可以做到通過瀏覽器,請求一個url地址,就可以執行servlet中的方法,最終,就是通過瀏覽器請求url,最終執行了一段java程式碼,於是這樣就把瀏覽器和java程式碼連線起來.

Servlet的執行步驟

1.首先瀏覽器通過位址列中的url與伺服器(tomcat)之間建立連線, 首先啟動伺服器的時候,tomcat會將專案載入進伺服器中,瀏覽器的位址列中輸入url地址的時候:比如http://localhost:8080//testmavenwebproject/login.jsp.底層通過socket套接字將位址列中的url資訊傳送給tomcat,然後tomcat根據得到的url資訊逐一解析 2.解析url資訊 根據testmavenwebprojecttomcat伺服器會將載入在tomcat容器中的web,xml配置資訊進行解析解析過程如下: 這裡寫圖片描述

3..瀏覽器對請求的資料打包,併發送到伺服器 4.web應用伺服器解析請求資料,並分別把資料封裝request,response物件 5.web應用伺服器根據url的路徑,尋找servlet反射載入並建立物件 6.web應用伺服器呼叫service方法,service方法根據method來決定呼叫doGet方法還是doPost方法還是doPut方法等 7.執行doXXX方法,方法中通過響應response物件,把資料響應到瀏覽器端 8.瀏覽器取出響應的結果資訊(響應實體內容),瀏覽器格式化顯示

Servlet的生命週期:

這個很重要,因為要想掌握Servlet就需要了解他的工作流程.

tomcat啟動時,會首先尋找web.xml檔案,解析xml檔案內容 並存儲到tomcat容器的記憶體中,用集合儲存 1.有servlet-mapping配置項 當瀏覽器請求某個url的時候,也就是說url在請求伺服器中的 servlet,如果web.xml有這個url,就尋找這個url的兄弟節點 servlet-name如果有就取名字,然後在整個web.xml中尋找Servlet-name結構中是否有同名稱,如果有找到他的兄弟節點servlet-class就取出class中的值,並反射例項化物件,說明建構函式被呼叫了,生命週期開始,自動呼叫init方法(如果有),init方法只執行一次,並做相關的初始化工作;然後自動呼叫service方法,service方法,會根據method方式來決定呼叫doXXX方法,只要伺服器不停止,每次請求都是呼叫service方法直到正常停止web應用伺服器,會自動呼叫destroy方法,destroy方法用於銷燬物件釋放記憶體空間,生命週期結束 2.帶有

<servlet>
 <load-on-startup>數字</load-on-startup>
</servlet>

可以有servlet-mapping,也可以沒有,在伺服器啟動的時候,servlet生命週期就開始,然後自動呼叫 init方法,只調用一次,如果有servlet-mapping就在用請求的時候執行service方法,如果沒有servlet-mapping,就不會執行 service方法,正常停止伺服器,會呼叫destroy方法,然後生命週期結束 注意: load-on-startup”

  • -此元素標記容器在啟動的時候就載入這個servlet, 生命週期開始
  • -他的值必須是一個整數,表示servlet應該被載入的順序
  • -當值為0或大於0時,表示容器在啟動的時候載入
  • -當值小於0或沒有指定此配置項時,表示容器在該servlet 被第一次請求的時候才載入
  • -整數值越小,該servlet優先順序就越高,容器啟動的時候載入 優先順序就優先載入
  • 當值相同的時候,容器就會按照和書寫順序相反的順序載入

Servlet還有很多的內容,但今天實在是寫不下去了,感冒了,嗓子好像腫了,以後再慢慢整理吧.