国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Tomcat(一) Tomcat是什么: Tomcat與Java技術(shù) Tomcat與Web應(yīng)用 以及 Tomcat基本框架及相關(guān)配置

2019-11-07 23:46:59
字體:
供稿:網(wǎng)友

點(diǎn)擊打開鏈接

Tomcat(一) Tomcat是什么:

Tomcat與java技術(shù) Tomcat與Web應(yīng)用 以及 Tomcat基本框架及相關(guān)配置

       Tomcat是一個(gè)被廣泛使用的JavaWEB應(yīng)用服務(wù)器,我們有必要對它有足夠的了解。下面將認(rèn)識Tomcat:

       1、先來了解Tomcat與Java技術(shù)的關(guān)系、以及在WEB中的應(yīng)用場景;

       2、再來了解Tomcat的安裝目錄結(jié)構(gòu)、Tomcat配置文件、Tomcat部署Web應(yīng)用程序的目錄結(jié)構(gòu);

       3、最后了解Tomcat基本架構(gòu)、以及Tomcat架構(gòu)各組件的一些配置。

1、Tomcat是什么

       Apache Tomcat是由Apache Software Foundation(ASF)開發(fā)的一個(gè)開源Java WEB應(yīng)用服務(wù)器。

       類似功能的還有:Jetty、Resin、Websphere、weblogic、JBoss、Glassfish、GonAS等,它們的市場占有率如下,可以看到Tomcat是最受歡迎的Java WEB應(yīng)用服務(wù)器:

       Tomcat在技術(shù)實(shí)現(xiàn)上所處的位置如下:

       下面我們來了解下Tomcat與這些技術(shù)之間的關(guān)系。

1-1、Tomcat與Java

1、Tomcat與Java SE

      Tomcat是用Java語言編寫的,需要運(yùn)行在Java虛擬機(jī)上,所以一般需要先安裝JDK,以提供運(yùn)行環(huán)境。

2、Tomcat與Java EE

      Tomcat實(shí)現(xiàn)了幾個(gè)Java EE規(guī)范,包括Java Servlet、Java Server Pages(jsp),Java ExPRession Language和Java WebSocket等,這些是都下載Tomcat安裝包默認(rèn)提供的,可以在源碼中看到相關(guān)Java EE 規(guī)范API源碼引用,如下:

       此外,官網(wǎng)還提供了另外一些Java EE規(guī)范的實(shí)現(xiàn),如JMX Remote、Web services,要使用的話需要另外下載,放到Tomat安裝目錄/lib中,官網(wǎng)相關(guān)下載如下:

       可以說Tomcat是一個(gè)不完整的Java EE應(yīng)用服務(wù)器。

       更多關(guān)于Java SE、Java EE等java技術(shù)信息請參考:《Java平臺體系:組成結(jié)構(gòu) 運(yùn)行機(jī)制 JRE/JDK/OpenJDK Java SE/EE/ME Java優(yōu)點(diǎn)

1-2、Tomcat與Servlet/編程開發(fā)

       Tomcat實(shí)現(xiàn)的幾個(gè)Java EE規(guī)范最重的是Servlet,因?yàn)閷?shí)現(xiàn)了Servlet規(guī)范,所以Tomcat也是一個(gè)Servlet容器,可以運(yùn)行我們自己編寫的Servlet應(yīng)用程序處理動(dòng)態(tài)請求。

       平時(shí)用的Struts2、SpringMVC框架就是基于Servlet,所以我們可以在這些框架的基礎(chǔ)上進(jìn)行快速開發(fā),然后部署到Tomcat中運(yùn)行。

       另外對于JSP規(guī)范實(shí)現(xiàn):可以混合HTML與Java開發(fā)在一個(gè)文件中(.jsp),這種文件在第一次調(diào)用之后會(huì)被Tomcat的Jasper組件編譯成一個(gè)servlet類,在后續(xù)的操作中則可以直接使用此類。這種開發(fā)方式不靈活,一般少用。

1-3、Tomcat與WEB/HTTP請求

       Tomcat的(HTTP類型)Connector組件實(shí)現(xiàn)了HTTP請求的解析,Tomcat通過Connector組件接收HTTP請求并解析,然后把解析后的信息交給Servlet處理:

       對于靜態(tài)資源(html/js/jpg等)請求,Tomcat提供默認(rèn)的Servlet來處理并響應(yīng);

       對于動(dòng)態(tài)請求,可以映射到自己編寫的Servlet應(yīng)用程序來處理。

