Tomcat基本安裝與組件簡介
- 通常意義上的web服務器接受請求後,只是單純地響應靜態資源,如html文件,圖片文件等,不能在後端進行一定的處理操作。
- Tomcat是Apache下的一個子項目,它具備web服務器的所有功能,不僅可以監聽接受請求並響應靜態資源,而且可以在後端運行特定規範的java代碼servlet,同時將執行的結果以html代碼的形式寫回客戶端。
- Tomcat由一系列的組件構成,其中核心的組件有三個:
- web容器——完成web服務器的功能。
- servlet容器——名字為catalina,用於處理servlet代碼。
- jsp容器——用於將jsp動態網頁翻譯成servlet代碼。
二、Tomcat安裝
-
yum倉庫安裝
yum list all | grep -i jdk #查看yum倉庫內的jdk yum install java-1.8.0-openjdk #選擇適合要安裝的tomcat版本的JDK yum install tomcat tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp
-
下載jdk-VERSION-OS-ARCH.rpm包,下載tomcat的二進制壓縮包
例如:
apache-tomcat-8.5.29.tar.gz
jdk-8u144-linux-x64- 安裝
[root@clone2 app ]# rpm -ivh jdk-8u144-linux-x64.rpm [root@clone2 app ]# tar xf apache-tomcat-8.5.29.tar.gz -C /usr/local/ [root@clone2 app ]# cd /usr/local/ [root@clone2 local ]# ls apache-tomcat-8.5.29 etc include lib64 sbin src bin games lib libexec share [root@clone2 local ]# ln -sv apache-tomcat-8.5.29/ tomcat ‘tomcat’ -> ‘apache-tomcat-8.5.29/’
[root@clone2 local ]# vim /etc/profile.d/java.sh export JAVA_BASE=/usr/java/jdk.VERSION export PATH=$JAVA_BASE:$PATH [root@clone2 local ]# vim /etc/profile.d/tomcat.sh export CATALINA_BASE=/usr/local/tomcat export PATH=$CATALINA_BASE/bin:$PATH [root@clone2 local ]# . /etc/profile.d/{java.sh,tomcat.sh} #配置java和tomcat的環境變量 [root@clone2 local ]# useradd tomcat [root@clone2 local ]# chown -R tomcat.tomcat /usr/local/tomcat/*
- 使用 catalina.sh 腳本進行啟動、關閉、查看版本信息,等等
Tomcat目錄文件組成
- tomcat 的目錄結構
- bin:腳本,及啟動時用到的類;
- conf:配置文件目錄;
- lib:庫文件,Java類庫,jar;
- logs:日誌文件目錄;
- temp:臨時文件目錄;
- webapps:webapp的默認目錄;
- work:工作目錄,存放編譯後的字節碼文件;
- tomcat的配置文件構成:
- server.xml:主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主組件的相關配置信息;
- web.xml:每個webapp只有“部署”後才能被訪問,它的部署方式通常由web.xml進行定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認部署相關的配置;
- context.xml:每個webapp都可以使用的配置文件,它通常由專用的配置文件context.xml來定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認配置;
- tomcat-users.xml:用戶認證的賬號和密碼文件;角色(role),用戶(User);此文件在tomcat啟動時被裝入內存;
- catalina.policy:當使用-security選項啟動tomcat時,用於為tomcat設置安全策略;
- catalina.properties:Java屬性的定義文件,用於設定類加載器路徑,以及一些與JVM調優相關參數;
logging.properties:日誌系統相關的配置;
- JSP WebAPP的組織結構:
- /: webapps的根目錄
- index.jsp, index.html:主頁;
- WEB-INF/:當前webapp的私有資源路徑;通常用於存儲當前webapp的web.xml和context.xml配置文件;
- META-INF/:類似於WEB-INF/;
- classes/:類文件,當前webapp所提供的類;
- lib/:類文件,當前webapp所提供的類,被打包為jar格式;
Tomcat組件
Tomcat的核心組件:server.xml
<Server>
<Service>
<connector/>
<connector/>
....
<Engine>
<Host>
<Context/>
<Context/>
...
</Host>
<Host>
...
</Host>
...
</Engine>
</Service>
</Server>
- 每一個組件都由一個Java“類”實現,這些組件大體可分為以下幾個類型:
- 頂級組件:Server
- 服務類組件:Service
- 連接器組件:http, https, ajp(apache jserv protocol)
- 容器類:Engine, Host, Context
- 被嵌套類:valve, logger, realm, loader, manager, ...
- 集群類組件:listener, cluster, ...
1、server組件
Server:代表tomcat instance,即表現出的一個java進程;監聽在8005端口,只接收“SHUTDOWN”。各server監聽的端口不能相同,因此,在同一物理主機啟動多個實例時,需要修改其監聽端口為不同的端口;
port="-1",
shutdown="RANDOM_CHARCTER"
2、service組件
Service:用於實現將一個或多個connector組件關聯至一個engine組件,每個連接器通過一個特定的端口和協議接收入站請求交將其轉發至關聯的引擎進行處理;
3、connector組件
Connector:負責接收請求至Servlet容器內的Web應用程序,連接客戶端和服務器分配的HTTP協議的8080端口,可以根據自己需求改變端口,一個引擎可以配置多個連接器,但每個連接器必須使用不同端口,默認連接器是基於HTTP/1.1的Coyote。同時Tomcat也支持HTTP/1.1 , HTTP/2.0 , AJP 協議;(http https ajp)
- 屬性
- port="8080" 指定端口
- protocol="HTTP/1.1" 指定協議
- connectionTimeout="20000" 請求連接超時
- URIEncoding:對URI的編碼方式. 優化建議選擇UTF-8
- useBodyEncodingForURI:是否采用指定的contentType而不是URIEncoding來編碼URI中的請求參數
- address:監聽的IP地址;默認為本機所有可用地址;
- maxThreads:最大並發連接數,默認為200;
- enableLookups:是否啟用DNS查詢功能;
- acceptCount:等待隊列的最大長度;
4、Engine組件
Engine:Servlet實例,即servlet引擎。
- 它檢查每個請求,然後根據請求發往指定host或context,並將處理後的結果返回給客戶端。
- 如果Tomcat被配置成為獨立服務器,默認引擎就是已經定義好的引擎。而如果Tomcat被配置為Apache Web服務器的提供Servlet功能的後端,默認引擎將被忽略,因為Web服務器自身就能確定將用戶請求發往何處。
- 其內部可以一個或多個host組件來定義站點; 通常需要通過defaultHost來定義默認的虛擬主機;
- Engine容器中可以包含Realm、Host、Listener和Valve子容器。
- 屬性
- defaultHost 默認主機名,用於標識將處理指向此服務器上主機名稱但未在此配置文件中配置的請求的主機。這個名字必須匹配其中一個嵌套的主機元素的名字屬性。
- name 此引擎的邏輯名稱,用於日誌和錯誤消息。 在同一服務器中使用多個服務元素時,每個引擎必須分配一個唯一的名稱。
5、host組件
Host:位於engine內部用於接收請求並進行相應處理的主機或虛擬主機,示例:
<Host name="www.a.com" appBase="/appdata/webapps"
unpackWARs="true" autoDeploy="true">
</Host>
- 屬性
- appBase:此Host的webapps的默認存放目錄,指存放非歸檔的web應用程序的目錄或歸檔的WAR文件目錄路徑;可以使用基於$CATALINA_BASE變量所定義的路徑的相對路徑;
- autoDeploy:在Tomcat處於運行狀態時,將某webapp放置於appBase所定義的目錄中時,是否自動將其部署至tomcat;
- unpackWars:在啟用此webapps時是否對WAR格式的歸檔文件先進行展開;默認為true;
6、Centext組件
Context在某些意義上類似於apache中的路徑別名,一個Context定義用於標識tomcat實例中的一個Web應用程序;示例:
<Host name="node1.magedu.com" appBase="/web/apps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="node1_access" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="/test" docBase="test" reloadable="">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="node1_test_access_" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
</Context>
</Host>
- 屬性
- docBase:相應的Web應用程序的存放位置;也可以使用相對路徑,起始路徑為此Context所屬Host中appBase定義的路徑;切記,docBase的路徑名不能與相應的Host中appBase中定義的路徑名有包含關系,比如,如果appBase為deploy,而docBase絕不能為deploy-bbs類的名字;
- path:相對於Web服務器根路徑而言的URI;如果為空“”,則表示為此webapp的根路徑;如果context定義在一個單獨的xml文件中,此屬性不需要定義,有可能是別名;
- reloadable:是否允許重新加載此context相關的Web應用程序的類;默認為false;
- privileged:是否使用Tomcat提供的manager servlet
7、valve
Valve類似於過濾器,它可以工作於Engine和Host/Context之間、Host和Context之間以及Context和Web應用程序的某資源之間。一個容器內可以建立多個Valve,而且Valve定義的次序也決定了它們生效的次序。示例:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
- valve存在多種類型
- 定義訪問日誌:org.apache.catalina.valves.AccessLogValve
- 定義訪問控制:org.apache.catalina.valves.RemoteAddrValve
示例:<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="172\.16\.100\.67" />
Tomcat基本安裝與組件簡介