1. 程式人生 > >Servlet容器啟動過程(以Tomcat中啟動Servlet容器為例)

Servlet容器啟動過程(以Tomcat中啟動Servlet容器為例)

一、Tomcat的總體結構中的Service模組及Container容器(引入)

tomcat啟動server伺服器(包含多個服務模組)對外提供Service服務,Service模組由Container元件連線多個Connector構成。
這裡寫圖片描述
Service模組中Container的核心為Servlet容器,其中Context物件對Servlet的包裝類Wrapper實施管理,一個Web應用對應一個Context物件。
這裡寫圖片描述

二、Servlet容器的啟動過程

  • 1.一個Web應用對應一個Context容器由Tomcat例項新增到Tomcat伺服器中

    在Servlet API中有一個ServletContextListener介面,它能監聽ServletContext物件的生命週期

    ,實際上就是監聽Web應用的生命週期。當Web應用啟動或終止時,會觸發ServletContextEvent事件,該事件由ServletContextListener來處理。在ServletContextListener介面中定義了處理ServletContextEvent事件的兩個方法。

contextInitialized(ServletContextEvent e);
contextDestroyed(ServletContextEvent e);

Servlet容器啟動時,ServletContextlistener監聽到ServletContext的狀態(初始化和銷燬)通過contextInitialized方法,根據web.xml對ServletContext進行配置,即將Context容器的屬性快取到記憶體中,供Service服務利用;contextConfig在Tomcat建立Context容器時被加入到ServletContext中,負責整個Web應用的配置檔案(包括web.xml)的解析工作。

  • 2.Web應用的初始化
    Web的初始化是在contextConfig中實現的,其中 web.xml檔案描述了Web應用的關鍵資訊,是整個Web應用的入口。Tomcat將web.xml檔案解析後,將其中的屬性設定到context容器中,包括載入Servlet,Filter和Listener等,將其中的Servlet包裝成Context中的包裝類Wrapper。

  • 3.建立Servlet例項
    如果Servlet中web.xml中load-on-startup的配置大於0,那麼中Context容器啟動時就會被例項化。

  • 4.Servlet初始化
    呼叫Servlet的init方法,並把包裝類standarWrapper物件的standarWrapperFacade作為ServletConfig傳給Servlet。ServletConfig從一個Servlet被例項化後,對任何客戶端的中任何時候訪問都有效,但僅對本Servlet有效,一個Servlet的ServletConfig物件不能被另一個Servlet訪問。

  • 5.Servlet的執行機制
    與Servlet關聯的有四個物件ServletContext,ServletConfig,ServletRequest,ServletResponse。Servlet的執行模式是典型的”握手型互動式”,ServletContext提供互動場景模式,而互動場景的初始化有ServletConfig來描述。ServletRequest和ServletResponse是互動的具體物件。
    這裡寫圖片描述

相關推薦

Servlet容器啟動過程Tomcat啟動Servlet容器

一、Tomcat的總體結構中的Service模組及Container容器(引入) tomcat啟動server伺服器(包含多個服務模組)對外提供Service服務,Service模組由Container元件連線多個Connector構成。 Service

使用jdbc向資料庫注入大量資料10W條資料批量插入