1-4、Tomcat與Nginx/Apache的應(yīng)用架構(gòu)

       Nginx、Apache都是目前主流的Web服務(wù)器,也可以作為反向代理服務(wù)器;它們在處理大量并發(fā)的請求連接、連接會(huì)話管理和靜態(tài)內(nèi)容請求等方面相比Tomcat更具優(yōu)勢。

       所以一般在實(shí)際應(yīng)用中,先是通過Nginx(或Apache)反向代理服務(wù)器接收請求,匹配分離動(dòng)態(tài)/靜態(tài)請求(動(dòng)靜分離);

       如果是靜態(tài)請求,則轉(zhuǎn)發(fā)到另外的Nginx WEB服務(wù)器上,返回靜態(tài)內(nèi)容;如果是動(dòng)態(tài)請求,則轉(zhuǎn)發(fā)到后面的Tomcat應(yīng)用服務(wù)器,處理動(dòng)態(tài)請求的業(yè)務(wù)邏輯。

       簡單的架構(gòu)如下:

       更多信息請參考:《各種容器與服務(wù)器的區(qū)別與聯(lián)系:Servlet容器 WEB容器 Java EE容器 應(yīng)用服務(wù)器 WEB服務(wù)器 Java EE服務(wù)器

2、Tomcat安裝目錄

       Tomcat安裝后根目錄如上圖,由環(huán)境變量$ CATALINA_HOME表示,可以手動(dòng)設(shè)置,可以由/bin/catalina.sh命令腳本自動(dòng)設(shè)置該環(huán)境變量,如果使用多個(gè)Tomcat實(shí)例,需要為每個(gè)實(shí)例定義$ CATALINA_BASE環(huán)境變量。

       這些目錄說明如下:

      bin:啟動(dòng)、關(guān)閉和其他腳本, * .sh文件(對于Unix系統(tǒng))是* .bat文件的功能重復(fù)(對于Windows系統(tǒng))。

      conf:配置文件及相關(guān)數(shù)據(jù)文件存放目錄,如server.xml,tomcat-users.xml,web.xml;

       logs:默認(rèn)的日志文件存放目錄,如訪問日志,可以通過server.xml文件配置到其他目錄;

       lib:Tomcat使用的庫文件存放目錄,如Servlet規(guī)范的API;

       temp:臨時(shí)文件的工作目錄,如上傳大文件時(shí)的緩存數(shù)據(jù)會(huì)存儲(chǔ)到這里;

      webapps:我們的應(yīng)用程序部署目錄,可以通過server.xml文件配置;

       work:Tomcat工作目錄,如存放JSP編譯后的類文件。

       更多相關(guān)信息請參考:http://tomcat.apache.org/tomcat-8.5-doc/introduction.html

3、Tomcat配置文件

       Tomcat的配置文件默認(rèn)存放在$CATALINA_HOME/conf目錄中,主要有以下幾個(gè):

      server.xml: Tomcat核心配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主組件的相關(guān)配置信息。

      context.xml:為部署與此Tomcat實(shí)例上的web應(yīng)用程序提供的默認(rèn)配置文件,每個(gè)webapp都可以使用獨(dú)有的context.xml,通常放置于webapp目錄的META-INF子目錄中,常用于定義會(huì)話管理器,Realm已經(jīng)JDBC等。

      web.xml:為部署與Tomcat實(shí)例上的所有web應(yīng)用程序提供部署描述符,通常用于為webapp提供默認(rèn)的servlet定義和基本的MUIME映射表。

      tomcat-users.xml:Realm認(rèn)證時(shí)用到的相關(guān)角色、用戶和密碼等信息;Tomcat自帶的manager默認(rèn)情況下會(huì)用到此文件;在Tomcat中添加/刪除用戶,為用戶指定角色等將通過編輯此文件實(shí)現(xiàn)。

       catalina.policy:當(dāng)基于-securty選項(xiàng)啟動(dòng)tomcat實(shí)例時(shí)會(huì)讀取此配置文件;此文件是JAVA的安全策略配置文件,用于配置訪問codebase(代碼庫)或某些Java類的權(quán)限。

      catalina.properties:java屬性定義文件,設(shè)定類加載器路徑,安全包列表和一些調(diào)整性能的參數(shù)信息。

      logging.properties:定義日志相關(guān)的配置信息,如日志級別、文件路徑等。

