欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaWEB中Servlet的生命周期詳解

 更新時(shí)間:2022年01月20日 10:52:43   作者:2022加油呀  
大家好,本篇文章主要講的是JavaWEB中Servlet的生命周期詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下

一、什么是Servlet 生命周期?

Servlet 對(duì)象什么時(shí)候被創(chuàng)建?

Servlet對(duì)象什么時(shí)候被銷毀?

Servlet 對(duì)象創(chuàng)建了幾個(gè)?

Servlet 對(duì)象的聲明周期表示:Servlet 對(duì)象從出生到銷毀的過程是怎樣的

二、Servlet 是由誰(shuí)來(lái)維護(hù)的?

Servlet 是由 Tomcat 服務(wù)器全權(quán)負(fù)責(zé)的,程序員無(wú)法干預(yù)。

Tomcat 又叫 WEB 容器。

我們自己 new 的 Servlet 對(duì)象 是不受 WEB 容器 管理的。

WEB 容器 自己創(chuàng)建的 Servlet 對(duì)象,會(huì)放到一個(gè)集合中【Map集合】,自己創(chuàng)建的 Servlet 是不會(huì)放到這個(gè)集合中的。這個(gè)集合保存了 請(qǐng)求路徑 和 Servlet 對(duì)象 的對(duì)應(yīng)關(guān)系。

三、Servlet 對(duì)象 是什么時(shí)候創(chuàng)建的?

在 Servlet 類中 寫一個(gè)無(wú)參構(gòu)造方法,當(dāng)Tomcat 啟動(dòng)時(shí) 這個(gè)無(wú)參構(gòu)造方法 并沒有被啟動(dòng),說明 Tomcat 啟動(dòng)時(shí) 并不會(huì)提前創(chuàng)建對(duì)象。

我們可以看到,當(dāng)我們?cè)跒g覽器中發(fā)送請(qǐng)求時(shí),這個(gè)無(wú)參構(gòu)造方法才會(huì)執(zhí)行,說明:只有用戶發(fā)送請(qǐng)求時(shí),這個(gè)Servlet 對(duì)象 才會(huì)被創(chuàng)建。

那么可不可以讓 Tomcat 提前創(chuàng)建對(duì)象?

                是可以的,在配置文件中 增加一行代碼即可

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>StudentList</servlet-name>
        <!--完整包名-->
        <servlet-class>yangzhaoguang.servlet.StudentServlet</servlet-class>
        <!--設(shè)置Tomcat啟動(dòng)時(shí),創(chuàng)建對(duì)象、這里必須是正整數(shù),越小優(yōu)先級(jí)越高-->
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>StudentList</servlet-name>
        <!--請(qǐng)求路徑-->
        <url-pattern>/servlet/Student</url-pattern>
    </servlet-mapping>
</web-app>

 當(dāng)設(shè)置之后,Tomcat 啟動(dòng)時(shí) ,無(wú)參構(gòu)造方法執(zhí)行了,說明創(chuàng)建對(duì)象成功。但是這個(gè)方法不常用,提前創(chuàng)建對(duì)象會(huì)耗費(fèi)內(nèi)存。

四、測(cè)試 Tomcat 什么時(shí)候被銷毀?

我們?cè)?新建一個(gè)模塊,在模塊中新建一個(gè) AServlet 類 并 編寫三個(gè)方法

 修改配置文件,并重新部署 Servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>AServlet</servlet-name>
        <servlet-class>yangzhaoguang.servlet.AServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>AServlet</servlet-name>
        <!--請(qǐng)求路徑-->
        <url-pattern>/a</url-pattern>
    </servlet-mapping>
</web-app>

 當(dāng)我們啟動(dòng)Tomcat 時(shí),Servlet 并沒有被創(chuàng)建

第一次發(fā)送請(qǐng)求時(shí), init 和 service 被調(diào)用。Servlet 對(duì)象被創(chuàng)建

當(dāng)我們不停的刷新網(wǎng)頁(yè),每提交一次請(qǐng)求 service 方法就會(huì)執(zhí)行一次init 方法 只會(huì)在第一次用戶請(qǐng)求時(shí)執(zhí)行一次

 當(dāng)我們關(guān)閉 Tomcat 服務(wù)器時(shí),會(huì)銷毀 AServlet 的內(nèi)存,destroy 方法執(zhí)行了。

在執(zhí)行 destroy 方法時(shí),對(duì)象沒有被銷毀,這是因?yàn)?destroy 方法是 實(shí)例方法,需要對(duì)象來(lái)調(diào)用次方法。在執(zhí)行之后 對(duì)象才會(huì)被銷毀

Tomcat 響應(yīng)請(qǐng)求的過程:

 1、Tomcat 的配置文件中保存 路徑請(qǐng)求 與 Servlet 的對(duì)應(yīng)關(guān)系。Tomcat 根據(jù)瀏覽器中的URL,分析URL找到 AServlet 類

2、通過反射機(jī)制先調(diào)用 AServlet 中的無(wú)參構(gòu)造方法創(chuàng)建對(duì)象,執(zhí)行 init 完成初始化工作,調(diào)用 service 方法處理用戶的請(qǐng)求。【無(wú)參構(gòu)造方法是在init 方法執(zhí)行之前先執(zhí)行】

3、當(dāng)服務(wù)器關(guān)閉時(shí),執(zhí)行 destroy 方法。執(zhí)行之后銷毀對(duì)象。

創(chuàng)建對(duì)象(無(wú)參方法執(zhí)行)---->  初始化(init 方法執(zhí)行)---->   提供服務(wù)(service方法執(zhí)行) ---->  銷毀(destroy方法執(zhí)行)

當(dāng) Servlet 類中 有一個(gè) 有參數(shù)構(gòu)造時(shí),會(huì)報(bào)錯(cuò)嗎?

        會(huì)報(bào)錯(cuò):500錯(cuò)誤。一般情況下是服務(wù)端的java小程序出現(xiàn)了錯(cuò)誤。

 所以在開發(fā)中,不建議自己創(chuàng)建構(gòu)造方法。

思考一下:既然無(wú)參構(gòu)造方法和 init 方法都是在Servlet對(duì)象創(chuàng)建時(shí)執(zhí)行并只執(zhí)行一次,那么 無(wú)參構(gòu)造方法可以替代 init 方法嗎?

        不可以,因?yàn)樵赟ervlet 不建議構(gòu)建有參數(shù)構(gòu)造方法,所以 init 可以替代有參數(shù)構(gòu)造方法。

總結(jié)

到此這篇關(guān)于JavaWEB中Servlet的生命周期詳解的文章就介紹到這了,更多相關(guān)JavaWEB Servlet生命周期內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論