<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Tomcat – 架構和`server.xml`配置 > 原文: [https://howtodoinjava.com/tomcat/tomcats-architecture-and-server-xml-configuration-tutorial/](https://howtodoinjava.com/tomcat/tomcats-architecture-and-server-xml-configuration-tutorial/) 我們已經學習了,[**當您在服務器上部署 Web 應用并通過瀏覽器進行訪問時,Web 服務器通常是如何工作的**](//howtodoinjava.com/for-fun-only/a-birds-eye-view-on-how-web-servers-work/ "A birds-eye view on “how web servers work?”")。 現在,讓我們學習一下服務器內部可能無法在日常工作中使用的東西,但是當您初次配置應用時,它們肯定會為您提供幫助。 我長期以來一直在使用 **tomcat 服務器**,因此我將其用作教程。 將來,只要時間允許,我將嘗試在其他服務器上分享我的經驗。 [**Apache Tomcat**](https://tomcat.apache.org/ "tomcat") 是由 Apache 軟件基金會(ASF)開發的開源 Web 服務器和 Servlet 容器。 Tomcat 實現了幾種 Java EE 規范,包括 Java Servlet,JavaServer Pages(JSP),Java EL 和 WebSocket,并提供了運行 Java 代碼的“純 Java” HTTP Web 服務器環境([Wiki](https://en.wikipedia.org/wiki/Apache_Tomcat "wiki tomcat"))。 ## Tomcat 的架構 **Tomcat 的架構**由一系列功能組件組成,可以根據明確定義的規則進行組合。 ![Tomcat Architecture](https://img.kancloud.cn/51/2f/512ff84829f5a0300ddd4592b6320512_450x335.png) Tomcat 架構 每個服務器安裝的結構(通過這些功能組件)在文件`server.xml`中定義,該文件位于 **Tomcat 的安裝文件夾**的`/conf`子目錄中。 讓我們詳細討論這些組件。 ## `server.xml`組件 默認情況下,`server.xml`文件隨附此配置,我們將詳細研究其元素。 ```java <?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 &quot;%r&quot; %s %b" /> </Host> </Engine> </Service> </Server> ``` 讓我們從內到外討論 **tomcat 配置文件**的功能組件,以更好地關聯事物。 #### 上下文 上下文是一組稱為容器的 Tomcat 組件的最里面的元素,它**代表單個 Web 應用**。 Tomcat 在加載應用時自動實例化并配置標準上下文。 作為配置的一部分,Tomcat 還處理應用文件夾的`\WEB-INF\web.xml`文件中定義的屬性,并使這些屬性可用于應用。 #### 連接器(第 16-19 行) **連接器處理與客戶端的通信。** Tomcat 提供了多個連接器,例如 HTTP 連接器用于大多數 HTTP 通信,AJP 連接器實現將 Tomcat 連接到另一個 Web 服務器(例如 Apache HTTPD 服務器)時使用的 AJP 協議。 Tomcat 的默認配置包括一個用于處理 HTTP 通信的連接器。 默認情況下,此連接器等待通過端口 **8080** 發出的請求。 這就是我們示例的 URL 始終以`http://localhost:8080/`開頭的原因。 請注意,對所有應用的請求都通過此連接器的單個實例。 每個新請求都會導致實例化一個新線程,該新線程在請求??期間將保持活動狀態。 互聯網上有關 Tomcat 的文章通常將此連接器稱為“**`Coyote`**”。 `connectionTimeout`屬性設置為 20,000 表示會話在閑置 5 小時,33 分鐘和 20 秒后終止,而`redirectPort="8443"`表示需要安全套接字層(SSL)傳輸的傳入請求將重定向到端口 8443。 AJP 連接器使 Tomcat 只處理動態網頁,而讓純 HTML 服務器(例如 Apache Web 服務器)處理對靜態頁面的請求。 這樣可以最大程度地處理請求。 您可能可以注釋掉此連接器,因為 tomcat 本身今天已經非常快,或者只是如果您不打算將 Web 服務器與 Tomcat 一起使用,則可以將其注釋掉。 #### 主機(第 25-30 行) **主機是網絡名稱的關聯,例如`www.yourdomain.com`,訪問 Tomcat 服務器。** 主機可以包含任意數量的上下文(即應用)。 您可以在同一服務器上定義多個主機。 例如,如果您已注冊域`yourdomain.com`,則可以定義主機名,例如`w1.yourdomain.com`和`w2.yourdomain.com`。 請記住,只有當域名服務器將其名稱映射到計算機的 IP 地址時,才可以從互聯網訪問它。 Tomcat 的默認配置包括名為 **localhost** 的主機。 可以通過在文件`C:\Windows\System32\drivers\etc\hosts`中寫入一個項目來完成 **localhost** 與您的計算機之間的關聯。 主機屬性“`appBase`”定義了 Tomcat 安裝文件夾中的應用目錄。 然后,每個應用通過該目錄中的路徑進行標識。 唯一的例外是根路徑,該路徑已映射到空字符串。 本地主機的應用基本目錄是`webapps`。 這意味著目錄“`C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\`”中的應用由空字符串標識。 因此,其 URL 為“`http://localhost:8080/`”。 對于駐留在根以外的目錄中的其他應用,如“`C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\myapp\`”,URL 類似于“`http://localhost:8080/myapp/`”。 屬性`unpackWARs="true"`表示,如果將 WAR 文件拖放到`appBase`目錄中,Tomcat 將自動將其擴展到普通文件夾中。 如果將此屬性設置為`false`,則應用將直接從 WAR 文件運行。 這顯然意味著應用的執行速度較慢,因為 Tomcat 需要在執行時解壓縮 WAR 文件。 屬性`autoDeploy="true"`表示,如果在 Tomcat 運行時將應用放置在`appBase`目錄中,它將被自動部署。 #### 引擎(第 20 行) **引擎代表特定服務的請求處理管道。** 由于服務可能具有多個連接器,因此引擎從這些連接器接收并處理所有請求,將響應傳遞回適當的連接器以傳輸到客戶端。 引擎必須包含一個或多個主機,其中之一被指定為默認主機。 Tomcat 的默認配置包括引擎 Catalina,該引擎包含主機 localhost(顯然是默認主機,因為它是唯一的主機)。 Catalina 引擎處理通過 HTTP 連接器收到的所有傳入請求,并發回相應的響應。 它根據請求頭中包含的信息將每個請求轉發到正確的主機和上下文。 #### 服務(第 15 行) **服務是駐留在服務器內部的一個中間組件,并且將一個或多個連接器與一個引擎完全綁定在一起。** Tomcat 的默認配置包括服務 Catalina,該服務將 HTTP 和 AJP 連接器關聯到 Catalina 引擎。 因此,連接器和引擎是 Service 元素的子元素。 用戶很少自定義 Service 元素,因為默認實現很簡單并且足夠。 #### 服務器(第 2 行) **服務器是最重要的組件,代表 Tomcat 的一個實例。** 它可以包含一個或多個服務,每個服務都有自己的引擎和連接器。 現在,讓我們討論以上`server.xml`中使用的其他一些概念。 #### 監聽器(第 3-7 行) 監聽器是一個 Java 對象,通過實現`org.apache.catalina.LifecycleListener`接口,它可以響應特定的事件。 * **`AprLifecycleListener`**:啟用 Apache 可移植運行時(APR)庫。 該庫為 tomcat 提供了操作系統級別的支持。 * **`JasperListener`**:啟用 Jasper,它是 JSP 引擎。 該監聽器使重新編譯已更新的 JSP 文檔成為可能。 * **`JreMemoryLeakPreventionListener`**:處理可能導致內存泄漏的各種已知情況。 * **`GlobalResourcesLifecycleListener`**:負責實例化與全局 Java 命名和目錄接口(JNDI)相關聯的托管 Bean。 * **`ThreadLocalLeakPreventionListener`**:還處理可能導致內存泄漏的各種已知情況。 #### 全局命名資源 `GlobalNamingResources`元素只能在服務器組件內部定義。 **它定義了整個服務器都可以訪問的 JNDI 資源。** 默認`server.xml`中定義的唯一資源是通過文件`conf/tomcat-users.xml`定義的基于用戶和密碼存儲的數據庫。 #### 領域(第 21-24 行) 領域組件可以出現在任何容器組件(引擎,主機和上下門)內。 **它代表用戶,密碼和用戶角色的數據庫。 其目的是支持基于容器的認證。** 除了`UserDatabaseRealm`之外,還提供以下領域類:`JDBCRealm`(用于通過其 JDBC 驅動程序連接到關系數據庫),`DataSourceRealm`(用于連接到通過 JNDI 命名的 JDBC 數據源),`JNDIRealm`(用于連接 到輕型目錄訪問協議目錄)和`MemoryRealm`(將 XML 文件加載到內存中)。 #### 閥門(行 27-29) 閥門是類似于攔截器的元素,當插入到容器(上下文,主機或引擎)中時,**會在所有傳入的 HTTP 請求到達應用**之前攔截它們。 這使您能夠預處理針對特定應用的請求。 虛擬主機中運行的應用或引擎中運行的所有應用。 閥門可以有多種用途,例如: 通過`RemoteAddrValve`閥,您可以根據源 IP 地址有選擇地允許或阻止請求。 它支持兩個屬性 – `allow`和`block`。 ```java <Valve className="org.apache.catalina.valves.RemoteAddrValve" block="192\.168.*"/> ``` `RemoteHostValve`閥的操作類似于遠程地址過濾器,但在客戶端主機名而不是客戶端 IP 地址上。 ```java <Valve className="org.apache.catalina.valves.RemoteHostValve" deny=".*badweb\.com"/> ``` `RequestDumperValve`記錄傳入請求的詳細信息,因此對于調試目的很有用。 ```java <Valve className="org.apache.catalina.valves.RequestDumperValve"/> ``` 當`single sign on valve`包含在主機容器中時,其作用是僅對該主機的所有應用進行一次認證。 如果沒有此閥,則用戶必須在使用每個單獨的應用之前輸入其 ID 和密碼。 ```java <Valve className="org.apache.catalina.valves.SingleSignOn"/> ``` 僅限于`server.xml`內部元素的介紹。 將來我將介紹與 tomcat 服務器有關的更多任務/概念。 **祝您學習愉快!** **參考**: [http://tomcat.apache.org/tomcat-7.0-doc/architecture/overview.html](https://tomcat.apache.org/tomcat-7.0-doc/architecture/overview.html "overview")
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看