Linux Tomcat介紹
Linux Tomcat介紹
背景:
之前做過javaweb開發,知道windows的eclipse開發工具裏自帶Tomcat服務來運行JSP頁面和Serverlt,供開發者調試程序,不過在實際生產環境應該如何使用tomcat服務是個問題,在學習完Linux的Tomcat後,將學習到的記錄與此。
什麽是Tomcat:
Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和並發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。
安裝Tomcat:
在安裝Tomcat之前需要知道,Tomcat本身就是用java語言編寫的,所以要想使用Tomcat必須要安裝好Java環境,包括java-VERSION-openjdk,java-VERSION-openjdk-headless,java-VERSION-openjdk-devel。最簡單的方式是使用yum安裝,這樣他就可以將這些相互依賴的包一並安裝上。
第一步:
安裝java環境:yum install java
第二步:
安裝Tomcat:yum install tomcat
安裝相關管理工具:yum install tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp
這樣Tomcat就安裝好了。為了方便我們使用Tomcat,我們需要將配置下環境變量。
創建環境配置文件:/etc/profile.d/tomcat.sh
寫入:export PATH=/usr/local/tomcat/bin:$PATH;
保存退出後讓配置文件生效:. /etc/profile.d/tomcat.sh
Tomcat介紹:
下圖是Tomcat的目錄結構:
目錄結構介紹:
bin:腳本,及啟動時用到的類;
conf:配置文件目錄;
lib:庫文件,Java類庫,jar;
logs:日誌文件目錄;
temp:臨時文件目錄;
work:工作目錄,存放編譯後的字節碼文件;
這時就可以開啟Tomcat服務了,開啟服務後會有三個監聽端口:
8080:正常服務監聽端口,也是我們正常訪問使用的端口,走的是HTTP/1.1協議;
8009:走的是AJP/1.3協議;
8005:只接收SHUTDOWN,只監聽127.0.0.1地址,即本機訪問;
Tomcat的配置文件構成:
server.xml:主配置文件;
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:日誌系統相關的配置;
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, ...
tomcat的常用組件配置:
Server:代表tomcat instance,即表現出的一個java進程;監聽在8005端口,只接收“SHUTDOWN”。各server監聽的端口不能相同,因此,在同一物理主機啟動多個實例時,需要修改其監聽端口為不同的端口;
Service:用於實現將一個或多個connector組件關聯至一個engine組件;
Connector組件:
負責接收請求,常見的有三類http/https/ajp;
進入tomcat的請求可分為兩類:
(1) standalone : 請求來自於客戶端瀏覽器;
(2) 由其它的web server反代:來自前端的反代服務器;
nginx --> http connector --> tomcat
httpd(proxy_http_module) --> http connector --> tomcat
httpd(proxy_ajp_module) --> ajp connector --> tomcat
httpd(mod_jk) --> ajp connector --> tomcat
屬性:
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
address:監聽的IP地址;默認為本機所有可用地址;
maxThreads:最大並發連接數,默認為200;
enableLookups:是否啟用DNS查詢功能;
acceptCount:等待隊列的最大長度;
Engine組件:Servlet實例,即servlet引擎,其內部可以一個或多個host組件來定義站點; 通常需要通過defaultHost來定義默認的虛擬主機;
屬性:
name=名稱
defaultHost="localhost" //默認主機名
Host組件:位於engine內部用於接收請求並進行相應處理的主機或虛擬主機,示例:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
常用屬性說明:
(1) appBase:此Host的webapps的默認存放目錄,指存放非歸檔的web應用程序的目錄或歸檔的WAR文件目錄路徑;可以使用基於$CATALINA_BASE變量所定義的路徑的相對路徑;
(2) autoDeploy:在Tomcat處於運行狀態時,將某webapp放置於appBase所定義的目錄中時,是否自動將其部署至tomcat;
示例:
<Host name="tc1.magedu.com" appBase="/appdata/webapps" unpackWARs="true" autoDeploy="true"> </Host>
示例:
<Context path="/PATH" docBase="/PATH/TO/SOMEDIR" reloadable=""/>
綜合示例:
<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>
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"/>
JSP WebAPP的組織結構:
/usr/share/tomcat/webapps/ROOT: webapps的根目錄
index.jsp:主頁;
...
WEB-INF/:當前webapp的私有資源路徑;通常用於存儲當前webapp的web.xml和context.xml配置文件;
META-INF/:類似於WEB-INF/;
classes/:類文件,當前webapp所提供的類;
lib/:類文件,當前webapp所提供的類,被打包為jar格式;
部署(deploy)webapp的相關操作:
deploy:將webapp的源文件放置於目標目錄(網頁程序文件存放目錄),配置tomcat服務器能夠基於web.xml和context.xml文件中定義的路徑來訪問此webapp;將其特有的類和依賴的類通過class loader裝載至JVM;
部署有兩種方式:
自動部署:auto deploy;
手動部署:
冷部署:把webapp復制到指定的位置,而後才啟動tomcat;
熱部署:在不停止tomcat的前提下進行部署;
部署工具:manager、ant腳本、tcd(tomcat client deployer)等;
undeploy:拆除(反部署),停止webapp,並從tomcat實例上卸載webapp;
start:啟動處於停止狀態的webapp;
stop:停止webapp,不再向用戶提供服務;其類依然在jvm上;
redeploy:重新部署;
Linux Tomcat介紹