更新時(shí)間:2021-09-23 09:59:53 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1003次
當(dāng)您在服務(wù)器上部署 Web 應(yīng)用程序并從瀏覽器訪問時(shí),我們已經(jīng)了解了 Web 服務(wù)器的一般工作方式。現(xiàn)在讓我們學(xué)習(xí)服務(wù)器內(nèi)部的東西,這些東西在日常工作中可能不會(huì)用到,但是當(dāng)您第一次配置應(yīng)用程序時(shí),它們肯定會(huì)對您有所幫助。我很長時(shí)間以來一直在使用tomcat 服務(wù)器,所以我選擇它作為教程。將來只要時(shí)間允許,我將嘗試在其他服務(wù)器上分享我的學(xué)習(xí)。
Apache Tomcat是由 Apache 軟件基金會(huì) (ASF) 開發(fā)的開源 Web 服務(wù)器和 servlet 容器。Tomcat 實(shí)現(xiàn)了多種 Java EE 規(guī)范,包括 Java Servlet、JavaServer Pages (JSP)、Java EL 和 WebSocket,并為 Java 代碼運(yùn)行提供了“純 Java”HTTP Web 服務(wù)器環(huán)境。 [ Wiki ]
Tomcat 的架構(gòu)由一系列功能組件組成,這些功能組件可以按照明確定義的規(guī)則進(jìn)行組合。
每個(gè)服務(wù)器安裝的結(jié)構(gòu)(通過這些功能組件)在文件中定義,該文件server.xml位于Tomcat 安裝文件夾的/conf子目錄中。讓我們詳細(xì)討論這些組件。
默認(rèn)情況下,server.xml文件帶有此配置,我們將詳細(xì)研究它的元素。
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
下面從里到外討論tomcat配置文件的功能組件,更好的把東西聯(lián)系起來。
上下文是一組稱為容器的 Tomcat 組件的最內(nèi)層元素,它代表單個(gè) Web 應(yīng)用程序。Tomcat 會(huì)在加載應(yīng)用程序時(shí)自動(dòng)實(shí)例化和配置標(biāo)準(zhǔn)上下文。作為配置的一部分,Tomcat 還會(huì)處理在\WEB-INF\web.xml您的應(yīng)用程序文件夾的文件中定義的屬性,并使它們對應(yīng)用程序可用。
連接器處理與客戶端的通信。Tomcat 有多個(gè)可用的連接器,例如用于大多數(shù) HTTP 流量的 HTTP 連接器和實(shí)現(xiàn) AJP 協(xié)議的 AJP 連接器,這些連接器實(shí)現(xiàn)了在將 Tomcat 連接到另一個(gè) Web 服務(wù)器(例如 Apache HTTPD 服務(wù)器)時(shí)使用的 AJP 協(xié)議。
Tomcat 的默認(rèn)配置包括一個(gè)連接器來處理 HTTP 通信。默認(rèn)情況下,此連接器等待來自端口8080 的請求。這就是為什么我們示例的 URL 總是以http://localhost:8080/. 請注意,所有應(yīng)用程序的請求都通過此連接器的單個(gè)實(shí)例。每個(gè)新請求都會(huì)導(dǎo)致一個(gè)新線程的實(shí)例化,該線程在請求??持續(xù)時(shí)間內(nèi)在連接器中保持活動(dòng)狀態(tài)。Internet 上有關(guān) Tomcat 的文章通常將此連接器稱為“ Coyote”。
的connectionTimeout屬性集至20,000表示會(huì)話為5小時(shí),33分鐘,和不活動(dòng)的20秒后終止,而redirectPort =” 8443“意味著,需要安全套接字層(SSL)輸送到來的請求被重定向到端口8443。
AJP 連接器讓 Tomcat 只處理動(dòng)態(tài)網(wǎng)頁,而讓純 HTML 服務(wù)器(例如,Apache Web 服務(wù)器)處理對靜態(tài)頁面的請求。這最大限度地提高了處理請求的效率。您可以注釋掉這個(gè)連接器,因?yàn)榻裉?tomcat 本身非常快,或者只是如果您不打算將 Web 服務(wù)器與 Tomcat 一起使用。
主機(jī)是網(wǎng)絡(luò)名稱(例如 www.yourdomain.com)與 Tomcat 服務(wù)器的關(guān)聯(lián)。主機(jī)可以包含任意數(shù)量的上下文(即應(yīng)用程序)。您可以在同一臺(tái)服務(wù)器上定義多個(gè)主機(jī)。例如,如果您已注冊域yourdomain.com,則可以定義主機(jī)名,例如w1.yourdomain.com和w2.yourdomain.com。請記住,只有當(dāng)域名服務(wù)器將其名稱映射到您計(jì)算機(jī)的 IP 地址時(shí),才能從 Internet 訪問它。
Tomcat 的默認(rèn)配置包括名為localhost 的主機(jī)。本地主機(jī)和您的計(jì)算機(jī)之間的關(guān)聯(lián)是通過在文件中寫入一個(gè)條目來完成的C:\Windows\System32\drivers\etc\hosts。
Host 屬性“ appBase ”定義了 Tomcat 安裝文件夾中的應(yīng)用程序目錄。然后,每個(gè)應(yīng)用程序由其在該目錄中的路徑標(biāo)識(shí)。唯一的例外是路徑 ROOT,它映射到空字符串。localhost 的應(yīng)用程序基目錄是 webapps。這意味著目錄“ C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\”中的應(yīng)用程序由空字符串標(biāo)識(shí)。因此,它的 URL 是“ http://localhost:8080/”。對于駐留在除 ROOT 之外的目錄中的其他應(yīng)用程序,如“ C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\myapp\”,URL 類似于“ http://localhost:8080/myapp/”。
屬性u(píng)npackWARs="true"表示如果在appBase目錄中放置一個(gè) WAR 文件,Tomcat 會(huì)自動(dòng)將其展開到一個(gè)普通文件夾中。如果將此屬性設(shè)置為 false,應(yīng)用程序?qū)⒅苯訌?WAR 文件運(yùn)行。這顯然意味著應(yīng)用程序的執(zhí)行速度較慢,因?yàn)?Tomcat 需要在執(zhí)行時(shí)解壓縮 WAR 文件。
屬性autoDeploy="true"意味著如果您appBase在 Tomcat 運(yùn)行時(shí)將應(yīng)用程序放到目錄中,它將自動(dòng)部署。
引擎代表特定服務(wù)的請求處理管道。由于 Service 可能有多個(gè)連接器,引擎接收并處理來自這些連接器的所有請求,將響應(yīng)傳遞回適當(dāng)?shù)倪B接器以傳輸給客戶端。
一個(gè)引擎必須包含一臺(tái)或多臺(tái)主機(jī),其中一臺(tái)被指定為默認(rèn)主機(jī)。默認(rèn)的 Tomcat 配置包括引擎 Catalina,它包含主機(jī) localhost(顯然指定為默認(rèn)主機(jī),因?yàn)樗俏ㄒ坏?。Catalina 引擎處理通過 HTTP 連接器接收到的所有傳入請求并發(fā)回相應(yīng)的響應(yīng)。它根據(jù)請求頭中包含的信息將每個(gè)請求轉(zhuǎn)發(fā)到正確的主機(jī)和上下文。
服務(wù)是位于服務(wù)器內(nèi)部的中間組件,并將一個(gè)或多個(gè)連接器綁定到一個(gè)引擎。Tomcat 的默認(rèn)配置包括服務(wù) Catalina,它將 HTTP 和 AJP 連接器與 Catalina 引擎相關(guān)聯(lián)。因此,連接器和引擎是服務(wù)元素的子元素。
Service 元素很少由用戶自定義,因?yàn)槟J(rèn)實(shí)現(xiàn)簡單且足夠。
Server 是頂層組件,代表 Tomcat 的一個(gè)實(shí)例。它可以包含一個(gè)或多個(gè)服務(wù),每個(gè)服務(wù)都有自己的引擎和連接器。
現(xiàn)在讓我們討論上面使用的一些其他概念server.xml。
偵聽器是一個(gè) Java 對象,它通過實(shí)現(xiàn)org.apache.catalina.LifecycleListener接口能夠響應(yīng)特定事件。
AprLifecycleListener:啟用 Apache Portable Runtime (APR) 庫。該庫為 tomcat 提供操作系統(tǒng)級(jí)別的支持。
JasperListener:啟用 Jasper,它是 JSP 引擎。該偵聽器使重新編譯已更新的 JSP 文檔成為可能。
JreMemoryLeakPreventionListener:處理可能導(dǎo)致內(nèi)存泄漏的不同已知情況。
GlobalResourcesLifecycleListener:負(fù)責(zé)實(shí)例化與全局 Java 命名和目錄接口 (JNDI) 關(guān)聯(lián)的托管 bean。
ThreadLocalLeakPreventionListener:還處理可能導(dǎo)致內(nèi)存泄漏的不同已知情況。
該GlobalNamingResources元素只能在服務(wù)器組件內(nèi)定義。它定義了可在整個(gè)服務(wù)器中訪問的 JNDI 資源。默認(rèn)情況下定義的唯一資源server.xml是通過文件定義的用戶和密碼基于內(nèi)存的數(shù)據(jù)庫conf/tomcat-users.xml。
Realm 組件可以出現(xiàn)在任何容器組件(Engine、Host 和 Context)中。它代表用戶、密碼和用戶角色的數(shù)據(jù)庫。其目的是支持基于容器的身份驗(yàn)證。
此外UserDatabaseRealm,以下領(lǐng)域類可用:(JDBCRealm通過其 JDBC 驅(qū)動(dòng)程序連接到關(guān)系數(shù)據(jù)庫),DataSourceRealm(連接到通過 JNDI 命名的 JDBC 數(shù)據(jù)源),JNDIRealm(連接到輕量級(jí)目錄訪問協(xié)議目錄),和MemoryRealm(到在內(nèi)存中加載一個(gè) XML 文件)。
Valve 是一個(gè)類似于元素的攔截器,當(dāng)插入到容器(上下文、主機(jī)或引擎)中時(shí),它會(huì)在所有傳入的 HTTP 請求到達(dá)應(yīng)用程序之前攔截它們。這使您能夠預(yù)處理針對特定應(yīng)用程序的請求;虛擬主機(jī)中運(yùn)行的應(yīng)用程序或引擎中運(yùn)行的所有應(yīng)用程序。
閥門可以有多種用途,例如
該RemoteAddrValve閥可以讓你選擇性地允許或他們的源IP地址的基礎(chǔ)上塊的請求。它支持兩個(gè)屬性——允許和阻止。
<Valve className="org.apache.catalina.valves.RemoteAddrValve" block="192\.168.*"/>
該RemoteHostValve閥的運(yùn)作就像遠(yuǎn)程地址過濾,但對客戶端的主機(jī)名,而不是客戶端的IP地址。
<Valve className="org.apache.catalina.valves.RemoteHostValve" deny=".*badweb\.com"/>
RequestDumperValve傳入請求的日志詳細(xì)信息,因此可用于調(diào)試目的。
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
single sign on valve,包括在主機(jī)容器中時(shí),有需要一種身份驗(yàn)證該主機(jī)的所有應(yīng)用程序的影響。如果沒有這個(gè)閥,用戶在使用每個(gè)單獨(dú)的應(yīng)用程序之前必須輸入他的 ID 和密碼。
<Valve className="org.apache.catalina.valves.SingleSignOn"/>
以上就是關(guān)于“Tomcat視頻教程:Tomcat的架構(gòu)和server.xml配置”的介紹,大家如果想了解更多相關(guān)知識(shí),不妨關(guān)注動(dòng)力節(jié)點(diǎn)的Tomcat視頻教程,里面的內(nèi)容更詳細(xì),可以免費(fèi)下載學(xué)習(xí),希望對大家能夠有所幫助。
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743