Servlet規(guī)范和Servlet容器知識點有哪些

本篇內(nèi)容介紹了“Servlet規(guī)范和Servlet容器知識點有哪些”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元東海做網(wǎng)站,已為上家服務(wù),為東海各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108

HTTP服務(wù)器收到請求后,我們的Java類要來處理,為了防止HTTP服務(wù)器代碼和業(yè)務(wù)代碼耦合,出現(xiàn)了面向接口編程的servlet接口,有時我們也把實現(xiàn)了 Servlet 接口的業(yè)務(wù)類叫作 Servlet。對于特定的請求,HTTP 服務(wù)器如何知道由哪個 Servlet 來處理呢?Servlet 又是由誰來實例化呢?顯然 HTTP 服務(wù)器不適合做這個工作,否則又和業(yè)務(wù)類耦合了。然后Servlet 容器就是用來加載和管理業(yè)務(wù)類。HTTP 服務(wù)器不直接跟業(yè)務(wù)類打交道,而是把請求交給 Servlet 容器去處理,Servlet 容器會將請求轉(zhuǎn)發(fā)到具體的 Servlet,如果這個 Servlet 還沒創(chuàng)建,就加載并實例化這個 Servlet,然后調(diào)用這個 Servlet 的接口方法。因此 Servlet 接口其實是 Servlet 容器跟具體業(yè)務(wù)類之間的接口。

Servlet規(guī)范和Servlet容器知識點有哪些

Servlet 接口中service 方法,具體業(yè)務(wù)類在這個方法里實現(xiàn)處理邏輯。這個方法有兩個參數(shù):ServletRequest 和 ServletResponse。ServletRequest 用來封裝請求信息,ServletResponse 用來封裝響應(yīng)信息,因此本質(zhì)上這兩個類是對通信協(xié)議的封裝。比如 HTTP 協(xié)議中的請求和響應(yīng)就是對應(yīng)了 HttpServletRequest 和 HttpServletResponse 這兩個類。你可以通過 HttpServletRequest 來獲取所有請求相關(guān)的信息,包括請求路徑、Cookie、HTTP 頭、請求參數(shù)等。此外,我在專欄上一期提到過,我們還可以通過 HttpServletRequest 來創(chuàng)建和獲取 Session。而 HttpServletResponse 是用來封裝 HTTP 響應(yīng)的。你可以看到接口中還有兩個跟生命周期有關(guān)的方法 init 和 destroy,這是一個比較貼心的設(shè)計,Servlet 容器在加載 Servlet 類的時候會調(diào)用 init 方法,在卸載的時候會調(diào)用 destroy 方法。我們可能會在 init 方法里初始化一些資源,并在 destroy 方法里釋放這些資源,比如 Spring MVC 中的 DispatcherServlet,就是在 init 方法里創(chuàng)建了自己的 Spring 容器。你還會注意到 ServletConfig 這個類,ServletConfig 的作用就是封裝 Servlet 的初始化參數(shù)。你可以在web.xml給 Servlet 配置參數(shù),并在程序里通過 getServletConfig 方法拿到這些參數(shù)。有接口一般就有抽象類,抽象類用來實現(xiàn)接口和封裝通用的邏輯,因此 Servlet 規(guī)范提供了 GenericServlet 抽象類,我們可以通過擴展它來實現(xiàn) Servlet。雖然 Servlet 規(guī)范并不在乎通信協(xié)議是什么,但是大多數(shù)的 Servlet 都是在 HTTP 環(huán)境中處理的,因此 Servet 規(guī)范還提供了 HttpServlet 來繼承 GenericServlet,并且加入了 HTTP 特性。這樣我們通過繼承 HttpServlet 類來實現(xiàn)自己的 Servlet,只需要重寫兩個方法:doGet 和 doPost。

Servlet 容器