4、WEB應(yīng)用部署目錄結(jié)構(gòu)

       我們的應(yīng)用程序一般會(huì)打包成歸檔格式(.war),然后放到Tomcat的應(yīng)用程序部署目錄。而webapp有特定的組織格式,是一種層次型目錄結(jié)構(gòu),通常包含了servlet代碼文件、HTML/jsp頁面文件、類文件、部署描述符文件等等,相關(guān)說明如下:

       /:web應(yīng)用程序的根目錄,可以存放HTML/JSP頁面以及其他客戶端瀏覽器必須可見的其他文件(如js/CSS/圖像文件)。在較大的應(yīng)用程序中,還可以選擇將這些文件劃分為子目錄層次結(jié)構(gòu)。

      /WEB-INF:此webapp的所有私有資源目錄,用戶瀏覽器不可能訪問到的,通常web.xml和context.xml均放置于此目錄。

      /WEB-INF/web.xml:此webapp的私有的部署描述符,描述組成應(yīng)用程序的servlet和其他組件(如filter),以及相關(guān)初始化參數(shù)和容器管理的安全性約束。

       /WEB-INF/classes:此webapp自有的Java程序類文件(.class)及相關(guān)資源存放目錄。

       /WEB-INF/lib:此目錄存放webapp自有的JAR文件,其中包含應(yīng)用程序所需的Java類文件(及相關(guān)資源),例如第三方類庫或JDBC驅(qū)動(dòng)程序。

       更多信息請參考:

      Tomcat《application Developer's Guide》Deployment

       《Servlet3.1規(guī)范(最終版)》第10章

5、Tomcat基本框架及相關(guān)配置

       如上圖,Tomcat可以按功能劃分許多不同的組件,這些組件都可以通過/conf/server.xml文件中可定義和配置,包括Server, Service, Connector, Engine, Cluster, Host, Alias, Context, Realm, Valve, Manager, Listener, Resources, ResourceEnvRef, WatchedResource, Store, Transaction, Channel, Membership, Transport, Member, ClusterListener等,一般可分為以下四類:

      1、頂級組件:位于配置層次的頂級,并且彼此間有著嚴(yán)格的對應(yīng)關(guān)系,有Server組件、Service組件;

      2、連接器:連接客戶端(可以是瀏覽器或Web服務(wù)器)請求至Servlet容器,只有Connector組件,

      3、容器:表示其功能是處理傳入請求的組件,并創(chuàng)建相應(yīng)的響應(yīng)。如Engine處理對一個(gè)Service的所有請求,Host處理對特定虛擬主機(jī)的所有請求,并且Context處理對特定web應(yīng)用的所有請求;

      4、被嵌套的組件:位于一個(gè)容器當(dāng)中,但不能包含其它組件;一些組件可以嵌套在任何Container中,而另一些只能嵌套在Context中。

       如server.xml默認(rèn)配置(刪除注釋內(nèi)容)如下:

       下面來了解下上圖中主要的組件。

5-1、Server組件

       Server(服務(wù)器)表示Tomcat的一個(gè)實(shí)例,因此,它必須是/conf / server.xml配置文件中的單個(gè)最外層元素,它的屬性表示servlet容器的整體特性。通常一個(gè)JVM只能包含一個(gè)Tomcat實(shí)例。

       默認(rèn)配置表示監(jiān)聽在8005端口以接收shutdown命令,默認(rèn)僅允許通過本機(jī)訪問。

       更多Server配置信息請參考:《Apache Tomcat 8 Configuration Reference》 The Server Component

5-2、Service組件

       Service(服務(wù))主要用于關(guān)聯(lián)一個(gè)Engine和與此Engine相關(guān)的Connector,每個(gè)Connector通過一個(gè)特定的端口和協(xié)議接收請求,并將其轉(zhuǎn)發(fā)至關(guān)聯(lián)的Engine進(jìn)行處理。

       因此,Service可以包含一個(gè)Engine、以有一個(gè)或多個(gè)Connector;而一個(gè)Server可以包含多個(gè)Service組件,但通常情下只為一個(gè)Server指派一個(gè)Service。通常需要給Service命名,可以方便管理員在日志文件中識別不同Service產(chǎn)生的日志。

       如默認(rèn)配置中server只包含一個(gè)名為"Catalina"的service,而service里包含兩個(gè)Connector,其中一個(gè)監(jiān)聽8080端口接收HTTP請求,另一個(gè)監(jiān)聽8009端口接收AJP協(xié)議的請求。

       更多Service配置信息請參考:《Apache Tomcat 8 Configuration Reference》 The Service Component

5-3、Connector組件

       如上面所述,Connector(連接器)通過一個(gè)特定的端口接收特定協(xié)議的客戶端請求,并將其轉(zhuǎn)發(fā)至關(guān)聯(lián)的Engine進(jìn)行處理。一個(gè)Engine可以配置多個(gè)連接器,但這些連接器必須使用不同的端口。

       定義連接器可以使用多種屬性,有些屬性也只適用于某特定的連接器類型。一般說來,連接器類型可以分為兩種:

