1. 程式人生 > >JavaWeb之Servlet

JavaWeb之Servlet

數據對象 繼續 分享 img 一次 又是 數據 pattern 表示

1、什麽是Servlet?

  Servlet是一種動態Web的編程技術,本義是小服務程序的意思。主要作用是接收前端頁面傳過來的請求,然後發給服務器;接收到服務器返回來的信息後,將信息返回給前段頁面。基於Request--Response模型。

2、Servlet的訪問過程,分兩個小問題來理解:

  1、瀏覽器將請求發送到後臺是怎麽找到要訪問那個Servlet的呢?

  答:先看看web.xml裏Servlet的配置,如下圖:

  技術分享圖片

  再看看訪問的路徑:

  http://localhost:8080/ProjectName/ServletName

  從訪問路徑上看,端口後面緊跟著項目名稱,這就像是要張三,找到了張三在哪個村子裏;緊接著的是Servlet的名稱,這就相當於找到了張三家的門牌號。

  其實找到項目名稱這一步,tomcat服務器就會去這個項目下找web.xml這個文件了,去讀取web.xml的<Servlet>標簽的配置。

  首先會根據訪問路徑裏的/ServletName在<servlet-mapping>標簽裏面讀取<url-pattern>的值。找到了/hello,找到了這個hello也就找到了<servlet-name>裏的hello。

  到這一步,服務器會接著道<servlet>標簽裏面找<servlet-name>標簽裏的值,如果這個值也找到了,那就可以找到<servlet-class>裏的Servlet的真實名稱了。那就訪問到Servlet了。

  接下來的是就是要Servlet幹活了。

  2、Servlet使用什麽東西來接收前端傳過來的請求又是用什麽東西返回響應的數據給前端頁面?

  答:前面說Servlet是基於Request-Reponse模型設計的。

  前端頁面傳過來的數據對象就會被封裝成了Request對象,這個對象裏包含了請求的數據。

  程序得到Servlet的Request對象之後,就可以從這個對象裏面取出需要的數據進行業務邏輯的處理,然後將經過業務邏輯處理的數據發送到服務器的其他模塊,繼續其他的業務處理。

  其他的業務邏輯完成之後,會將數據返回,獲取到返回的數據之後,再將返回的數據封裝在Reponse對象裏,然後回傳給前端頁面。這樣就實現了請求--響應的通訊模型。

  其實關於這一點我們可以通過Servlet的Service方法來理解,service方法裏面有兩個參數,分別是ServletRequest和ServletReponse。這兩個參數就承包了承接請求數據和返回響應數據的重任。

3、Servlet的生命周期是怎麽樣的?

  Servlet有5個方法,分別是init、destory、service、getServletConfig、getServletInfo這5個。其中init、destory、servic這三個就是Servlet生命周期相關的方法。其實說白了,Servlet也就像人這輩子一樣:

  生一次,死一次,中間幹很多很多的活。所以init、和destory方法在一個生命周期;裏分別只調用了一次。service方法就要調用很多次,具體多少次要看業務需求是什麽樣子的。

  需要註意的是:init初始化方法,可以設置為跟隨服務器啟動而初始化,也可以設置為當有請求來訪問的時候再初始化。具體配置如下圖:

  技術分享圖片

  我們可以看到<servlet>標簽裏面配置了<load-on-startup>,這個標簽裏面如果值大於等於0,那就表示要隨著服務器的啟動而初始化,如果小於0那就意味著要等有請求訪問來調用了才會初始化。具體也還是要根據具體的業務需求來考慮的。

4、ServletConfig的說明

  ServletConfig是一個對象,也是Servlet裏的一個方法獲取的對象。通過這個對象可以實現對Servlet的配置信息的管理。實際上上面提到的init方法裏面有一個參數,這個參數就是ServletConfig對。看圖‘;

  技術分享圖片

  可以看到,我們可以砸iweb.xml文件裏面的Servlet裏通過<init-param>標簽來配置一些參數。當我們的Servlet需要用到這些參數的時候,就可以通過ServletConfig這個對象來獲取到 。比如像上面的配置我們就可以這樣獲取到username這個單數的值:

  ServletConfig config = getServletConfig();//獲取ServletConfig對象
String userName = config.getInitParameter("username");//獲取username對應的值。

5、ServletContext對象

  ServlertContext對象是Servlet的全局對象,對Servlel有著重要的意義。理解了ServlertContext地後面的學習也是很重要的。上面說的ServletConfig對象就維護了ServletContext對象。每一個web應用都會創建一個ServletContext對象,這個對象代表了當前的應用。一個web應用裏面有那麽多的servlet,servlet跟servlet之間需要共享數據,怎麽實現的呢?就是通過這個ServletContext來實現。可以說ServletContext就是Servlet的上下文。我們可以通過源碼來看看ServletContext是什麽樣的,如下圖:

  技術分享圖片

可以看到,ServletContext是一個有著很多方法的接口。我們就通過這些方法來實現對web整個全局的Servlet的一個管理,比如要設置一共全局變量來統計網站訪問網站的訪次數,就可以將count變量通過ServletContext來實現在多個Servlet之間共享這個變量,來達到無論訪問哪一個servlet都會計算一次訪問的目的。

  

JavaWeb之Servlet