servlet生命周期_動力節(jié)點Java學(xué)院整理
本文為大家分享了servlet生命周期的相關(guān)資料,供大家參考,具體內(nèi)容如下
1.Servlet 生命周期:Servlet 加載--->實例化--->服務(wù)--->銷毀。
2.init():在Servlet的生命周期中,僅執(zhí)行一次init()方法。它是在服務(wù)器裝入Servlet時執(zhí)行的,負責(zé)初始化Servlet對象??梢耘渲梅?wù)器,以在啟動服務(wù)器或客戶機首次訪問Servlet時裝入Servlet。無論有多少客戶機訪問Servlet,都不會重復(fù)執(zhí)行init()。
3.service():它是Servlet的核心,負責(zé)響應(yīng)客戶的請求。每當(dāng)一個客戶請求一個HttpServlet對象,該對象的Service()方法就要調(diào)用,而且傳遞給這個方法一個“請求”(ServletRequest)對象和一個“響應(yīng)”(ServletResponse)對象作為參數(shù)。在HttpServlet中已存在Service()方法。默認的服務(wù)功能是調(diào)用與HTTP請求的方法相應(yīng)的do功能。
4.destroy(): 僅執(zhí)行一次,在服務(wù)器端停止且卸載Servlet時執(zhí)行該方法。當(dāng)Servlet對象退出生命周期時,負責(zé)釋放占用的資源。一個Servlet在運行service()方法時可能會產(chǎn)生其他的線程,因此需要確認在調(diào)用destroy()方法時,這些線程已經(jīng)終止或完成。
Tomcat 與 Servlet 是如何工作的:
步驟:
1.Web Client 向Servlet容器(Tomcat)發(fā)出Http請求
2.Servlet容器接收Web Client的請求
3.Servlet容器創(chuàng)建一個Request對象,將Web Client請求的信息封裝到這個對象中。
4.Servlet容器創(chuàng)建一個Response對象
5.Servlet容器調(diào)用HttpServlet對象的service方法,把Request對象與Response對象作為參數(shù)傳給Servlet 對象。
6.Servlet調(diào)用Request對象的有關(guān)方法,獲取Http請求信息。
7.HttpServlet調(diào)用Response對象的有關(guān)方法,生成響應(yīng)數(shù)據(jù)。
8.Servlet容器把HttpServlet的響應(yīng)結(jié)果傳給Web Client。
Servlet工作原理:
1、首先簡單解釋一下Servlet接收和響應(yīng)客戶請求的過程,首先客戶發(fā)送一個請求,Servlet是調(diào)用service()方法對請求進行響應(yīng)的,通過源代碼可見,service()方法中對請求的方式進行了匹配,選擇調(diào)用doGet,doPost等這些方法,然后再進入對應(yīng)的方法中調(diào)用邏輯層的方法,實現(xiàn)對客戶的響應(yīng)。在Servlet接口和GenericServlet中是沒有doGet()、doPost()等等這些方法的,HttpServlet中定義了這些方法,但是都是返回error信息,所以,我們每次定義一個Servlet的時候,都必須實現(xiàn)doGet或doPost等這些方法。
2、每一個自定義的Servlet都必須實現(xiàn)Servlet的接口,Servlet接口中定義了五個方法,其中比較重要的三個方法涉及到Servlet的生命周期,分別是上文提到的init(),service(),destroy()方法。GenericServlet是一個通用的,不特定于任何協(xié)議的Servlet,它實現(xiàn)了Servlet接口。而HttpServlet繼承于GenericServlet,因此HttpServlet也實現(xiàn)了Servlet接口。所以我們定義Servlet的時候只需要繼承HttpServlet即可。
3、Servlet接口和GenericServlet是不特定于任何協(xié)議的,而HttpServlet是特定于HTTP協(xié)議的類,所以HttpServlet中實現(xiàn)了service()方法,并將請求ServletRequest、ServletResponse 強轉(zhuǎn)為HttpRequest 和 HttpResponse。
創(chuàng)建Servlet對象的時機:
1.Servlet容器啟動時:讀取web.xml配置文件中的信息,構(gòu)造指定的Servlet對象,創(chuàng)建ServletConfig對象,同時將ServletConfig對象作為參數(shù)來調(diào)用Servlet對象的init方法。
2.在Servlet容器啟動后:客戶首次向Servlet發(fā)出請求,Servlet容器會判斷內(nèi)存中是否存在指定的Servlet對象,如果沒有則創(chuàng)建它,然后根據(jù)客戶的請求創(chuàng)建HttpRequest、HttpResponse對象,從而調(diào)用Servlet 對象的service方法。
3.Servlet Servlet容器在啟動時自動創(chuàng)建Servlet,這是由在web.xml文件中為Servlet設(shè)置的<load-on-startup>屬性決定的。從中我們也能看到同一個類型的Servlet對象在Servlet容器中以單例的形式存在。
<servlet> <servlet-name>Init</servlet-name> <servlet-class>org.xl.servlet.InitServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot?MP簡單的分頁查詢測試實現(xiàn)步驟分解
好久沒水后端的東西了,最近在做vue項目寫前端的代碼,所以cloud也停進度了,吃完飯突然記得我沒有在博客里寫分頁的東西,雖然項目中用到了,但是沒有拎出來,這里就拎出來看看2023-04-04SpringBoot Redis用注釋實現(xiàn)接口限流詳解
Redis 除了做緩存,還能干很多很多事情:分布式鎖、限流、處理請求接口冪等性。。。太多太多了~今天想和小伙伴們聊聊用 Redis 處理接口限流,這也是最近的 項目涉及到這個知識點了,我就拎出來和大家聊聊這個話題2022-07-07Spring Boot和Docker實現(xiàn)微服務(wù)部署的方法
這篇文章主要介紹了Spring Boot和Docker實現(xiàn)微服務(wù)部署的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01spring+mybatis 通過@ResponseBody返回結(jié)果中文亂碼的解決方法
下面小編就為大家分享一篇spring+mybatis 通過@ResponseBody返回結(jié)果中文亂碼的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12springboot對象為null的屬性在json中不顯示的解決
這篇文章主要介紹了springboot對象為null的屬性在json中不顯示的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09springboot2.x只需兩步快速整合log4j2的方法
這篇文章主要介紹了springboot2.x只需兩步快速整合log4j2的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05IDEA 中 30 秒創(chuàng)建一個 Spring Cloud Alibaba 工程
這篇文章主要介紹了IDEA 中 30 秒生成 Spring Cloud Alibaba 工程,本文通過圖文并茂的形式給大家介紹的非常詳細對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04