(1)、HTTP連接器

      HTTP連接器元素表示支持HTTP / 1.1協(xié)議的連接器組件,它能使Tomcat能夠作為獨(dú)立的Web服務(wù)器。此組件的特定實(shí)例偵聽服務(wù)器上特定TCP端口號上的連接,每個(gè)轉(zhuǎn)發(fā)到相關(guān)聯(lián)的Engine以執(zhí)行請求處理并創(chuàng)建響應(yīng)。

      HTTP連接器又有三種不同的實(shí)現(xiàn):Java Nio Connector、Java Nio2 Connector、APR/native Connector,它們的對比如下:

       默認(rèn)配置文件,定義了一個(gè)連接器為protocol="HTTP/1.1" 表示的是使用自動(dòng)切換機(jī)制來選擇基于Java NIOConnector或基于APR /Native Connector(需要設(shè)置),也可以手動(dòng)指定,

      更多HTTP連接器配置信息請參考:《Apache Tomcat 8 Configuration Reference》 The HTTP Connector

(2)、AJP 1.3連接器

      AJP連接器元素表示通過AJP(Apache JServ Protocol)協(xié)議與Web連接器通信的連接器組件。

      AJP協(xié)議是基于二進(jìn)制的格式在Web服務(wù)器和Tomcat之間傳輸數(shù)據(jù),這比HTTPP獲得更好的效率,但比較復(fù)雜不通用。

      通常用于將Tomcat集成到現(xiàn)有Apache服務(wù)器中,并且希望Apache處理Web應(yīng)用程序中包含的靜態(tài)內(nèi)容或SSL連接處理的情況,即Apache服務(wù)器作為代理服務(wù)器。Apache與Tomcat結(jié)合可以由mod_jk或mod_proxy模塊來實(shí)現(xiàn),但它們的使用范圍不同:mod_jk支持apache/1.3,apache/2.0,mod_proxy支持apache/2.2+。

       默認(rèn)配置文件中定義了一個(gè)監(jiān)聽8009端口的AJP連接器,其實(shí)官方文檔說明這種連接器不久后不再支持,一般用得不多,就不再多介紹了。

      更多AJP 1.3連接器配置信息請參考:《Apache Tomcat 8 Configuration Reference》 The AJP Connector

   

       定義連接器時(shí)可以配置的屬性非常多,但通常定義HTTP連接器時(shí)必須定義的屬性只有"port",定義AJP連接器時(shí)必須定義的屬性只有"protocol",因?yàn)槟J(rèn)的協(xié)議為HTTP。以下為常用屬性的說明(更多請參考前面給出的文檔):

      1) 、address:指定連接器監(jiān)聽的地址,默認(rèn)為所有地址,即0.0.0.0;

      2)、 maxThreads:支持的最大并發(fā)連接數(shù),默認(rèn)為200;

      3)、port:監(jiān)聽的端口,默認(rèn)為0;

      4) 、protocol:連接器使用的協(xié)議,默認(rèn)為HTTP/1.1,定義AJP協(xié)議時(shí)通常為AJP/1.3;

      5) 、redirectPort:如果某連接器支持的協(xié)議是HTTP,當(dāng)接收客戶端發(fā)來的HTTPS請求時(shí),則轉(zhuǎn)發(fā)至此屬性定義的端口;

      6)、connectionTimeout:等待客戶端發(fā)送請求的超時(shí)時(shí)間,單位為毫秒,默認(rèn)為60000,即1分鐘;

      7)、enableLookups:是否通過request.getRemoteHost()進(jìn)行DNS查詢以獲取客戶端的主機(jī)名;默認(rèn)為true;

      8) 、acceptCount:設(shè)置等待隊(duì)列的最大長度;通常在tomcat所有處理線程均處于繁忙狀態(tài)時(shí),新發(fā)來的請求將被放置于等待隊(duì)列中;

5-4、Engine組件

       Engine(引擎)表示與特定Service相關(guān)聯(lián)的整個(gè)請求處理機(jī)制,即Servlet容器引擎。它接收和處理來自一個(gè)或多個(gè)連接器的所有請求,并檢查每一個(gè)請求的HTTP首部信息以辨別此請求應(yīng)該發(fā)往哪個(gè)Host或Context,并將完成的響應(yīng)返回到連接器,以便最終傳輸回客戶端。

       一個(gè)Engine元素必須嵌套在Service元素內(nèi),它可以包含多個(gè)host組件,還可以包含Realm、Listener和Valve等子容器。

       常用的屬性定義:

      1、defaultHost:Tomcat支持基于FQDN的虛擬主機(jī),這些虛擬主機(jī)可以通過在Engine容器中定義多個(gè)不同的Host組件來實(shí)現(xiàn);但如果此引擎的連接器收到一個(gè)發(fā)往非非明確定義虛擬主機(jī)的請求時(shí)則需要將此請求發(fā)往一個(gè)默認(rèn)的虛擬主機(jī)進(jìn)行處理,因此,在Engine中定義的多個(gè)虛擬主機(jī)的主機(jī)名稱中至少要有一個(gè)跟defaultHost定義的主機(jī)名稱同名。

      2、name:Engine組件的名稱,用于日志和錯(cuò)誤信息記錄時(shí)區(qū)別不同的引擎。

       如默認(rèn)配置中定義了一個(gè)名為"Catalina"的Engine,而Engine里包含一個(gè)Hots,并被配置為默認(rèn)的虛擬主機(jī)。

      更多Engine配置信息請參考:《Apache Tomcat 8 Configuration Reference》 The Engine Component

