Tomcat是Apache 軟件基金會(huì)(Apache Software Foundation)的Jakarta 項(xiàng)目中的一個(gè)核心項(xiàng)目鸭津,由Apache说铃、Sun 和其他一些公司及個(gè)人共同開發(fā)而成榕吼。因?yàn)門omcat 技術(shù)先進(jìn)璃搜、性能穩(wěn)定,而且免費(fèi)腕窥,因而深受Java 愛好者的喜愛并得到了部分軟件開發(fā)商的認(rèn)可怒坯,成為目前比較流行的Web 應(yīng)用服務(wù)器炫狱。Tomcat開放源代碼,屬于輕量級(jí)應(yīng)用服務(wù)器敬肚,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場(chǎng)合下被普遍使用毕荐,是開發(fā)和調(diào)試JSP 程序的首選。
實(shí)驗(yàn)Linux平臺(tái):本次實(shí)驗(yàn)使用紅帽系的CentOS 7.3
安裝tomcat需要先安裝Java艳馒,下面安裝Java編譯環(huán)境JDK憎亚。
JDK有兩個(gè)版本,一個(gè)是Oracle的弄慰,另外一個(gè)是OpenJDK開源社區(qū)版的第美。這兩個(gè)版本安裝那個(gè)都行,在紅帽系列的Linux系統(tǒng)Base倉(cāng)庫(kù)中集成了OpenJDK的rpm包陆爽。我在下面的實(shí)驗(yàn)中就使用Base倉(cāng)庫(kù)自帶的OpenJDK進(jìn)行安裝什往。
OracleJDK官網(wǎng):http://www.oracle.com/technetwork/java/index.html
OpenJDK官網(wǎng) :http://openjdk.java.net/
OpenJDK:
java-VERSION-openjdk :主程序包
java-VERSION-openjdk-headless:運(yùn)行環(huán)境。
java-VERSION-openjdk-devel:開發(fā)包
安裝相應(yīng)版本的rpm包,在CentOS 7.3的Base庫(kù)中有三個(gè)版本慌闭,1.8别威、1.7、1.6驴剔。
[root@centos7.3 ~]#yum list all java* #這條命令可以查看所有的yum倉(cāng)庫(kù)中的Java包
[root@CentOS7.3 ~]#yum -y install java-1.8.0-openjdk-devel #安裝這個(gè)開發(fā)包會(huì)把主程序包作為依賴包一并安裝
注意:如果是去官網(wǎng)下載的包在安裝完成后省古,要配置JAVA_HOME環(huán)境變量,指向java的安裝路徑丧失;
OpenJDK:
JAVA_HOME=/usr
Oracle JDK:
JAVA_HOME=/usr/java/jdk_VERSION
注意:多版本并存時(shí)豺妓,可使用 alternatives命令設(shè)定默認(rèn)使用的版本;
查看當(dāng)前的java版本:
java -version
安裝Tomcat
tomcat官網(wǎng)提供rpm包和二進(jìn)制格式的,二進(jìn)制格式的直接解壓到指定路徑就可以是使用琳拭。
官網(wǎng):http://tomcat.apache.org/index.html
使用Base倉(cāng)庫(kù)
[root@CentOS7.3 ~]# yum -y install tomcat tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp
二進(jìn)制
[root@CentOS7.3 ~]# tar xf apache-tomcat-VERSION.tar.gz -C /usr/local/
[root@CentOS7.3 ~]# cd /usr/local
[root@CentOS7.3 ~]# ln -sv apache-tomcat-VERSION tomcat
二進(jìn)制安裝后需要指定一下程序路徑
vim /etc/profile.d/tomcat.sh
export PATH=$PATH:/usr/local/tomcat/bin
tomcat程序環(huán)境:
tomcat的目錄結(jié)構(gòu)
bin :腳本训堆,及啟動(dòng)時(shí)用到的類;
conf:配置文件目錄白嘁;
lib :庫(kù)文件坑鱼,Java類庫(kù),jar权薯;
logs:日志文件目錄姑躲;
temp:臨時(shí)文件目錄睡扬;
webapps:webapp的默認(rèn)目錄盟蚣;
work:工作目錄,主要存放編譯后的字節(jié)碼文件卖怜;
使用二進(jìn)制方式安裝屎开,使用catalina.sh 腳本對(duì)tomcat服務(wù)進(jìn)行管理
catalina.sh
debug Start Catalina in a debugger
debug -security Debug Catalina with a security manager
jpda start Start Catalina under JPDA debugger
run Start Catalina in the current window
run -security Start in the current window with security manager 前臺(tái)啟動(dòng)
start Start Catalina in a separate window
start -security Start in a separate window with security manager
stop Stop Catalina, waiting up to 5 seconds for the process to end
stop n Stop Catalina, waiting up to n seconds for the process to end
stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running
stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running
configtest Run a basic syntax check on server.xml - check exit code for result
version What version of tomcat are you running
注:使用 -security 表示調(diào)用conf路徑下的catalina.policy安全策略文件。
rpm包安裝的程序環(huán)境:
### 配置文件目錄:/etc/tomcat
主配置文件:server.xml
webapps存放位置:/var/lib/tomcat/webapps/
Unit File:tomcat.service
環(huán)境配置文件:/etc/sysconfig/tomcat
tomcat的配置目錄下的文件
server.xml :主配置文件马靠;
web.xml :每個(gè)webapp只有“部署”后才能被訪問奄抽,它的部署方式通常由web.xml進(jìn)行定義,其存放位置為WEB-INF/目錄中甩鳄;此文件為所有的webapps提供默認(rèn)部署相關(guān)的配置逞度;如果程序的WEB_INF目錄中沒有定義wem.xml就會(huì)繼承這個(gè)文件的配置。
context.xml :每個(gè)webapp都可以使用的配置文件妙啃,它通常由專用的配置文件context.xml來定義档泽,其存放位置為WEB-INF/目錄中 ;此文件為所有的webapps提供默認(rèn)配置揖赴;主要用來定義部署webapp時(shí)的背景信息馆匿。如果程序的WEB_INF目錄中沒有定義wem.xml就會(huì)繼承這個(gè)文件的配置。
tomcat-users.xml :用戶認(rèn)證的賬號(hào)和密碼文件燥滑;權(quán)限配置通過角色(role)實(shí)現(xiàn)渐北,將用戶添加在角色上就會(huì)獲取這個(gè)角色的權(quán)限,此文件在tomcat啟動(dòng)時(shí)被裝入內(nèi)存铭拧,如果修改必須重啟才能生效赃蛛。
catalina.policy :當(dāng)使用-security選項(xiàng)啟動(dòng)tomcat時(shí),用于為tomcat設(shè)置安全策略搀菩;
catalina.properties :Java屬性的定義文件呕臂,用于設(shè)定類加載器路徑,以及一些與JVM調(diào)優(yōu)相關(guān)參數(shù)秕磷;
logging.properties :日志系統(tǒng)相關(guān)的配置诵闭;
log4j :java自帶的日志管理系統(tǒng)
server.xml(主配置文件)
<Server> 服務(wù)
<Listener > 偵聽器
<GlobalNameingResouces> 全局配置
<Service>容器
<connector/> 連接器
<connector/>
...
<Engine> 引擎
<Host> 主機(jī)
<Context/>
<Context/>
...
<Valve> 過濾器
</Host>
<Host>
...
</Host>
...
</Engine>
</Service>
</Server>
頂級(jí)組件 :Server
服務(wù)類組件:Service
連接器組件:http, https, ajp(apache jserv protocol)
容器類 :Engine, Host, Context,可以在里面部署應(yīng)用程序
被嵌套類 :valve, logger, realm, loader, manager, ...
集群類組件:listener, cluster, ...
一個(gè)server中可以有多個(gè)連接器(HTTP、HTTPS疏尿、AJP)瘟芝,在server有多個(gè)引擎,一個(gè)連接器只能連接到一個(gè)引擎褥琐,但是一個(gè)引擎卻可以接受多個(gè)連接器的請(qǐng)求锌俱,在server和引擎中間有一層service(服務(wù)),作用是把連接器和引擎連接對(duì)應(yīng)敌呈。
在引擎中有多個(gè)host的贸宏,host是處理請(qǐng)求提供服務(wù),在一個(gè)host中可以部署多個(gè)程序磕洪,通過context實(shí)現(xiàn)吭练。
部署(deploy)webapp的相關(guān)操作:
deploy:將webapp的源文件放置于目標(biāo)目錄(網(wǎng)頁程序文件存放目錄),配置tomcat服務(wù)器能夠基于web.xml和context.xml文件中定義的路徑來訪問此webapp析显;將其特有的類和依賴的類通過class loader裝載至JVM鲫咽;
部署有兩種方式:在server.xml中定義
自動(dòng)部署:auto deploy
-
手動(dòng)部署:手動(dòng)部署分為冷部署和熱部署
a. 冷部署:把webapp復(fù)制到指定的位置,而后才啟動(dòng)tomcat谷异;
b. 熱部署:在不停止tomcat的前提下進(jìn)行部署分尸;熱部署工具:manager、ant腳本歹嘹、tcd(tomcat client deployer)等
部署一臺(tái)host主機(jī)
vim /etc/tomcat/server.xml
host在engine中定義
<Host></Host>:主機(jī)配置需要寫在Host標(biāo)簽內(nèi)
name:主機(jī)名
appBase:此Host的webapps的默認(rèn)存放目錄箩绍,指存放非歸檔的web應(yīng)用程序的目錄或歸檔的WAR文件目錄路徑;可以使用基于$CATALINA_BASE變量所定義的路徑的相對(duì)路徑尺上;
unpackWARs:是否自動(dòng)展開host根目錄下的war格式的歸檔文件材蛛。
autoDeploy:在Tomcat處于運(yùn)行狀態(tài)時(shí),將某webapp放置于appBase所定義的目錄中時(shí)尖昏,是否自動(dòng)將其部署至tomcat仰税;
webapp歸檔格式:Java打包格式
war:webapp的歸檔文件系任;這個(gè)文件放在站點(diǎn)目錄下自動(dòng)展開乾闰。
.jar:EJB的類打包文件(類庫(kù));
.rar:資源適配器類打包文件彼哼;
.ear:企業(yè)級(jí)webapp迹淌;
JSP WebAPP的組織結(jié)構(gòu):
/: webapps的根目錄
index.jsp:主頁文件河绽; ...還有很多的其他.jsp文件。
WEB-INF/ :當(dāng)前webapp的私有資源路徑唉窃,通常用于存儲(chǔ)當(dāng)前webapp的web.xml和context.xml配置文件耙饰;不能被用戶訪問,被tomcat禁止通過web訪問纹份。
META-INF/:類似于WEB-INF/苟跪;
classes/ :類文件廷痘,當(dāng)前webapp所提供的類;
lib/ :類文件件已,當(dāng)前webapp所提供的類笋额,被打包為jar格式;
手動(dòng)提供一測(cè)試類應(yīng)用篷扩,并冷部署:
[root@CentOS7.3 ~]#mkdir -p /app/web/ROOT/{classes,lib,WEB-INF}
[root@CentOS7.3 ~]#cd /app/web/ROOT/ #主機(jī)的默認(rèn)應(yīng)用的配置文件需要放在ROOT目錄下
[root@CentOS7.3 ROOT]#vim index.jsp #編輯一個(gè)測(cè)試頁
<%@ page language="java" %>
<%@ page import="java.util.*" %> #導(dǎo)入類庫(kù)
<html>
<head>
<title>Test Page</title>
</head>
<body>
<% out.println("hello world");
%>
</body>
</html>
tomcat的網(wǎng)頁文件格式是.jsp結(jié)尾的
JSP: Java Server Page
類庫(kù):
<html>
<title>TITLE</title>
<body>
<h1>...</h1>
<%
... java code...
%>
</body>
</html>
執(zhí)行過程:.jsp -->jasper--> .java --> javac --> .class --> jvm
注:編譯過程中產(chǎn)生的java文件和class文件保存在toncat/work/Catalina/主機(jī)名/應(yīng)用名/org/apache/jsp目錄下
注意:基于jasper將靜態(tài)輸出的數(shù)據(jù)轉(zhuǎn)為java代碼進(jìn)行輸出兄猩,結(jié)果為servlet規(guī)范的代碼;
將默認(rèn)的主機(jī)改為test.com
測(cè)試
[root@CentOS7.3 ROOT]#systemctl start tomcat #啟動(dòng)tomcat
[root@CentOS7.3 ROOT]#ss -ntl #查看監(jiān)聽端口
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 :::8080 :::* #tomcat的http連接器默認(rèn)使用8080端口
LISTEN 0 128 :::22 :::*
LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* #tomcat的管理端口鉴未,默認(rèn)使用127.0.0.1的8005端口
LISTEN 0 100 :::8009 :::* #tomcat的jap連接器枢冤,默認(rèn)使用的8009端口
熱部署主機(jī)和應(yīng)用
將默認(rèn)主機(jī)修改回localhost
host manager
點(diǎn)擊取消會(huì)進(jìn)入如下頁面
編輯用戶配置文件/etc/tomcat/tomcat-users.xml
添加如下內(nèi)容。需要定義在<tomcat-users></tomcat-users>標(biāo)簽內(nèi)铜秆,
<role rolename="admin-gui"/> #定義用戶角色
<user username="tomcat" password="s3cret" roles="admin-gui"/> 配置用戶和密碼
默認(rèn)定義的用戶角色
admin-gui 允許通過web訪問host manager
admin-script 允許訪問文本(命令行)接口
重啟tomcat淹真,刷新頁面,輸入用戶名密碼
配置manager
添加manager用戶羽峰,在tomcat-users.xml文件中
<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>
manager用戶角色:
manager-gui 允許用戶訪問基于圖形界面的manager和status
manager-script 允許用戶通過命令行接口訪問manager和status
manager-jmx 允許用戶通過jmx(java管理擴(kuò)展)代理訪問status頁面趟咆,jmx可以用來接口tomcat的信息
manager-status 允許用戶查看圖形和命令行接口下status信息
也可以再給原來的用戶添加一個(gè)角色添瓷,如下圖梅屉。
重啟tomcat進(jìn)入manager管理頁面
在這個(gè)頁面中,可以對(duì)默認(rèn)主機(jī)的應(yīng)用進(jìn)行管理
undeploy:反部署鳞贷、拆除坯汤,停止webapp,并從tomcat實(shí)例上卸載webapp搀愧;通過manager管理
start :?jiǎn)?dòng)處于停止?fàn)顟B(tài)的webapp惰聂;
stop :停止webapp,不再向用戶提供服務(wù)咱筛;其類依然在jvm上搓幌;
redeploy:重新部署;
expire sessions:設(shè)置會(huì)話的過期時(shí)間
添加應(yīng)用