當客戶請求某個資源時,HTTP 服務(wù)器會用一個 ServletRequest 對象把客戶的請求信息封裝起來,然后調(diào)用 Servlet 容器的 service 方法,Servlet 容器拿到請求后,根據(jù)請求的 URL 和 Servlet 的映射關(guān)系,找到相應(yīng)的 Servlet,如果 Servlet 還沒有被加載,就用反射機制創(chuàng)建這個 Servlet,并調(diào)用 Servlet 的 init 方法來完成初始化,接著調(diào)用 Servlet 的 service 方法來處理請求,把 ServletResponse 對象返回給 HTTP 服務(wù)器,HTTP 服務(wù)器會把響應(yīng)發(fā)送給客戶端。

Servlet 規(guī)范里定義了 ServletContext 這個接口來對應(yīng)一個 Web 應(yīng)用。Web 應(yīng)用部署好后,Servlet 容器在啟動時會加載 Web 應(yīng)用,并為每個 Web 應(yīng)用創(chuàng)建唯一的 ServletContext 對象。你可以把 ServletContext 看成是一個全局對象,一個 Web 應(yīng)用可能有多個 Servlet,這些 Servlet 可以通過全局的 ServletContext 來共享數(shù)據(jù),這些數(shù)據(jù)包括 Web 應(yīng)用的初始化參數(shù)、Web 應(yīng)用目錄下的文件資源等。由于 ServletContext 持有所有 Servlet 實例,你還可以通過它來實現(xiàn) Servlet 請求的轉(zhuǎn)發(fā)。


| -  MyWebApp
      | -  WEB-INF/web.xml        -- 配置文件,用來配置Servlet等
      | -  WEB-INF/lib/           -- 存放Web應(yīng)用所需各種JAR包
      | -  WEB-INF/classes/       -- 存放你的應(yīng)用類,比如Servlet類
      | -  META-INF/              -- 目錄存放工程的一些信息

Servlet 規(guī)范提供了兩種擴展機制:Filter 和 Listener。Filter 是過濾器,這個接口允許你對請求和響應(yīng)做一些統(tǒng)一的定制化處理,比如你可以根據(jù)請求的頻率來限制訪問,或者根據(jù)國家地區(qū)的不同來修改響應(yīng)內(nèi)容。過濾器的工作原理是這樣的:Web 應(yīng)用部署完成后,Servlet 容器需要實例化 Filter 并把 Filter 鏈接成一個 FilterChain。當請求進來時,獲取第一個 Filter 并調(diào)用 doFilter 方法,doFilter 方法負責調(diào)用這個 FilterChain 中的下一個 Filter。Listener 是監(jiān)聽器,這是另一種擴展機制。當 Web 應(yīng)用在 Servlet 容器中運行時,Servlet 容器內(nèi)部會不斷的發(fā)生各種事件,如 Web 應(yīng)用的啟動和停止、用戶請求到達等。 Servlet 容器提供了一些默認的監(jiān)聽器來監(jiān)聽這些事件,當事件發(fā)生時,Servlet 容器會負責調(diào)用監(jiān)聽器的方法。當然,你可以定義自己的監(jiān)聽器去監(jiān)聽你感興趣的事件,將監(jiān)聽器配置在web.xml中。比如 Spring 就實現(xiàn)了自己的監(jiān)聽器,來監(jiān)聽 ServletContext 的啟動事件,目的是當 Servlet 容器啟動時,創(chuàng)建并初始化全局的 Spring 容器。Filter 是干預(yù)過程的,它是過程的一部分,是基于過程行為的。Listener 是基于狀態(tài)的,任何行為改變同一個狀態(tài),觸發(fā)的事件是一致的。

“Servlet規(guī)范和Servlet容器知識點有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

分享標題:Servlet規(guī)范和Servlet容器知識點有哪些
瀏覽地址:http://bm7419.com/article44/jdchhe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)網(wǎng)站建設(shè)、網(wǎng)站改版、商城網(wǎng)站、用戶體驗、網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司