5-5、Host組件

       Host(虛擬主機(jī))類似于Apache中的虛擬主機(jī),但在Tomcat中只支持基于FQDN的"虛擬主機(jī)"。Host位于Engine容器中用于接收請求并進(jìn)行相應(yīng)處理,它是服務(wù)器(例如"www.mycompany.com")的網(wǎng)絡(luò)名稱與運(yùn)行Tomcat的特定服務(wù)器的關(guān)聯(lián)。

       客戶端通常使用主機(jī)名來標(biāo)識他們希望連接的服務(wù)器,但要使客戶端能夠使用其網(wǎng)絡(luò)名稱連接到Tomcat服務(wù)器,此名稱必須在管理所屬的Internet域的域名服務(wù)(DNS)服務(wù)器中注冊。此主機(jī)名也包含在HTTP請求標(biāo)頭中,Tomcat從HTTP頭中提取主機(jī)名,并查找具有匹配名稱的主機(jī);如果未找到匹配項(xiàng),請求將路由到默認(rèn)主機(jī)。

       一個(gè)Engine至少要包含一個(gè)Host組件,而在Host元素內(nèi)可以嵌入與此虛擬主機(jī)關(guān)聯(lián)的Web應(yīng)用程序的Context等元素。

       常用屬性說明:

      1)、name:此Host的FQDN虛擬主機(jī)名稱;

      2) 、appBase:此Host的webapps目錄,即存放非歸檔的web應(yīng)用程序的目錄或歸檔后的WAR文件的目錄路徑;可以使用基于$CATALINA_HOME的相對路徑;

       3)、autoDeploy:在Tomcat處于運(yùn)行狀態(tài)時(shí)放置于appBase目錄中的應(yīng)用程序文件是否自動(dòng)進(jìn)行deploy;默認(rèn)為true;

      4) 、unpackWars:在啟用此webapps時(shí)是否對WAR格式的歸檔文件先進(jìn)行展開;默認(rèn)為true。

       如默認(rèn)配置中定義了一個(gè)主機(jī)名為"localhost"的Host,而webapps目錄為$ CATALINA_BASE相對的"webapps",即前面說到的默認(rèn)目錄,也可用絕對路徑來配置其他目錄。

       更多Host配置信息請參考:《Apache Tomcat 8 Configuration Reference》 The Host Component

5-6、Context組件

       Context(上下文)表示在特定虛擬主機(jī)中運(yùn)行的Web應(yīng)用程序,一個(gè)Context對應(yīng)一個(gè)Web應(yīng)用程序,而里面的Wrapper可以理解為一個(gè)個(gè)Servlet程序。

       Context需要根據(jù)其定義的上下文路徑(path)匹配請求URI的最長前綴(除主機(jī)名外)來選擇。一旦選擇,可以由docBase來找到該上下文將對應(yīng)的web應(yīng)用程序部署目錄,由目錄中web.xml定義的servlet映射選擇一個(gè)合適的servlet來處理傳入的請求。

       一個(gè)Host可以有多個(gè)Context,通常不建議定義在server.xml文件中,而是每一個(gè)context定義使用一個(gè)單獨(dú)的XML文件進(jìn)行,其文件的目錄      為$CATALINA_HOME/conf/<engine name>/<host name>。

       可以看到server.xml中默認(rèn)沒有定義Context,但存在/conf/context.xml,在前面說Tomcat配置文件時(shí)曾介紹過,context.xml為部署與此Tomcat實(shí)例上所有的web應(yīng)用程序提供的默認(rèn)配置文件,刪除注釋后其內(nèi)容如下:

       通過它可以找到默認(rèn)的和各web應(yīng)用程序提供部署描述符文件web.xml,/conf/web.xml定義了Tomcat提供的默認(rèn)Servlet處理程序,主要用來處理靜態(tài)資源請求;而各webapp的web.xml可以定義其他的動(dòng)態(tài)請求url映射到不同Servlet程序處理。

       常用的屬性定義有:

      1) 、docBase:相應(yīng)的Web應(yīng)用程序的存放位置;也可以使用相對路徑,起始路徑為此Context所屬Host中appBase定義的路徑;切記,docBase的路徑名不能與相應(yīng)的Host中appBase中定義的路徑名有包含關(guān)系,比如,如果appBase為deploy,而docBase絕不能為deploy-bbs類的名字;

      2) 、path:相對于Web服務(wù)器根路徑而言的URI;如果為空"",則表示為此webapp的根路徑;如果context定義在一個(gè)單獨(dú)的xml文件中,此屬性不需要定義;

      3)、reloadable:是否允許重新加載此context相關(guān)的Web應(yīng)用程序的類;默認(rèn)為false;

       更多Context配置信息請參考:《Apache Tomcat 8 Configuration Reference》 The Context Component

