
文章插圖
一: 生命周期Tomcat 為了方便管理組件和容器的生命周期,定義了從創(chuàng)建、啟動、到停止、銷毀共 12 中狀態(tài),tomcat 生命周期管理了內(nèi)部狀態(tài)變化的規(guī)則控制,組件和容器只需實現(xiàn)相應(yīng)的生命周期 方法即可完成各生命周期內(nèi)的操作(initInternal、startInternal、stopInternal、 destroyInternal) 。
Tomcat 的生命周期管理引入了事件機制,在組件或容器的生命周期狀態(tài)發(fā)生變化時會通 知事件監(jiān)聽器,監(jiān)聽器通過判斷事件的類型來進(jìn)行相應(yīng)的操作 。事件監(jiān)聽器的添加可以在 server.xml 文件中進(jìn)行配置 。
Tomcat 各類容器的配置過程就是通過添加 listener 的方式來進(jìn)行的,從而達(dá)到配置邏輯與 容器的解耦 。
EngineConfig:主要打印start和stop事件的debug日志HostConfig:主要處理部署應(yīng)用,解析應(yīng)用 META-INF/context.xml 并創(chuàng)建應(yīng)用的 ContextContextConfig:主要解析并合并 web.xml,掃描應(yīng)用的各類 web 資源 (filter、servlet、listener)請求的處理流程容器的責(zé)任鏈模式:
請求被Connector組件接收,創(chuàng)建Request和Response對象 。Connector將Request和Response交給Container,先通過Engine的pipeline組件流經(jīng)內(nèi)部的每個Valve 。請求流轉(zhuǎn)到Host的pipeline組件中,并且經(jīng)過內(nèi)部Valve的過濾 。請求流轉(zhuǎn)到Context的pipeline組件中,并且經(jīng)過內(nèi)部的Valve的過濾 。請求流轉(zhuǎn)到Wrapper的pipeline組件中,并且經(jīng)過內(nèi)部的Valve的過濾 。Wrapper內(nèi)部的WrapperValve創(chuàng)建FilterChain實例,調(diào)用指定的Servlet實例處理請求 。返回結(jié)果2: 類加載機制 雙親委派模型:
Bootstrap ClassLoader :啟動類加載器,負(fù)責(zé)加載 Java 的核心類,它不是 java.lang.ClassLoader 的子類,而是由 JVM自身實現(xiàn),null c,c++實現(xiàn)的,加載jre/libExtension ClassLoader :擴展類加載器,擴展類加載器的加載路徑是 JDK 目錄下 jre/lib/ext。擴展加載器的 #getParent() 方法返回 null,實際上擴展類加載器的父類加載器是啟動類加載器 。System ClassLoader :系統(tǒng)(應(yīng)用)類加載器,它負(fù)責(zé)在 JVM 啟動時加載來自 Java 命令的 -classpath 選項、java.class.path 系統(tǒng)屬性或 CLASSPATH 環(huán)境變量所指定的 jar 包和類路徑 。程序可以通過 #getSystemClassLoader() 來獲取系統(tǒng)類加載器 。系統(tǒng)加載器的加載路徑是程序運行的當(dāng)前路徑 。ClassLoader#loadClass(java.lang.String, boolean)
jvm如何確定一個class唯一性: 全類名(包名+類名)+ classLoader的id
類的加載過程:
類加載器:
Tomcat 擁有不同的自定義類加載器,以實現(xiàn)對各種資源庫的控制 。Tomcat 主要用類加載器解決以下 4 個問題:
同一個 Web 服務(wù)器里,各個 Web 項目之間各自使用的 Java 類庫要互相隔離 。同一個 Web 服務(wù)器里,各個 Web 項目之間可以提供共享的 Java 類庫。為了使服務(wù)器不受 Web 項目的影響,應(yīng)該使服務(wù)器的類庫與應(yīng)用程序的類庫互相獨立 。對于支持 JSP 的 Web 服務(wù)器,應(yīng)該支持熱插拔(HotSwap)功能。Tomcat提供了四組目錄供用戶存放第三方類庫:
放置在/common目錄中:類庫可被Tomcat和所有的 Web應(yīng)用程序共同使用 。放置在/server目錄中:類庫可被Tomcat使用,對所有的Web應(yīng)用程序都不可見 。放置在/shared目錄中:類庫可被所有的Web應(yīng)用程序共同使用,但對 Tomcat自己不可見 。放置在/WebApp/WEB-INF目錄中:類庫僅僅可以被此Web應(yīng)用程序使用,對 Tomcat和其他Web應(yīng)用程序都不可見 。Tomcat自定義了多個類加載器,CommonClassLoader、CatalinaClassLoader、SharedClassLoader和WebappClassLoader則是Tomcat自己定義的類加載器,它們分別加載/common/、/server/、/shared/和/WebApp/WEB-INF/中的Java類庫 。其中WebApp類加載器和Jsp類加載器通常會存在多個實例,每一個Web應(yīng)用程序?qū)?yīng)一個WebApp類加載器,每一個JSP文件對應(yīng)一個Jsp類加載器 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 服務(wù)器內(nèi)存清理命令 Linux內(nèi)存緩存清理命令。
- 10首有關(guān)兒童的古詩詞鑒賞 兒童詩
- 拔牙后的棉花吃進(jìn)去有沒有關(guān)系
- 有關(guān)數(shù)字貨幣知識解讀 數(shù)字貨幣的開源代碼是什么意思
- 怎樣確定戀愛關(guān)系?與這些現(xiàn)象有關(guān)
- 檢測故障方式和解決方案 lol無法鏈接服務(wù)器是什么意思
- 抖音極速版金幣溜走了怎么辦
- 9個令人津津樂道的恐龍小故事 有關(guān)恐龍的小故事
- 脫發(fā)和脾胃有關(guān)嗎
- 華為歐拉服務(wù)器操作系統(tǒng) 華為正式捐贈歐拉操作系統(tǒng)
