- 一般意義上的web服務器接受請求後,只是單純地響應靜態資源,如html文件,圖片文件等,不能在後端進行必定的處理操做。
- Tomcat是Apache下的一個子項目,它具有web服務器的全部功能,不只能夠監聽接受請求並響應靜態資源,並且能夠在後端運行特定規範的java代碼servlet,同時將執行的結果以html代碼的形式寫回客戶端。
- Tomcat由一系列的組件構成,其中核心的組件有三個:
- web容器——完成web服務器的功能。
- servlet容器——名字爲catalina,用於處理servlet代碼。
- jsp容器——用於將jsp動態網頁翻譯成servlet代碼。
yum倉庫安裝html
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-x64java
[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/*
- bin:腳本,及啓動時用到的類;
- conf:配置文件目錄;
- lib:庫文件,Java類庫,jar;
- logs:日誌文件目錄;
- temp:臨時文件目錄;
- webapps:webapp的默認目錄;
- work:工做目錄,存放編譯後的字節碼文件;
- 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:日誌系統相關的配置;
- /: webapps的根目錄
- index.jsp, index.html:主頁;
- WEB-INF/:當前webapp的私有資源路徑;一般用於存儲當前webapp的web.xml和context.xml配置文件;
- META-INF/:相似於WEB-INF/;
- classes/:類文件,當前webapp所提供的類;
- lib/:類文件,當前webapp所提供的類,被打包爲jar格式;
Tomcat的核心組件:server.xmlnode
<Server> <Service> <connector/> <connector/> .... <Engine> <Host> <Context/> <Context/> ... </Host> <Host> ... </Host> ... </Engine> </Service> </Server>
- 頂級組件:Server
- 服務類組件:Service
- 鏈接器組件:http, https, ajp(apache jserv protocol)
- 容器類:Engine, Host, Context
- 被嵌套類:valve, logger, realm, loader, manager, ...
- 集羣類組件:listener, cluster, ...
Server:表明tomcat instance,即表現出的一個java進程;監聽在8005端口,只接收「SHUTDOWN」。各server監聽的端口不能相同,所以,在同一物理主機啓動多個實例時,須要修改其監聽端口爲不一樣的端口;
port="-1",
shutdown="RANDOM_CHARCTER"linux
Service:用於實現將一個或多個connector組件關聯至一個engine組件,每一個鏈接器經過一個特定的端口和協議接收入站請求交將其轉發相當聯的引擎進行處理;web
Connector:負責接收請求至Servlet容器內的Web應用程序,鏈接客戶端和服務器分配的HTTP協議的8080端口,能夠根據本身需求改變端口,一個引擎能夠配置多個鏈接器,但每一個鏈接器必須使用不一樣端口,默認鏈接器是基於HTTP/1.1的Coyote。同時Tomcat也支持HTTP/1.1 , HTTP/2.0 , AJP 協議;(http https ajp)apache
- port="8080" 指定端口
- protocol="HTTP/1.1" 指定協議
- connectionTimeout="20000" 請求鏈接超時
- URIEncoding:對URI的編碼方式. 優化建議選擇UTF-8
- useBodyEncodingForURI:是否採用指定的contentType而不是URIEncoding來編碼URI中的請求參數
- address:監聽的IP地址;默認爲本機全部可用地址;
- maxThreads:最大併發鏈接數,默認爲200;
- enableLookups:是否啓用DNS查詢功能;
- acceptCount:等待隊列的最大長度;
Engine:Servlet實例,即servlet引擎。vim
- 它檢查每一個請求,而後根據請求發往指定host或context,並將處理後的結果返回給客戶端。
- 若是Tomcat被配置成爲獨立服務器,默認引擎就是已經定義好的引擎。而若是Tomcat被配置爲Apache Web服務器的提供Servlet功能的後端,默認引擎將被忽略,由於Web服務器自身就能肯定將用戶請求發往何處。
- 其內部能夠一個或多個host組件來定義站點; 一般須要經過defaultHost來定義默認的虛擬主機;
- Engine容器中能夠包含Realm、Host、Listener和Valve子容器。
- defaultHost 默認主機名,用於標識將處理指向此服務器上主機名稱但未在此配置文件中配置的請求的主機。這個名字必須匹配其中一個嵌套的主機元素的名字屬性。
- name 此引擎的邏輯名稱,用於日誌和錯誤消息。 在同一服務器中使用多個服務元素時,每一個引擎必須分配一個惟一的名稱。
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;
Context在某些意義上相似於apache中的路徑別名,一個Context定義用於標識tomcat實例中的一個Web應用程序;示例:tomcat
<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
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" />
- 定義訪問日誌:org.apache.catalina.valves.AccessLogValve
- 定義訪問控制:org.apache.catalina.valves.RemoteAddrValve
示例:<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="172\.16\.100\.67" />