5-7、Realm組件

       Realm(領(lǐng)域)表示分配給這些用戶的用戶名,密碼和角色(類似于Unix組)的"數(shù)據(jù)庫"。一個(gè)Realm(領(lǐng)域)表示一個(gè)安全上下文,它是一個(gè)授權(quán)訪問某個(gè)給定Context的用戶列表和某用戶所允許切換的角色相關(guān)定義的列表。

       Catalina容器(Engine,Host或Context)可以包含不超過一個(gè)Realm元素(但自身可以嵌套)。此外,與引擎或主機(jī)關(guān)聯(lián)的領(lǐng)域由低級容器自動(dòng)繼承,除非下級容器顯式定義了自己的領(lǐng)域。如果沒有為引擎配置領(lǐng)域,將自動(dòng)為引擎配置空領(lǐng)域的實(shí)例。

       定義Realm時(shí)惟一必須要提供的屬性是classname,它是Realm的多個(gè)不同實(shí)現(xiàn),用于表示此Realm認(rèn)證的用戶及角色等認(rèn)證信息的存放位置,Tomcat中實(shí)現(xiàn)了多種不同的Realm,如下:

      UserDatabaseRealm:基于UserDatabase文件(通常是tomcat-user.xml)實(shí)現(xiàn)用戶認(rèn)證,它實(shí)現(xiàn)是一個(gè)完全可更新和持久有效的MemoryRealm,因此能夠跟標(biāo)準(zhǔn)的MemoryRealm兼容;它通過JNDI實(shí)現(xiàn);

      LockOutRealm:提供鎖定功能,以便在給定時(shí)間段內(nèi)出現(xiàn)過多的失敗認(rèn)證嘗試時(shí)提供用戶鎖定機(jī)制;

      JAASRealm:基于Java Authintication and Authorization Service實(shí)現(xiàn)用戶認(rèn)證;

      JDBCRealm:通過JDBC訪問某關(guān)系型數(shù)據(jù)庫表實(shí)現(xiàn)用戶認(rèn)證;

      JNDIRealm:基于JNDI使用目錄服務(wù)實(shí)現(xiàn)認(rèn)證信息的獲??;

      MemoryRealm:查找tomcat-user.xml文件實(shí)現(xiàn)用戶信息的獲取。

       可以看到默認(rèn)配置文件中定義了一個(gè)LockOutRealm并嵌套一個(gè)UserDatabaseRealm的Realm來通過tomcat-user.xml文件實(shí)現(xiàn)用戶認(rèn)證。

       更多Realm配置信息請參考:《Apache Tomcat 8 Configuration Reference》 The Realm Component

