Tomcat相關知識整理

初識Servlet

  • SUN公司制定了一系列Web應用與Web服務器進行協作的標準Java接口,統稱為Java Servlet API,還對Web服務器發布及運行Web應用的一些細節做了規約。SUN公司把這一系列標準Java接口和規約統稱為Servlet規范。Servlet就是Web服務器與Web應用進行協作的標準接口。

  • Servlet規范把能夠發布和運行JavaWeb應用的Web服務器稱為Servlet容器,它的最主要的特征就是動態執行JavaWeb應用中的Servlet實現類中的程序代碼。

  • Servlet是一種運行在服務器上的小插件,其最常見的用途是擴展Web服務器的功能,可作為非常安全的、可移植的、易于使用的CGI替代品。具有以下特點:

    • 提供了可被服務器動態加載并執行的程序代碼,為來自客戶端的請求提供相應的服務;

    • Servlet完全用Java語言編寫,因此要求運行Servlet的服務器必須支持Java語言;

    • Servlet完全在服務器端運行,因此它的運行不依賴于瀏覽器。不管瀏覽器是否支持Java語言,都能請求訪問服務器端的Servlet。


Tomcat

Tomcat作為運行Servlet的容器,其基本功能是負責接收和解析來自客戶端的請求,同時把客戶端的請求傳送給相應的Servlet,并把Servlet的響應結果返回給客戶端。

Tomcat組件,分為4類:

  • 頂層類元素:包括<Server>元素和<Service>元素,它們位于整個配置文件的頂層;

  • 連接器類元素:為<Connector>元素,代表介于客戶端與服務器端之間的通信接口,負責將客戶端的請求發送給服務器端,并將服務器的響應結果返回給客戶端;

  • 容器類元素:代表處理客戶端請求并生成響應結果的組件,共有四類,分別為<Engine><Host>、<Context><Cluster>元素。Engine組件為特定的Service組件處理所有客戶端請求,Host組件為特定的虛擬主機處理所有的客戶端請求,Context組件為特定的Web應用處理所有的客戶端請求。Cluster組件負責為Tomcat集群系統進行會話復制、Context組件的屬性的復制,以及集群范圍內WAR文件的發布。

  • 嵌套類元素:代表可以被嵌入到容器中的組件,如<Valve>元素和<Realm>元素等。

Tomcat元素:

  • <Server>元素:代表整個Servlet容器組件,是Tomcat的頂級元素。在<Server>元素中可包含一個或多個<Service>元素;

  • <Service>元素:包含一個<Engine>元素,以及一個或多個<Connector>元素,這些<Connector>元素共享同一個<Engine>元素;

  • <Connector>元素:代表和客戶端實際交互的組件,負責接收客戶端請求,以及向客戶端返回響應結果;

  • <Engine>元素:每個<Service>元素只能包含一個<Engine>元素。<Engine>元素處理在同一個<Service>中所有<Connector>元素接收到的客戶端請求;

  • <Host>元素:在一個<Engine>元素中可以包含多個<Host>元素。每個<Host>元素定義了一個虛擬主機,它可以包含一個或多個Web應用;

  • <Context>元素:每個<Context>元素代表了運行在虛擬主機上的單個Web應用。在一個<Host>元素中可以包含多個<Context>元素。

Tomcat的工作模式:

(1)獨立的Servlet容器

Tomcat作為獨立的web服務器來單獨運行,Servlet容器組件作為web服務器中的一部分存在,這是Tomcat的默認工作模式。 在這種模式下,Tomcat是一個獨立進行的Java程序。和運行其他Java程序一樣,運行Tomcat需要啟動一個Java虛擬機進程,由該進程來運行Tomcat。

stand alone.png

(2)其他web服務器進程內的Servlet容器

在這種模式下,Tomcat分為web服務器插件和Servlet容器插件兩部分。web服務器插件在其他web服務器進程的內部地址空間啟動一個JVM,Servlet在此JVM中運行。如有客戶端發出調用Servlet的請求,web服務器插件獲得對此請求的控制并將它轉發(JNI通信機制)給Servlet容器組件。

