最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaWEB中Servlet的生命周期詳解

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

一、什么是Servlet 生命周期?

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

Servlet對象什么時候被銷毀?

Servlet 對象創(chuàng)建了幾個?

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

二、Servlet 是由誰來維護的?

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

Tomcat 又叫 WEB 容器。

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

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

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

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

我們可以看到,當(dāng)我們在瀏覽器中發(fā)送請求時,這個無參構(gòu)造方法才會執(zhí)行,說明:只有用戶發(fā)送請求時,這個Servlet 對象 才會被創(chuàng)建。

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

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

<?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啟動時,創(chuàng)建對象、這里必須是正整數(shù),越小優(yōu)先級越高-->
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>StudentList</servlet-name>
        <!--請求路徑-->
        <url-pattern>/servlet/Student</url-pattern>
    </servlet-mapping>
</web-app>

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

四、測試 Tomcat 什么時候被銷毀?

我們在 新建一個模塊,在模塊中新建一個 AServlet 類 并 編寫三個方法

 修改配置文件,并重新部署 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>
        <!--請求路徑-->
        <url-pattern>/a</url-pattern>
    </servlet-mapping>
</web-app>

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

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

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

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

在執(zhí)行 destroy 方法時,對象沒有被銷毀,這是因為 destroy 方法是 實例方法,需要對象來調(diào)用次方法。在執(zhí)行之后 對象才會被銷毀

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

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

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

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

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

當(dāng) Servlet 類中 有一個 有參數(shù)構(gòu)造時,會報錯嗎?

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

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

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

        不可以,因為在Servlet 不建議構(gòu)建有參數(shù)構(gòu)造方法,所以 init 可以替代有參數(shù)構(gòu)造方法。

總結(jié)

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

相關(guān)文章

最新評論

五大连池市| 沿河| 萝北县| 甘孜县| 仙桃市| 祁连县| 枣庄市| 桑植县| 麻城市| 大足县| 枣庄市| 阳高县| 乳源| 阳城县| 西峡县| 磴口县| 英德市| 全椒县| 安康市| 阳朔县| 合江县| 宽甸| 中山市| 图木舒克市| 涟水县| 塔城市| 宁德市| 盐山县| 双峰县| 黔东| 阳城县| 法库县| 天门市| 渑池县| 布尔津县| 项城市| 荔浦县| 开封县| 和静县| 井冈山市| 元谋县|