例項:10w條資料的插入(批量插入) import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class HomeWork02 { //預

Linux(Centos)下調整分區大小home和根分區

vertical speech col 信息 卸載 記錄 jsb 大小 control 在安裝新系統的時候,有時候沒法預估或者說錯誤的劃分了分區大小,常常會導致我們後面的操作出現極大地不方便,比如某個分區分的太小了,導致 軟件安裝的時候會報安裝空間不夠,這就很麻煩。在

u-boot原始碼目錄分析jz2440 u-boot1.1.6

一、檔案的分析 arm_config.mk。字尾是.mk,是一個Makefile檔案,將來在某個Makefile中會去呼叫它。 Changelog檔案,修改記錄檔案,該檔案記錄了這個uboot專案的版本變遷以及每個版本較上個版本修改的記錄。 config.mk。和arm_

基於GDAL庫,讀取.nc文件海洋表溫數據

調試 cfi 主函數 != mes stdstring 微軟 detail back   對於做海洋數據處理的同學,會經常遇到nc格式的文件,nc文件的格式全稱是NetCDF,具體的詳細解釋請查詢官網【https://www.unidata.ucar.edu/softwar

【資料庫】關於日期的處理greenplum和postgresql和hive

那個啥,本人菜鳥一隻,如果有什麼說錯的地方還請大家批評指出!! 好,開始說正事,日期處理和判斷是十分常見的,本文就自己使用的資料庫,和hive資料倉庫來說說,我使用到的一些日期的處理和判斷,當然技術能力有限,我也很菜,所以如果有說錯或者遺漏的還請大家多多包涵,望能批評指出,也讓我的水平提高提高!

json 資料持久化賬號和使用者名稱的儲存

以賬號和使用者名稱的儲存為例 一、建立公共類使用者,定義使用者類的欄位:如賬號、密碼等 二、建立公共類列表,在列表類內定義一個使用者類型別的列表,定義列表需要匯入名稱空間System.Collections.Generic 三、儲存使用者 1.建立一個註冊方法 2. 判斷輸入框是否為

名人問題 演算法解析與Python 實現 O(n) 複雜度 Leetcode 277. Find the Celebrity

1. 題目描述 Problem Description Leetcode 277. Find the Celebrity Suppose you are at a party with n people (labeled from 0 to n -

矩陣快速冪斐波那契數列

小 M 玩數列 【問題描述】 小 W 發現了一個神奇的數列: () = ( − 1) + ( − 2) { ≥ 3, (1) = 1, (2) = 1} ,這就是著名的 Fibonacci Se

Matlab繪製三維曲面二維高斯函式

  寒假學習了一下Python下的NumPy和pymatlab,感覺不是很容易上手。來學校之後,決定繼續看完數字影象處理一書。還是想按照上學期的模式,邊看邊實現書中的演算法。上學期看的時候,是用C語言實現的,發現寫程式太耗時間了,所以決定還是學習下Matlab吧(寒假莫有學會Python中的那些庫應用。。。)

DDR3詳解Micron MT41J128M8 1Gb DDR3 SDRAM

首先,我們先了解一下記憶體的大體結構工作流程,這樣會比較容量理解這些引數在其中所起到的作用。這部分的講述運用DDR3的簡化時序圖。  DDR3的內部是一個儲存陣列,將資料“填”進去,你可以它想象成一張表格。和表格的檢索原理一樣,先指定一個行(Row),再指定一個列(Co

spark最新原始碼下載並匯入到開發環境下助推高質量程式碼(Scala IDEA for Eclipse和IntelliJ IDEA皆適用spark2.2.0原始碼包圖文詳解

  不多說,直接上乾貨! 前言     其實啊,無論你是初學者還是具備了有一定spark程式設計經驗,都需要對spark原始碼足夠重視起來。   本人,肺腑之己見,想要成為大資料的大牛和頂尖專家,多結合原始碼和操練程式設計。   好一段時間之前,寫過這篇部落格

python 其他.py 與tkinter介面傳值的方法遍歷資料夾進度

本小白沒深入瞭解過python的原理,多個檔案只知道在一個.py檔案裡import另一個.py檔案但是問題來了 ,帶著介面的被import後會又多出來一個視窗! 就算是呼叫一下函式都會再彈出一個介面!於是,經過不斷嘗試我分享一下我的方法……(本小白還沒用到類)本人做了一個小工

YOLOv3 實練VOC2007、2012資料集

訓練裝置:Lenovo 拯救者; GPU:1070ti; 視訊記憶體:8GB; 第一次訓練:採用預設引數,以預訓練好的darknet53.conv.74.1為預載入權重開始訓練;視訊記憶體,卒;報錯:out of memory; 第二次訓練:更改引數

FCN語義分割訓練資料siftflow和voc2012資料集

截至目前,現已經跑通了siftflow-fcn32s,voc-fcn32s,並製作好了自己的資料集,現在就等大批資料的到來,進而針對資料進行引數fine-tuning,現對我訓練的訓練流程和訓練過程中遇到的問題,做出總結和記錄,從而對以後的學習作鋪墊。 通過這篇分析語義分割

phpmailer實現簡單的郵件傳送網易郵箱smtp伺服器

1、描述 第一次做到用php做到傳送郵件的功能。 Google了一下,php內建函式裡面有一個mail()函式。但是使用mail的話,會涉及到很多問題,我也沒有仔細研究過,反正都是和smtp協議息息相關。 於是,就去GitHub上開源的檔案傳送封裝好的專案

VS 2013 統一修改所有工程的目錄配置 boost、opencv3 的安裝

在 vs2013安裝配置C++boost庫 一文中我們介紹了,如何在vs2013環境裡配置安裝boost庫。在配置vs2013時,我們只是介紹瞭如何對當前專案或者某一專案進行boost相關庫等檔案目錄的設定,也即如果再新建一個工程,我們需重新配置工程中的bo

Hadoop的配置過程虛擬機的偽分布模式

關鍵字 系統默認 ati out source 網絡設置 道理 發包 啟動 1引言 hadoop如今已經成為大數據處理中不可缺少的關鍵技術,在如今大數據爆炸的時代,hadoop給我們處理海量數據提供了強有力的技術支撐。因此,了解hadoop的原理與應用方法是必要的技術知識。

keras實現多個模型融合非keras自帶模型,這裡3個自己的模型

該程式碼可以實現類似圖片的效果,多個模型採用第一個輸入。 圖片來源:https://github.com/keras-team/keras/issues/4205   step 1:重新定義模型(這是我自己的模型,你們可以用你們自己的),與預訓練不一樣,這裡定義模型inp

設計模式-builder模式微信訊息的路由講解

今天要講一個簡單的模式–builder模式。 你可能會覺得,builder模式有什麼好講的?本來我也這樣覺得,但當我有幸拜讀某位大神通過builder模式寫了一個開發工具包的初始化操作,嗯程式碼的樣子很叼 這位大神是誰呢? 就是這位仁兄啦,是碼雲上一個很火的微