進程內的servlet.png

(3)其他web服務器進程外的Servlet容器

在這種模式下,Tomcat分為web服務器插件和Servlet容器組件兩部分。web服務器插件在其他web服務器的外部地址空間啟動一個JVM進程,Servlet容器組件再次JVM中運行。如有客戶端發出調用Servlet的請求,web服務器插件獲得對此請求的控制并將它轉發(IPC通信機制)給Servlet容器組件。

當Tomcat作為獨立的Servlet容器來運行時,可看做是能運行Java Servlet的獨立web服務器。此外,Tomcat還可作為其他web服務器進程內或進程外的Servlet容器,從而與其他web服務器集成,集成的意義在于:對于不支持運行Java Servlet的其web服務器,可通過集成Tomcat來提供運行Servlet的功能。

進程外的servlet.png

Tomcat的目錄結構

  • bin:存放啟動和關閉Tomcat的腳本文件及所用到的類;

  • conf:存放Tomcat的各種配置文件,其中最重要的配置文件是server.xml;

  • logs:存放Tomcat的日志文件;

  • lib:存放Tomcat服務器及所有Web應用都可以訪問的jar文件;

  • webapps:Web應用的默認部署目錄;

  • work:Tomcat的工作目錄,Tomcat在運行時把生成的一些工作文件放于此目錄下。在默認情況下,Tomcat把編譯JSP而生成的Servlet類文件放于此目錄下;

  • tmp:臨時文件目錄。

NOTE:

  • Tomcat的lib子目錄:存放的jar文件不僅能被Tomcat訪問,還能被所有在Tomcat中發布的JavaWeb應用訪問;

  • JavaWeb應用的lib子目錄:存放的jar文件只能被當前JavaWeb應用訪問。

NOTE:

Tomcat在加載Web應用時,會把相應的web.xml文件中的數據讀入到內存中。

Context元素

主要屬性:

  • path:指定訪問該Web應用的URL入口,什么都不寫表示根路徑;

  • docBase:指定Web應用的文件路徑,可以給定絕對路徑,也可以給定相對于<Host>的appBase屬性的相對路徑。如果Web應用采用開放目錄結構,則指定Web應用的根路徑;如果Web應用是個war文件,則是定war文件的路徑;

  • className:指定實現Context組件的Java類的名字,這個類必須實現org.apache.catalina.Context接口;

  • reloadable:如果這個屬性設為true,Tomcat服務器在運行狀態下會監視在WEB-INF/classesWEB-INF/lib目錄下的class文件的改動,以監視Web應用的WEB-INF/web.xml文件的改動。如果檢測到有class文件或web.xml文件被更新,服務器會自動重新加載Web應用。

專有屬性:

  • cachingAllowed:如果為true,表示允許啟用靜態資源的緩存,默認值為true;

  • cacheMaxSize:設定靜態資源緩存的最大容量,默認為10m;

  • workDir:指定Web應用的工作目錄,Tomcat在運行時會把與這個web應用相關的臨時文件放在這個目錄下;

  • uppackWar:如果設為true,表示將把Web應用的WAR文件展開為開放目錄結構后再運行。如果設為false,則直接運行war文件。默認為true。

Host元素

主要屬性

  • name:指定虛擬主機的名字

  • className:指定實現虛擬主機的Java類的名字,這個Java類必須實現org.apache.catalina.Host接口;

  • appBase:指定虛擬主機的目錄,可以指定絕對目錄,也可以指定相對于<CATALINA_HOME>的相對路徑;

  • autoDeploy:如果設定為true,表示當Tomcat服務器處于運行狀態時,能夠檢測appBase下的文件,如果有新的Web應用加進來,則會自動發布這個Web應用;

  • deployOnStart:如果此項設置為true,則表示當Tomcat啟動時會自動發布appBase目錄下的所有Web應用。如果web應用沒有相應的context元素,那么Tomcat會提供一個默認的context組件。默認值為true。

