• <ins id="rwosr"><acronym id="rwosr"></acronym></ins>
      <kbd id="rwosr"></kbd>

      1. <tr id="rwosr"></tr>
        <code id="rwosr"></code> <output id="rwosr"><track id="rwosr"></track></output>

        <output id="rwosr"><track id="rwosr"></track></output>
        <sup id="rwosr"><track id="rwosr"></track></sup>
        <tr id="rwosr"><nobr id="rwosr"><delect id="rwosr"></delect></nobr></tr>

        <output id="rwosr"><track id="rwosr"></track></output>
        400-650-7353
        您所在的位置:首頁 > IT干貨資料 > java > 【Java基礎知識】Servlet學習之Servlet運行機制(五)

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

        • 發布: java培訓
        • 來源:Java培訓干貨資料
        • 2021-11-29 19:49:12
        • 閱讀()
        • 分享
        • 手機端入口

        一、Servlet運行機制

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

        Servlet在Servlet容器中,以單例模式存在,即:在Servlet生命周期中,Servlet容器只創建一個Servlet對象,所有的客戶請求都使用這一個Servlet對象來響應。

        當用戶請求到達時,Servlet容器解析請求,檢查內存中是否已存在用戶要訪問的Servlet對象;若存在,則直接使用該Servlet對象處理用戶請求;若不存在,則加載Servlet,創建Servlet對象,并實例化、初始化,然后使用這個Servlet對象處理用戶請求。

        在Servlet整個生命周期中,只實例化和初始化一次,即:只有一個Servlet實例對象為客戶請求提供服務。

        Servlet以單例模式運行,即使有多個用戶同時訪問Servlet時,Servlet容器中也只有一個Servlet實例對象存在。Servlet容器通過Servlet對象調用service()服務方法時,采用多線程的方式使用Servlet對象。即:Servlet容器會為每一個用戶請求創建一個線程,由線程調用Servlet的service()方法為用戶請求提供服務。

        在Servlet容器中,用一個線程池來管理使用Servlet對象的多個線程,線程池在初始化時,會創建一定數量的線程對象放在池子中,當需要時,直接獲取線程對象并使用;使用后,線程對象歸還線程池;以避免頻繁創建線程、銷毀線程對象,從而提高Servlet容器的性能。

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

        二、Servlet生命周期

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

        Servlet生命周期是指Servlet實例創建到Servlet實例銷毀的過程。按照功能的不同,大致可以將Servlet的生命周期分為三個階段:Servlet實例創建與初始化階段、運行階段、銷毀階段。

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

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

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

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

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

        1、初始化階段

        Servlet實例是Servlet容器創建的,并且在整個Servlet生命周期中,只創建一個。

        Servlet容器會根據Servlet在web.xml配置文件中的參數值,或者@WebServlet注解中的loadOnStartup屬性值,決定在哪個時候創建Servlet實例。

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

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

        init()代碼示例如下:

        public void init(ServletConfig arg0) throws ServletException {

        // TODO Auto-generated method stub

        }

        2、運行階段

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

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

        在整個Servlet生命周期中,對于Servlet的每一次用戶訪問請求,Servlet容器都會調用一次Servlet的service()方法,并且創建新的ServletRequest對象和ServletResponse對象,即:service()方法在 Servlet的整個生命周期中,會被多次調用。

        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("這是通過實現Servlet接口創建的Servlet程序");

        }

        3、銷毀階段

        當WEB服務器關閉(Servlet容器也就終止了)或WEB應用程序被移出Servlet容器時,Servlet會隨著WEB應用程序的關閉而銷毀。

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

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

        特別地:Servlet對象一旦創建,就一直駐留在內存中等待客戶的訪問,直到WEB服務器關閉或WEB應用程序被移出Servlet容器時,Servlet對象才會被銷毀。

        destroy()代碼示例如下:

        public void destroy() {

        // TODO Auto-generated method stub

        }

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

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

        THE END  

        聲明:本站稿件版權均屬中公教育優就業所有,未經許可不得擅自轉載。

        1 您的年齡

        2 您的學歷

        3 您更想做哪個方向的工作?

        獲取測試結果
        • 大前端大前端
        • 大數據大數據
        • 互聯網營銷互聯網營銷
        • JavaJava
        • Linux云計算Linux
        • Python+人工智能Python
        • 嵌入式物聯網嵌入式
        • 全域電商運營全域電商運營
        • 軟件測試軟件測試
        • 室內設計室內設計
        • 平面設計平面設計
        • 電商設計電商設計
        • 網頁設計網頁設計
        • 全鏈路UI/UE設計UI設計
        • VR/AR游戲開發VR/AR
        • 網絡安全網絡安全
        • 新媒體與短視頻運營新媒體
        • 直播帶貨直播帶貨
        • 智能機器人軟件開發智能機器人
         

        快速通道fast track

        近期開班時間TIME

        两个人在线观看免费播放_国产精品天干天干_亚洲婷婷月色婷婷五月小蛇_男人的好小说全文免费阅读
      2. <ins id="rwosr"><acronym id="rwosr"></acronym></ins>
          <kbd id="rwosr"></kbd>

          1. <tr id="rwosr"></tr>
            <code id="rwosr"></code> <output id="rwosr"><track id="rwosr"></track></output>

            <output id="rwosr"><track id="rwosr"></track></output>
            <sup id="rwosr"><track id="rwosr"></track></sup>
            <tr id="rwosr"><nobr id="rwosr"><delect id="rwosr"></delect></nobr></tr>

            <output id="rwosr"><track id="rwosr"></track></output>
            <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>