<ins id="6k1m6"><video id="6k1m6"></video></ins>

    <ruby id="6k1m6"><option id="6k1m6"></option></ruby>
    <code id="6k1m6"><option id="6k1m6"></option></code>
  1. <output id="6k1m6"></output>
    400-650-7353
    您所在的位置:首頁(yè) > IT干貨資料 > java > 【Java基礎知識】Servlet學(xué)習之Servlet運行機制(五)

    【Java基礎知識】Servlet學(xué)習之Servlet運行機制(五)

    一、Servlet運行機制

    Servlet是運行在Servlet容器中的服務(wù)器端的用來(lái)響應用戶(hù)請求的服務(wù)器小程序,它的生命周期由Servlet容器負責管理。

    Servlet在Servlet容器中,以單例模式存在,即:在Servlet生命周期中,Servlet容器只創(chuàng )建一個(gè)Servlet對象,所有的客戶(hù)請求都使用這一個(gè)Servlet對象來(lái)響應。

    當用戶(hù)請求到達時(shí),Servlet容器解析請求,檢查內存中是否已存在用戶(hù)要訪(fǎng)問(wèn)的Servlet對象;若存在,則直接使用該Servlet對象處理用戶(hù)請求;若不存在,則加載Servlet,創(chuàng )建Servlet對象,并實(shí)例化、初始化,然后使用這個(gè)Servlet對象處理用戶(hù)請求。

    在Servlet整個(gè)生命周期中,只實(shí)例化和初始化一次,即:只有一個(gè)Servlet實(shí)例對象為客戶(hù)請求提供服務(wù)。

    Servlet以單例模式運行,即使有多個(gè)用戶(hù)同時(shí)訪(fǎng)問(wèn)Servlet時(shí),Servlet容器中也只有一個(gè)Servlet實(shí)例對象存在。Servlet容器通過(guò)Servlet對象調用service()服務(wù)方法時(shí),采用多線(xiàn)程的方式使用Servlet對象。即:Servlet容器會(huì )為每一個(gè)用戶(hù)請求創(chuàng )建一個(gè)線(xiàn)程,由線(xiàn)程調用Servlet的service()方法為用戶(hù)請求提供服務(wù)。

    在Servlet容器中,用一個(gè)線(xiàn)程池來(lái)管理使用Servlet對象的多個(gè)線(xiàn)程,線(xiàn)程池在初始化時(shí),會(huì )創(chuàng )建一定數量的線(xiàn)程對象放在池子中,當需要時(shí),直接獲取線(xiàn)程對象并使用;使用后,線(xiàn)程對象歸還線(xiàn)程池;以避免頻繁創(chuàng )建線(xiàn)程、銷(xiāo)毀線(xiàn)程對象,從而提高Servlet容器的性能。

    下圖描述了Servlet的請求與響應過(guò)程:客戶(hù)機向WEB服務(wù)器發(fā)送請求,WEB服務(wù)器收到請求之后,轉發(fā)給Servlet容器,Servlet容器創(chuàng )建HttpServletRequest和HttpServletResponse兩個(gè)對象,分別封裝請求數據和響應數據,并將它們傳給線(xiàn)程池中分配的線(xiàn)程,該線(xiàn)程訪(fǎng)問(wèn)Servlet處理用戶(hù)請求,處理完畢,將結果返回Servlet容器,線(xiàn)程歸還線(xiàn)程池;最后,WEB服務(wù)器負責將響應結果發(fā)送回客戶(hù)機。

    二、Servlet生命周期

    在Java中,任何對象都有生命周期。

    Servlet生命周期是指Servlet實(shí)例創(chuàng )建到Servlet實(shí)例銷(xiāo)毀的過(guò)程。按照功能的不同,大致可以將Servlet的生命周期分為三個(gè)階段:Servlet實(shí)例創(chuàng )建與初始化階段、運行階段、銷(xiāo)毀階段。

    在Servlet生命周期中,每個(gè)階段用不同的方法,完成各自的任務(wù)。

    初始化階段:調用Servlet的構造器和init()方法進(jìn)行實(shí)例化和初始化。

    運行階段:調用Servlet的service()方法處理客戶(hù)請求。

    銷(xiāo)毀階段:調用Servlet的destroy()方法結束Servlet的運行。

    最后,Servlet對象由Java虛擬機JVM的垃圾回收器進(jìn)行垃圾回收。

    1、初始化階段

    Servlet實(shí)例是Servlet容器創(chuàng )建的,并且在整個(gè)Servlet生命周期中,只創(chuàng )建一個(gè)。

    Servlet容器會(huì )根據Servlet在web.xml配置文件中的參數值,或者@WebServlet注解中的loadOnStartup屬性值,決定在哪個(gè)時(shí)候創(chuàng )建Servlet實(shí)例。

    如果參數值或loadOnStartup屬性值大于等于0,則Servlet容器在應用程序啟動(dòng)時(shí),加載Servlet字節碼文件,并調用Servlet的構造器和init()方法創(chuàng )建Servlet實(shí)例;否則,在客戶(hù)第一次訪(fǎng)問(wèn)Servlet時(shí),Servlet容器調用Servlet的構造器和init()方法創(chuàng )建Servlet實(shí)例。

    在整個(gè)Servlet生命周期中,Servlet對象只實(shí)例化和初始化一次,init()方法只被調用一次。

    init()代碼示例如下:

    public void init(ServletConfig arg0) throws ServletException {

    // TODO Auto-generated method stub

    }

    2、運行階段

    運行階段是Servlet生命周期中最重要的一個(gè)階段,在這個(gè)階段,Servlet容器會(huì )反復調用Servlet的service()方法處理客戶(hù)請求。

    當Servlet容器接收到用戶(hù)請求后,會(huì )為每一個(gè)用戶(hù)請求創(chuàng )建代表請求的ServletRequest對象和代表響應的ServletResponse對象,在調用service()方法處理用戶(hù)請求時(shí),將它們作為參數傳遞給Servlet的service()方法。service()方法通過(guò)ServletRequest對象,獲取客戶(hù)請求信息;通過(guò)ServletResponse對象,生成響應結果。

    在整個(gè)Servlet生命周期中,對于Servlet的每一次用戶(hù)訪(fǎng)問(wèn)請求,Servlet容器都會(huì )調用一次Servlet的service()方法,并且創(chuàng )建新的ServletRequest對象和ServletResponse對象,即:service()方法在 Servlet的整個(gè)生命周期中,會(huì )被多次調用。

    service()代碼示例如下:

    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {

    // TODO Auto-generated method stub

    arg1.setContentType("text/html; charset=utf-8");

    arg1.getWriter().println("這是通過(guò)實(shí)現Servlet接口創(chuàng )建的Servlet程序");

    }

    3、銷(xiāo)毀階段

    當WEB服務(wù)器關(guān)閉(Servlet容器也就終止了)或WEB應用程序被移出Servlet容器時(shí),Servlet會(huì )隨著(zhù)WEB應用程序的關(guān)閉而銷(xiāo)毀。

    Servlet容器調用Servlet的destroy()方法,銷(xiāo)毀Servlet對象,釋放Servlet對象占用的資源。

    在整個(gè)Servlet生命周期中,Servlet對象只銷(xiāo)毀一次,于是,destroy()方法只被Servlet容器調用一次。

    特別地:Servlet對象一旦創(chuàng )建,就一直駐留在內存中等待客戶(hù)的訪(fǎng)問(wèn),直到WEB服務(wù)器關(guān)閉或WEB應用程序被移出Servlet容器時(shí),Servlet對象才會(huì )被銷(xiāo)毀。

    destroy()代碼示例如下:

    public void destroy() {

    // TODO Auto-generated method stub

    }

    文章“【Java基礎知識】Servlet學(xué)習之Servlet運行機制(五)”已幫助

    >>本文地址:http://www.littlerockbway.com/zhuanye/2021/71019.html

    THE END  

    聲明:本站稿件版權均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉載。

    1 您的年齡

    2 您的學(xué)歷

    3 您更想做哪個(gè)方向的工作?

    獲取測試結果
    • 大前端大前端
    • 大數據大數據
    • 互聯(lián)網(wǎng)營(yíng)銷(xiāo)互聯(lián)網(wǎng)營(yíng)銷(xiāo)
    • JavaJava
    • Linux云計算Linux
    • Python+人工智能Python
    • 嵌入式物聯(lián)網(wǎng)嵌入式
    • 全域電商運營(yíng)全域電商運營(yíng)
    • 軟件測試軟件測試
    • 室內設計室內設計
    • 平面設計平面設計
    • 電商設計電商設計
    • 網(wǎng)頁(yè)設計網(wǎng)頁(yè)設計
    • 全鏈路UI/UE設計UI設計
    • VR/AR游戲開(kāi)發(fā)VR/AR
    • 網(wǎng)絡(luò )安全網(wǎng)絡(luò )安全
    • 新媒體與短視頻運營(yíng)新媒體
    • 直播帶貨直播帶貨
    • 智能機器人軟件開(kāi)發(fā)智能機器人
     

    快速通道fast track

    近期開(kāi)班時(shí)間TIME

    两个人在线观看免费播放_国产精品天干天干_亚洲婷婷月色婷婷五月小蛇_男人的好小说全文免费阅读