5-8、Valve組件

       Valve(閥門)類似于過濾器,用來攔截請求并在將其轉(zhuǎn)至目標(biāo)之前進(jìn)行某種處理操作;它可以工作于Engine和Host/Context之間、Host和Context之間以及Context和Web應(yīng)用程序的某資源之間。

       Valve常被用來記錄客戶端請求、客戶端IP地址和服務(wù)器等信息,這種處理技術(shù)通常被稱作請求轉(zhuǎn)儲(chǔ)(request dumping)。請求轉(zhuǎn)儲(chǔ)valve記錄請求客戶端請求數(shù)據(jù)包中的HTTP首部信息和cookie信息文件中,響應(yīng)轉(zhuǎn)儲(chǔ)valve則記錄響應(yīng)數(shù)據(jù)包首部信息和cookie信息至文件中。

       一個(gè)容器內(nèi)可以建立多個(gè)Valve,而且Valve定義的次序也決定了它們生效的次序。不同類型的Value具有不同的處理能力,Tomcat中實(shí)現(xiàn)了多種不同的Valve:

      accessLogValve:訪問日志Valve

      ExtendedAccessValve:擴(kuò)展功能的訪問日志Valve

      RequestDumperValve:請求轉(zhuǎn)儲(chǔ)Valve;

      RemoteAddrValve:基于遠(yuǎn)程地址的訪問控制;

      RemoteHostValve:基于遠(yuǎn)程主機(jī)名稱的訪問控制;

      SemaphoreValve:用于控制Tomcat主機(jī)上任何容器上的并發(fā)訪問數(shù)量;

      ReplicationValve:專用于Tomcat集群架構(gòu)中,可以在某個(gè)請求的session信息發(fā)生更改時(shí)觸發(fā)session數(shù)據(jù)在各節(jié)點(diǎn)間進(jìn)行復(fù)制;

      SingleSignOn:將兩個(gè)或多個(gè)需要對用戶進(jìn)行認(rèn)證webapp在認(rèn)證用戶時(shí)連接在一起,即一次認(rèn)證即可訪問所有連接在一起的webapp;

      ClusterSingleSingOn:對SingleSignOn的擴(kuò)展,專用于Tomcat集群當(dāng)中,需要結(jié)合ClusterSingleSignOnListener進(jìn)行工作。

       通過屬性className定義相關(guān)的java實(shí)現(xiàn)的類名來選擇Value。如默認(rèn)配置文件中定義了一個(gè)AccessLogValve的Value來記錄訪問日志到文件中。

       更多Valve配置信息請參考:《Apache Tomcat 8 Configuration Reference》 The Valve Component

5-9、其他組件

1、Logger

      日志記錄器(Logger):用于記錄組件內(nèi)部的狀態(tài)信息,可被用于除Context之外的任何容器中。日志記錄的功能可被繼承,因此,一個(gè)引擎級別的Logger將會(huì)記錄引擎內(nèi)部所有組件相關(guān)的信息,除非某內(nèi)部組件定義了自己的Logger組件(前面介紹的AccessLogValve使用自包含的邏輯來寫它的日志文件,以獲得更好的效率)。

2、Listener

      Listener用于創(chuàng)建和配置LifecycleListener對象,而LifecycleListener通常被開發(fā)人員用來創(chuàng)建和刪除容器。

3、Loader

      Java的動(dòng)態(tài)裝載功能是其語言功能強(qiáng)大表現(xiàn)之一,Servlet容器使用此功能在運(yùn)行時(shí)動(dòng)態(tài)裝載servlet和它們所依賴的類。Loader可以用于Context中控制java類的加載,即WebApp類加載器。

4、Resources

      經(jīng)常用于實(shí)現(xiàn)在Context中指定需要裝載的但不在Tomcat本地磁盤上的應(yīng)用資源,如Java類,HTML頁面,JSP文件等。

5、GlobalNamingResources

      應(yīng)用于整個(gè)服務(wù)器的JNDI映射,此可以避免每個(gè)Web應(yīng)用程序都需要在各自的web.xml創(chuàng)建,這在web應(yīng)用程序以WAR的形式存在時(shí)尤為有用。它通??梢园齻€(gè)子元素:Environment、Resource和ResourceEnvRef。

6、WatchedResource

      WatchedResource可以用于Context中監(jiān)視指定的webapp程序文件的改變,并且能夠在監(jiān)視到文件內(nèi)容發(fā)生改變時(shí)重新裝載此文件。

7、Manager

      Manger對象用于實(shí)現(xiàn)HTTP會(huì)話管理的功能,Tomcat中有5種Manger的實(shí)現(xiàn):

1) 、StandardManager

      Tomcat6的默認(rèn)會(huì)話管理器,用于非集群環(huán)境中對單個(gè)處于運(yùn)行狀態(tài)的Tomcat實(shí)例會(huì)話進(jìn)行管理。當(dāng)Tomcat關(guān)閉時(shí),這些會(huì)話相關(guān)的數(shù)據(jù)會(huì)被寫入磁盤上的一個(gè)名叫SESSION.ser的文件,并在Tomcat下次啟動(dòng)時(shí)讀取此文件。

2) 、PersistentManager

      當(dāng)一個(gè)會(huì)話長時(shí)間處于空閑狀態(tài)時(shí)會(huì)被寫入到swap會(huì)話對象,這對于內(nèi)存資源比較吃緊的應(yīng)用環(huán)境來說比較有用。

3)、DeltaManager

      屬于ClusterManager,用于Tomcat集群的會(huì)話管理器,它通過將改變了會(huì)話數(shù)據(jù)同步給集群中的其它節(jié)點(diǎn)實(shí)現(xiàn)會(huì)話復(fù)制。這種實(shí)現(xiàn)會(huì)將所有會(huì)話的改變同步給集群中的每一個(gè)節(jié)點(diǎn),也是在集群環(huán)境中用得最多的一種實(shí)現(xiàn)方式。

