更新時間:2021-09-23 09:59:53 來源:動力節點 瀏覽952次
當您在服務器上部署 Web 應用程序并從瀏覽器訪問時,我們已經了解了 Web 服務器的一般工作方式。現在讓我們學習服務器內部的東西,這些東西在日常工作中可能不會用到,但是當您第一次配置應用程序時,它們肯定會對您有所幫助。我很長時間以來一直在使用tomcat 服務器,所以我選擇它作為教程。將來只要時間允許,我將嘗試在其他服務器上分享我的學習。
Apache Tomcat是由 Apache 軟件基金會 (ASF) 開發的開源 Web 服務器和 servlet 容器。Tomcat 實現了多種 Java EE 規范,包括 Java Servlet、JavaServer Pages (JSP)、Java EL 和 WebSocket,并為 Java 代碼運行提供了“純 Java”HTTP Web 服務器環境。 [ Wiki ]
Tomcat 的架構由一系列功能組件組成,這些功能組件可以按照明確定義的規則進行組合。
每個服務器安裝的結構(通過這些功能組件)在文件中定義,該文件server.xml位于Tomcat 安裝文件夾的/conf子目錄中。讓我們詳細討論這些組件。
默認情況下,server.xml文件帶有此配置,我們將詳細研究它的元素。
<?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配置文件的功能組件,更好的把東西聯系起來。
上下文是一組稱為容器的 Tomcat 組件的最內層元素,它代表單個 Web 應用程序。Tomcat 會在加載應用程序時自動實例化和配置標準上下文。作為配置的一部分,Tomcat 還會處理在\WEB-INF\web.xml您的應用程序文件夾的文件中定義的屬性,并使它們對應用程序可用。
連接器處理與客戶端的通信。Tomcat 有多個可用的連接器,例如用于大多數 HTTP 流量的 HTTP 連接器和實現 AJP 協議的 AJP 連接器,這些連接器實現了在將 Tomcat 連接到另一個 Web 服務器(例如 Apache HTTPD 服務器)時使用的 AJP 協議。
Tomcat 的默認配置包括一個連接器來處理 HTTP 通信。默認情況下,此連接器等待來自端口8080 的請求。這就是為什么我們示例的 URL 總是以http://localhost:8080/. 請注意,所有應用程序的請求都通過此連接器的單個實例。每個新請求都會導致一個新線程的實例化,該線程在請求??持續時間內在連接器中保持活動狀態。Internet 上有關 Tomcat 的文章通常將此連接器稱為“ Coyote”。
的connectionTimeout屬性集至20,000表示會話為5小時,33分鐘,和不活動的20秒后終止,而redirectPort =” 8443“意味著,需要安全套接字層(SSL)輸送到來的請求被重定向到端口8443。
AJP 連接器讓 Tomcat 只處理動態網頁,而讓純 HTML 服務器(例如,Apache Web 服務器)處理對靜態頁面的請求。這最大限度地提高了處理請求的效率。您可以注釋掉這個連接器,因為今天 tomcat 本身非常快,或者只是如果您不打算將 Web 服務器與 Tomcat 一起使用。
主機是網絡名稱(例如 www.yourdomain.com)與 Tomcat 服務器的關聯。主機可以包含任意數量的上下文(即應用程序)。您可以在同一臺服務器上定義多個主機。例如,如果您已注冊域yourdomain.com,則可以定義主機名,例如w1.yourdomain.com和w2.yourdomain.com。請記住,只有當域名服務器將其名稱映射到您計算機的 IP 地址時,才能從 Internet 訪問它。
Tomcat 的默認配置包括名為localhost 的主機。本地主機和您的計算機之間的關聯是通過在文件中寫入一個條目來完成的C:\Windows\System32\drivers\etc\hosts。
Host 屬性“ appBase ”定義了 Tomcat 安裝文件夾中的應用程序目錄。然后,每個應用程序由其在該目錄中的路徑標識。唯一的例外是路徑 ROOT,它映射到空字符串。localhost 的應用程序基目錄是 webapps。這意味著目錄“ C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\”中的應用程序由空字符串標識。因此,它的 URL 是“ http://localhost:8080/”。對于駐留在除 ROOT 之外的目錄中的其他應用程序,如“ C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\myapp\”,URL 類似于“ http://localhost:8080/myapp/”。
屬性unpackWARs="true"表示如果在appBase目錄中放置一個 WAR 文件,Tomcat 會自動將其展開到一個普通文件夾中。如果將此屬性設置為 false,應用程序將直接從 WAR 文件運行。這顯然意味著應用程序的執行速度較慢,因為 Tomcat 需要在執行時解壓縮 WAR 文件。
屬性autoDeploy="true"意味著如果您appBase在 Tomcat 運行時將應用程序放到目錄中,它將自動部署。
引擎代表特定服務的請求處理管道。由于 Service 可能有多個連接器,引擎接收并處理來自這些連接器的所有請求,將響應傳遞回適當的連接器以傳輸給客戶端。
一個引擎必須包含一臺或多臺主機,其中一臺被指定為默認主機。默認的 Tomcat 配置包括引擎 Catalina,它包含主機 localhost(顯然指定為默認主機,因為它是唯一的)。Catalina 引擎處理通過 HTTP 連接器接收到的所有傳入請求并發回相應的響應。它根據請求頭中包含的信息將每個請求轉發到正確的主機和上下文。
服務是位于服務器內部的中間組件,并將一個或多個連接器綁定到一個引擎。Tomcat 的默認配置包括服務 Catalina,它將 HTTP 和 AJP 連接器與 Catalina 引擎相關聯。因此,連接器和引擎是服務元素的子元素。
Service 元素很少由用戶自定義,因為默認實現簡單且足夠。
Server 是頂層組件,代表 Tomcat 的一個實例。它可以包含一個或多個服務,每個服務都有自己的引擎和連接器。
現在讓我們討論上面使用的一些其他概念server.xml。
偵聽器是一個 Java 對象,它通過實現org.apache.catalina.LifecycleListener接口能夠響應特定事件。
AprLifecycleListener:啟用 Apache Portable Runtime (APR) 庫。該庫為 tomcat 提供操作系統級別的支持。
JasperListener:啟用 Jasper,它是 JSP 引擎。該偵聽器使重新編譯已更新的 JSP 文檔成為可能。
JreMemoryLeakPreventionListener:處理可能導致內存泄漏的不同已知情況。
GlobalResourcesLifecycleListener:負責實例化與全局 Java 命名和目錄接口 (JNDI) 關聯的托管 bean。
ThreadLocalLeakPreventionListener:還處理可能導致內存泄漏的不同已知情況。
該GlobalNamingResources元素只能在服務器組件內定義。它定義了可在整個服務器中訪問的 JNDI 資源。默認情況下定義的唯一資源server.xml是通過文件定義的用戶和密碼基于內存的數據庫conf/tomcat-users.xml。
Realm 組件可以出現在任何容器組件(Engine、Host 和 Context)中。它代表用戶、密碼和用戶角色的數據庫。其目的是支持基于容器的身份驗證。
此外UserDatabaseRealm,以下領域類可用:(JDBCRealm通過其 JDBC 驅動程序連接到關系數據庫),DataSourceRealm(連接到通過 JNDI 命名的 JDBC 數據源),JNDIRealm(連接到輕量級目錄訪問協議目錄),和MemoryRealm(到在內存中加載一個 XML 文件)。
Valve 是一個類似于元素的攔截器,當插入到容器(上下文、主機或引擎)中時,它會在所有傳入的 HTTP 請求到達應用程序之前攔截它們。這使您能夠預處理針對特定應用程序的請求;虛擬主機中運行的應用程序或引擎中運行的所有應用程序。
閥門可以有多種用途,例如
該RemoteAddrValve閥可以讓你選擇性地允許或他們的源IP地址的基礎上塊的請求。它支持兩個屬性——允許和阻止。
<Valve className="org.apache.catalina.valves.RemoteAddrValve" block="192\.168.*"/>
該RemoteHostValve閥的運作就像遠程地址過濾,但對客戶端的主機名,而不是客戶端的IP地址。
<Valve className="org.apache.catalina.valves.RemoteHostValve" deny=".*badweb\.com"/>
RequestDumperValve傳入請求的日志詳細信息,因此可用于調試目的。
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
single sign on valve,包括在主機容器中時,有需要一種身份驗證該主機的所有應用程序的影響。如果沒有這個閥,用戶在使用每個單獨的應用程序之前必須輸入他的 ID 和密碼。
<Valve className="org.apache.catalina.valves.SingleSignOn"/>
以上就是關于“Tomcat視頻教程:Tomcat的架構和server.xml配置”的介紹,大家如果想了解更多相關知識,不妨關注動力節點的Tomcat視頻教程,里面的內容更詳細,可以免費下載學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習