專有屬性:

  • unpackWARS:如果設置為true,表示將把appBase屬性指定的目錄下的web應用的war文件先展開為開放的目錄結構后再運行,如果設置為false,則直接運行war文件;

  • workDir:指定虛擬主機的工作目錄,Tomcat在運行時會把與這個虛擬主機的所有web應用相關的臨時文件放在此目錄下,默認值為<CATALINA_HOME>/work。如果<Host>元素下的一個<Context>元素也設置了workDIR屬性,那么<Context>的workDir屬性會覆蓋<Host>元素的workDir屬性;

  • deployXML:如果設置為false,那么Tomcat不會解析web應用中的用于設置context元素的META-INF/context.xml文件。默認值為true。


JavaWeb

SUN的Servlet規范對JavaWeb應用的定義:JavaWeb應用由一組Servlet/JSP、HTML文件、相關Java類,以及其他可以綁定的資源構成,它可以在由各種供應商提供的符合Servlet規范的Servlet容器中運行。

JavaWeb應用包含的內容:

  • Srvlet組件:標準Servlet接口的實現類,運行在服務器端,包含了被Servlet容器動態調用的程序代碼。

  • JSP組件:包含Java程序代碼的HTML文檔,運行在服務器端。當客戶端請求JSP文件時,Servlet容器先把它翻譯成Servlet類,然后動態調用它的程序代碼。

  • 相關的Java類:開發人員自定義的與Web應用相關的Java類。

  • 靜態文檔:存放在存放在服務器端的文件系統中,如HTML文件、圖片文件等。當客戶端請求訪問這些文件時,Servlet容器先從本地文件系統中讀取這些文件的數據,再把它發送到客戶端。

  • web.xml文件:JavaWeb應用的配置文件,采用XML格式。該文件必須位于Web應用的WEB-INF目錄下。

Servlet規范規定:JavaWeb應用必須采用固定的目錄結構,即每種類型的組件在web應用中都有固定的存放目錄。

JavaWeb應用的目錄結構,以helloapp為例

  • /helloapp:此Web應用的根目錄,所有的JSP和HTML文件都存放于此目錄或用戶自定義的子目錄下(WEB-INF子目錄除外);

  • /helloapp/WEB-INF:存放此Web應用的配置文件web.xml;

  • /helloapp/WEB-INF/classes:存放各種.class文件,Servlet類的.class文件也存放于此目錄下;

  • /helloapp/WEB-INF/lib:存放此Web應用所需的各種jar文件;

  • /helloapp/META-INF:當前Webapp的私有資源目錄,通常存放自用的context.xml;

  • /helloapp/classes:此Webapp的私有類;

  • /helloapp/lib:此Webapp的私有類,被打包為jar格式;

  • /helloapp/index.jsp:此Webapp的主頁。

NOTE:在WEB-INF目錄的classes及lib子目錄下都可以存放類文件。在運行時,Servlet容器的類加載器先加載classes目錄下的類,再加載lib目錄下的jar文件中的類。


Tomcat閥(Valve)

Tomcat閥能夠對Catalina容器接收到的http請求進行預處理。Tomcat閥可以可以加入到3種Catalina容器中,它們是Engine、Host和Context。

Tomcat閥主要包括以下幾種:

  • 客戶訪問日志閥(Access Log Valve)

  • 遠程地址過濾器(Remote Address Filter)

  • 遠程主機過濾器(Remote Host Filter)

  • 客戶請求記錄器(Request Dumper)

1.客戶訪問日志閥

能夠將客戶端的請求信息寫到日志文件中,這些日志文件可以記錄網頁的訪問次數、訪問時間、用戶的會話活動和用戶的安全驗證信息等??蛻粼L問日志閥可以加入到Engine、Host或Context容器。

屬性:

  • className:指定閥的實現類,此處為org.apache.catalina.valves.AccessLogValve;

  • directory:設定存放日志文件的絕對或相對于<CATALINA_HOME>的目錄,默認為<CATALINA_HOME>/logs;

  • pattern:設定日志的格式和內容;

  • prefix:設定日志文件名前綴,默認為access_log

  • resolveHosts:如果設為true,表示把遠程IP地址解析為主機名;如果設為false,表示直接記錄遠程IP地址,默認為false;

  • suffix:設定日志文件的擴展名,默認為"";