但集群節(jié)點(diǎn)較多時(shí),會(huì)消耗大量的網(wǎng)絡(luò)資源,一般適用于3、4個(gè)節(jié)點(diǎn)的集群。

4)、BackupManager

      屬于ClusterManager,用于Tomcat集群的會(huì)話管理器,與DeltaManager不同的是,某節(jié)點(diǎn)會(huì)話的改變只會(huì)同步給集群中的另一個(gè)而非所有節(jié)點(diǎn)。

5)、SimpleTcpReplicationManager

      Tomcat4時(shí)用到的版本,過于老舊了。

8、Stores

      PersistentManager必須包含一個(gè)Store元素以指定將會(huì)話數(shù)據(jù)存儲(chǔ)至何處。這通常有兩種實(shí)現(xiàn)方式:FileStore和JDBCStore。

9、Cluster

      專用于配置Tomcat集群的元素,可用于Engine和Host容器中。在用于Engine容器中時(shí),Engine中的所有Host均支持集群功能。在Cluster元素中,需要直接定義一個(gè)Manager元素,這個(gè)Manager元素有一個(gè)其值為org.apache.catalina.ha.session.DeltaManager或org.apache.catalina.ha.session.BackupManager的className屬性。同時(shí),Cluster中還需要分別定義一個(gè)Channel和ClusterListener元素。

10、Channel

      用于Cluster中給集群中同一組中的節(jié)點(diǎn)定義通信"信道"。Channel中需要至少定義Membership、Receiver和Sender三個(gè)元素,此外還有一個(gè)可選元素Interceptor。

11、Membership

      用于Channel中配置同一通信信道上節(jié)點(diǎn)集群組中的成員情況,即監(jiān)控加入當(dāng)前集群組中的節(jié)點(diǎn)并在各節(jié)點(diǎn)間傳遞心跳信息,而且可以在接收不到某成員的心跳信息時(shí)將其從集群節(jié)點(diǎn)中移除。Tomcat6中Membership的實(shí)現(xiàn)是org.apache.catalina.tribes.membership.McastService。

12、Sender

      用于Channel中配置"復(fù)制信息"的發(fā)送器,實(shí)現(xiàn)發(fā)送需要同步給其它節(jié)點(diǎn)的數(shù)據(jù)至集群中的其它節(jié)點(diǎn)。發(fā)送器不需要屬性的定義,但可以在其內(nèi)部定義一個(gè)Transport元素。

13、Transport

      用于Sender內(nèi)部,配置數(shù)據(jù)如何發(fā)送至集群中的其它節(jié)點(diǎn)。Tomcat有兩種Transport的實(shí)現(xiàn):

1) 、PooledMultiSender

      基于Java阻塞式IO,可以將一次將多個(gè)信息并發(fā)發(fā)送至其它節(jié)點(diǎn),但一次只能傳送給一個(gè)節(jié)點(diǎn)。

2)、PooledParallelSener

      基于Java非阻塞式IO,即NIO,可以一次發(fā)送多個(gè)信息至一個(gè)或多個(gè)節(jié)點(diǎn)。

14、Receiver

       用于Channel定義某節(jié)點(diǎn)如何從其它節(jié)點(diǎn)的Sender接收復(fù)制數(shù)據(jù),Tomcat中實(shí)現(xiàn)的接收方式有兩種BioReceiver和NioReceiver。 

更多組件及配置信息請參考:

《Apache Tomcat 8 Configuration Reference》

《Apache Tomcat User Guide》

 

       到這里,我們對Tomcat有了一個(gè)基本的認(rèn)識:了解到Tomcat技術(shù)與在Web中的應(yīng)用、以及Tomcat基本框架及相關(guān)配置,后面將更深入了解Tomcat:了解JavaEE Servlet技術(shù)、Tomcat中的一些實(shí)現(xiàn)細(xì)節(jié),而后再來配置Tomcat+nginx+keepalived的動(dòng)靜分離、會(huì)話保持的高可用集群……

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 温州市| 松桃| 治县。| 界首市| 成安县| 博罗县| 武定县| 临沭县| 临朐县| 桦甸市| 昭通市| 行唐县| 沂南县| 怀宁县| 桂林市| 林芝县| 夏津县| 万荣县| 出国| 陇南市| 惠东县| 吉安县| 吴江市| 敦化市| 绥棱县| 新津县| 朝阳市| 丰都县| 汪清县| 青岛市| 潞西市| 青铜峡市| 湘阴县| 乌兰县| 那坡县| 金溪县| 夏津县| 米脂县| 江永县| 绥化市| 富民县|