<dfn id="hx3xz"><listing id="hx3xz"><menuitem id="hx3xz"></menuitem></listing></dfn>

      <form id="hx3xz"><form id="hx3xz"><th id="hx3xz"></th></form></form><form id="hx3xz"></form>
        400-650-7353
        您所在的位置:首頁 > IT干貨資料 > java > Servlet學習之(五)Servlet運行機制

        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

        }

        文章“Servlet學習之(五)Servlet運行機制”已幫助

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

        THE END  

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

        領取零基礎自學IT資源

        (內含學習路線+視頻教程+項目源碼)

        涉及Java、Web前端、UI設計、軟件測試、Python等多個IT熱門方向

        打開微信掃一掃即可領取哦~

        1 您的年齡

        2 您的學歷

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

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

        快速通道fast track

        近期開班時間TIME

        无码高潮爽到爆的喷水视频

          <dfn id="hx3xz"><listing id="hx3xz"><menuitem id="hx3xz"></menuitem></listing></dfn>

            <form id="hx3xz"><form id="hx3xz"><th id="hx3xz"></th></form></form><form id="hx3xz"></form>