pattern屬性的可選值:

%a:遠程IP地址;
%A:本地IP地址;
%b:發送的字節數,不包括HTTP頭部,符號“-”表示發送字節為零;
%B:發送的字節數,不包括HTTP頭部;
%h:遠程主機名;
%H:客戶端請求所用的協議;
%l:遠程邏輯用戶名(目前總是返回符號“-”);
%m:客戶端的請方式;
%p:接收到客戶端請求的本地服務器端口;
%q:客戶端請求中的查詢字符串(Query String),即HTTP請求的第一行的URI部分的“?”后面的內容;
%r:客戶端請求的第一行內容(包括請求方式、請求URI及HTTP協議版本);
%s:服務器響應結果中的HTTP狀態代碼;
%S:用戶的額Session ID;
%t:時間和日期;
%u:通過安全認證的遠程用戶名,符號“-”表示不存在遠程用戶名;
%U:客戶端請求的URL路徑;
%v:本地服務器名;

2.遠程地址過濾器

可以根據遠程客戶端的IP地址來決定是否接受客戶端的請求。在遠程地址過濾器中,事先保存了一份被拒絕的IP地址清單和允許訪問的IP地址清單。

屬性

  • className:指定閥實現類,此處為org.apache.catalina.valves.AccessLogValve;

  • allow:指定允許訪問的客戶端IP地址,如果沒有設定,則表示只要客戶端IP地址不在deny清單中,就允許訪問,多個IP地址用逗號隔開;

  • deny:指定不允許訪問的IP地址;

3.遠程主機過濾器

與遠程地址多濾器基本上相同,只是一個是基于ip,一個是基于主機名。

4.客戶請求記錄器

用于把客戶端請求的詳細信息記錄到日志文件,是一個有效的跟蹤工具,尤其是當HTTP請求中的Header或Cookie有錯誤時,它可以跟蹤客戶請求的詳細信息。

原創文章,作者:Jeason,如若轉載,請注明出處:http://www.www58058.com/62239

(1)
JeasonJeason
上一篇 2016-12-05 17:04
下一篇 2016-12-05 17:05

相關推薦

  • Chrony

    RHEL7.4 192.168.100.1 作為時間服務器,其它主機到這臺來同步時間。 時間服務器安裝及配置:#yum install chrony –RHEL7默認已安裝chrony,而沒有安裝ntpd. #systemctl status chronyd –查看chronyd服務狀態#systemctl enable chrony…

    2018-01-06
  • linux文件系統掛載

    掛載mount 掛載:     將額外文件系統與根文件系統某現存的目錄建立起關聯關系,進而使得此目錄做為其它文件訪問入口的行為 卸載:     為解除此關聯關系的過程 把設備關聯掛載點:mount Point mount 卸載時:    &…

    Linux干貨 2016-08-29
  • 文件系統的掛載、usb設備光盤的使用

    一、     文件系統的掛載mount: 1.       掛載命令mount使用: (1)掛載: 將額外文件系統與根文件系統某現存的目錄建立起關聯關系,進而使得此目錄做為其它文件訪問入口的行為,掛載點下原有文件在掛載完成后會被臨時隱藏 (2) 卸載:為解除此…

    Linux干貨 2016-08-29
  • Centos7基于虛擬主機的Lamp配置bbs、Blog、PhpMyAdmin應用程序

    Centos7實現基于虛擬主機的各應用程序搭建: 一、配置三個基于名稱的虛擬主機;      (a) discuzX      (b) wordpress      (c) https: phpMyAdmin 1.安裝Lamp環境及安裝mo…

    Linux干貨 2016-10-09
  • 馬哥教育網絡班21期+第五周課程練習

    第五周作業 1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; cat /boot/grub/grub.conf  | grep "^[[:space:]]\+" 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至…

    Linux干貨 2016-10-17
欧美性久久久久