Tomcat5 和 Tomcat6 類載入器架構

2021-08-14 08:32:59 字數 2764 閱讀 9568

tomcat5

和tomcat6

類載入器架構

1. tomcat 5 classloader

架構:

bootstrap 

| system 

| common 

/        \

catalina   shared 

/      \ 在

tomcat5/server/lib/catalina.jar

中,檢視

org/apache/catalina/startup/catalina.properties

檔案,從中可以看到上圖中的3個

classloader

的載入項定義:

common.loader=$/common/classes,$/common/i18n/*.jar,$/common/endorsed/*.jar,$/common/lib/*.jar

server.loader=$/server/classes,$/server/lib/*.jar

shared.loader=$/shared/classes,$/shared/lib/*.jar

同時,tomcat

的安裝目錄下也存在上述

server

和shared

資料夾,用於存放相關的

jar。 在

中的class

載入時的搜尋順序如下:

bootstrap--->system--->/web-inf/classes---> /web-inf/lib/*.jar---> common---->shared

2. tomcat 6  classloader

架構:

bootstrap 

| system 

| common 

/           \

tomcat 6

中所有的

jar

都存放在

%tomcat_home%/lib

目錄下。這點從

catalina.jar

中,檢視

org/apache/catalina/startup /catalina.properties

檔案中也可以看出,在

tomcat 6

的catalina.properties

檔案中,

「server.loader」

和「shared.loader」

已經為空了。具體**如下:

common.loader=$/lib,$/lib/*.jar

server.loader=

shared.loader=

同時在實際初始化類載入器時,原始碼(

org.apache.catalina.startup.bootstrap.createclassloader

)中有如下**:

//此行取出

catalina.properties

中定義的

「server.loader」

和「shared.loader」的值

string value = catalinaproperties.getproperty(name + ".loader");

//如果值為空,則返回

parent

,此時,

parent

即commonloader

,載入項對應

common.loader的值

if ((value == null)|| (value.equals("")))

return parent;

由此可見,

tomcat 6

中,原來的

"server"

和"shared"2

個類載入器沒有任何作用,都劃撥到

common

類載入器去處理了

tomcat 6

的安裝目錄中也可以看到,沒有了

server"

和"shared"2

個資料夾。 中的

class

載入時的搜尋順序改變成如下:

bootstrap--->system--->/web-inf/classes---> /web-inf/lib/*.jar---> common

同時,在原始碼中還有另2

thread.currentthread().setcontextclassloader(catalinaloader);

securityclassload.securityclassload(catalinaloader);

contextclassloader為執行緒上下文載入器,正常的雙親委派模型中,下層的類載入器可以使用上層父載入器載入的物件,但是上層父類的載入器不可以使用子類載入的物件。而有些時候程式的確需要上層呼叫下層,這時候就需要執行緒上下文載入器來處理。

securityclassload原始碼很清楚的指出,當啟動了

securitymanager

時,為避免觸發

accesscontrolexception

,預先載入一些類。在

catalina.bat

中存在如下定義:

security_policy_file=%catalina_base%/conf/catalina.policy

Tomcat6和Tomcat7配置SSL通訊的比較

在專案開發過程中,嚐嚐會遇到tomcat需要ssl通訊的需求。尤其是在需要安全web應用時,需要https協議的通訊。由於tomcat預設情況下沒有提供ssl通訊設定,因此必須明白如何在tomcat下配置ssl。更糟糕的是,tomcat的不同版本,其ssl配置有所不同。所以,本文將講述如何在tomc...

tomcat6使用備忘

剛剛解壓版的tomcat6.0.18,啟動setup.bat後,通過瀏覽器訪問 問題原因 d tomcat6.0 conf 目錄下的 tomcat users.xml 檔案內容如下 問題修改 將tomcat users.xml 檔案內容改為 重新啟動tomcat 在登入時使用 使用者名稱admin ...

tomcat6目錄結構

首先來了解一下 tomcat5.5 的目錄結構 bin 存放windows 或linux 平台上啟動和關閉 tomcat 的指令碼檔案 conf 存放tomcat 伺服器的各種全域性配置檔案,其中包括 server.xml tomcat 的主要配置檔案 tomcat users.xml 和web.x...