本文在介紹關(guān)于Tomcat服務的安裝配置和使用的基礎上,重點探討了其具體步驟,步驟簡單易上手操作,文章內(nèi)容步步緊湊,希望大家根據(jù)這篇文章可以有所收獲。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:申請域名、網(wǎng)絡空間、營銷軟件、網(wǎng)站建設、播州網(wǎng)站維護、網(wǎng)站推廣。
jdk下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
1)解壓并配置環(huán)境變量
#cd /usr/local/src/
#tar xf jdk-8u231-linux-x64.tar.gz
#ln -s jdk1.8.0_231/ jdk
#cat > /etc/profile.d/jdk.sh << EOF
export JAVA_HOME=/usr/local/src/jdk
export CLASSPATH=.:\$JAVA_HOME/jre/lib/rt.jar:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
#source /etc/profile.d/jdk.sh
2)查看jdk版本
#java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
安裝包下載地址:https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.tar.gz
1)解壓并為Tomcat做軟連接
#cd /usr/local/src/
#tar xf apache-tomcat-8.5.42.tar.gz
#ln -s apache-tomcat-8.5.42 tomcat
2)啟動和查看Tomcat狀態(tài)
#cd tomcat/bin/
#./startup.sh
Using CATALINA_BASE: /usr/local/src/tomcat
Using CATALINA_HOME: /usr/local/src/tomcat
Using CATALINA_TMPDIR: /usr/local/src/tomcat/temp
Using JRE_HOME: /usr/local/src/jdk
Using CLASSPATH: /usr/local/src/tomcat/bin/bootstrap.jar:/usr/local/src/tomcat/bin/tomcat-juli.jar
Tomcat started.
#ps -ef |grep tomcat|grep -v grep
root 6377 1 2 21:19 pts/0 00:00:05 /usr/local/src/jdk/bin/java -Djava.util.logging.config.file=/usr/local/src/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/src/tomcat/bin/bootstrap.jar:/usr/local/src/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/src/tomcat -Dcatalina.home=/usr/local/src/tomcat -Djava.io.tmpdir=/usr/local/src/tomcat/temp org.apache.catalina.startup.Bootstrap start
上面的操作,啟動身份是root,如果要使用普通用戶啟動可以使用下面的這種方法
#useradd -r java
#chown -R java.java /usr/local/src/tomcat/
#su - java -c '/usr/local/src/tomcat/bin/startup.sh'
su: warning: cannot change directory to /home/java: No such file or directory
Using CATALINA_BASE: /usr/local/src/tomcat
Using CATALINA_HOME: /usr/local/src/tomcat
Using CATALINA_TMPDIR: /usr/local/src/tomcat/temp
Using JRE_HOME: /usr/local/src/jdk
Using CLASSPATH: /usr/local/src/tomcat/bin/bootstrap.jar:/usr/local/src/tomcat/bin/tomcat-juli.jar
Tomcat started.
#ps aux |grep tomcat|grep -v grep
java 6529 4.5 4.7 2995916 87744 ? Sl 21:25 0:02 /usr/local/src/jdk/bin/java -Djava.util.logging.config.file=/usr/local/src/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/src/tomcat/bin/bootstrap.jar:/usr/local/src/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/src/tomcat -Dcatalina.home=/usr/local/src/tomcat -Djava.io.tmpdir=/usr/local/src/tomcat/temp org.apache.catalina.startup.Bootstrap start
1.首先,需要為tomcat配置pid
#sed -i '/[ -z "\$CATALINA_BASE" ] && CATALINA_BASE="\$CATALINA_HOME"/a\CATALINA_PID="$CATALINA_BASE/tomcat.pid"' /usr/local/src/tomcat/bin/catalina.sh
配置后結(jié)果如下
141 # Copy CATALINA_BASE from CATALINA_HOME if not already set
142 [ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
143 CATALINA_PID="$CATALINA_BASE/tomcat.pid" # 設置pid。一定要加在CATALINA_BASE定義后面,要不然pid會生成到/下面
2.創(chuàng)建服務腳本
#cat > /usr/lib/systemd/system/tomcat.service << EOF
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/src/jdk"
PIDFile=/usr/local/src/tomcat/tomcat.pid
ExecStart=/usr/local/src/tomcat/bin/startup.sh
ExecReload=/bin/kill -s HUP \$MAINPID
ExecStop=/bin/kill -s QUIT \$MAINPID
PrivateTmp=true
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
EOF
3.啟動Tomcat并設置為開機自啟動,和查看狀態(tài)
#systemctl enable --now tomcat && systemctl status tomcat
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.
● tomcat.service - Apache Tomcat Web Application Container
Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-01-15 17:23:21 CST; 7ms ago
Process: 9615 ExecStart=/usr/local/src/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 9623 (java)
CGroup: /system.slice/tomcat.service
└─9623 /usr/local/src/jdk/bin/java -Djava.util.logging.config.file=/usr/local/src/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli....
Jan 15 17:23:21 CentOS7-01.localdomain systemd[1]: Starting Apache Tomcat Web Application Container...
Jan 15 17:23:21 CentOS7-01.localdomain startup.sh[9615]: Tomcat started.
Jan 15 17:23:21 CentOS7-01.localdomain systemd[1]: Started Apache Tomcat Web Application Container.
1.執(zhí)行systemctl start tomcat命令
#systemctl start tomcat
Job for tomcat.service failed because the control process exited with error code. See "systemctl status tomcat.service" and "journalctl -xe" for details.
#journalctl -xe
......
startup.sh[10247]: Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
startup.sh[10247]: At least one of these environment variable is needed to run this program
......
如果在tomcat的service文件中沒有設置jdk的環(huán)境變量,就會在啟動tomcat的時候報錯,產(chǎn)生以上的錯誤信息,為解決此問題,需要在service文件中添加如下配置
[Service]
Environment="JAVA_HOME=/usr/local/src/jdk"
注:就算在/etc/profile.d/目錄下單獨配置了jdk環(huán)境變量,對于使用systemd管理tomcat服務也是無效的,所有需要在tomcat的service文件中配置。
2.執(zhí)行systemctl stop tomcat命令
#systemctl stop tomcat
#systemctl status tomcat
● tomcat.service - Apache Tomcat Web Application Container
Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Wed 2020-01-15 19:17:27 CST; 2min 21s ago
Process: 10635 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/SUCCESS)
Process: 10574 ExecStart=/usr/local/src/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 10582 (code=exited, status=143)
Jan 15 19:17:19 CentOS7-01.localdomain systemd[1]: Starting Apache Tomcat Web Application Container...
Jan 15 19:17:19 CentOS7-01.localdomain startup.sh[10574]: Tomcat started.
Jan 15 19:17:19 CentOS7-01.localdomain systemd[1]: Started Apache Tomcat Web Application Container.
Jan 15 19:17:27 CentOS7-01.localdomain systemd[1]: Stopping Apache Tomcat Web Application Container...
Jan 15 19:17:27 CentOS7-01.localdomain systemd[1]: tomcat.service: main process exited, code=exited, status=143/n/a
Jan 15 19:17:27 CentOS7-01.localdomain systemd[1]: Stopped Apache Tomcat Web Application Container.
Jan 15 19:17:27 CentOS7-01.localdomain systemd[1]: Unit tomcat.service entered failed state.
Jan 15 19:17:27 CentOS7-01.localdomain systemd[1]: tomcat.service failed.
停止tomcat的時候并沒有報錯,但是查看tomcat的status時,發(fā)現(xiàn)tomcat服務進入了失敗的狀態(tài),為解決此問題,需要在tomcat的service中添加如下配置
[Service]
SuccessExitStatus=143
參考文檔:https://stackoverflow.com/questions/40331741/systemd-tomcat-service-failed-with-no-errors
目錄 | 說明 |
---|---|
bin | 服務啟動、停止等相關(guān) |
conf | 配置文件 |
lib | 庫目錄 |
logs | 日志目錄 |
webapps | 應用程序,應用部署目錄 |
work | jsp編譯后的結(jié)果文件 |
文件名 | 說明 |
---|---|
server.xml | 主配置文件 |
web.xml | 每個webapp只有“部署”后才能被訪問,它的部署方式通常由web.xml進行定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認部署相關(guān)的配置 |
context.xml | 每個webapp都可以專用的配置文件,它通常由專用的配置文件context.xml來定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認配置 |
tomcat-users.xml | 用戶認證的賬號和密碼文件 |
catalina.policy | 當使用-security選項啟動tomcat時,用于為tomcat設置安全策略 |
catalina.properties | Java屬性的定義文件,用于設定類加載器路徑,以及一些與JVM調(diào)優(yōu)相關(guān)參數(shù) |
logging.properties | 日志系統(tǒng)相關(guān)的配置。log4j |
類別 | 說明 |
---|---|
頂級組件 | Server,代表整個Tomcat容器 |
服務類組件 | Service,組織Engine和Connector,里面只能包含一個Engine |
連接器組件 | Connector,有HTTP、HTTPS、A JP協(xié)議的連接器 |
容器類 | Engine、Host、Context都是容器類組件,可以嵌入其它組件,內(nèi)部配置如何運行應用程序。 |
內(nèi)嵌類 | 可以內(nèi)嵌到其他組件內(nèi),valve、logger、realm、loader、manager等。以logger舉例,在不同容器組件內(nèi)定義。 |
集群類組件 | listener、cluster |
由上述組件就構(gòu)成了Tomcat,如下圖
名稱 | 說明 |
---|---|
Server | Tomcat運行的進程實例 |
Connector | 負責客戶端的HTTP、HTTPS、A JP等協(xié)議的連接。一個Connector只屬于某一個Engine |
Service | 用來組織Engine和Connector的關(guān)系 |
Engine | 響應并處理用戶請求。一個引擎上可以綁定多個Connector |
Host | 虛擬主機 |
Context | 應用的上下文,配置路徑映射path => directory |
AJP(Apache Jserv protocol) | 是一種基于TCP的二進制通訊協(xié)議。 |
假設來自客戶的請求為:http://localhost:8080/test/index.jsp
1)瀏覽器端的請求被發(fā)送到服務端端口8080,Tomcat進程監(jiān)聽在此端口上。通過偵聽的HTTP/1.1 Connector獲得此請求。
2)Connector把該請求交給它所在的Service的Engine來處理,并等待Engine的響應
3)Engine獲得請求localhost:8080/test/index.jsp,匹配它所有虛擬主機Host
4)Engine匹配到名為localhost的Host。即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的默認主機
5)localhost Host獲得請求/test/index.jsp,匹配它所擁有的所有Context
6)Host匹配到路徑為/test的Context
7)path=/test的Context獲得請求/index.jsp,在它的mapping table中尋找對應的servlet
8)Context匹配到URL PATTERN為*.jsp 的servlet,對應于JspServlet類構(gòu)造HttpServletRequest對象和HttpServletResponse對象,作為參數(shù)調(diào)用JspServlet的doGet或doPost方法。
9)Context把執(zhí)行完了之后的HttpServletResponse對象返回給Host
10)Host把HttpServletResponse對象返回給Engine
11)Engine把HttpServletResponse對象返回給Connector
12)Connector把HttpServletResponse對象返回給瀏覽器端
Tomcat中默認網(wǎng)站根目錄是CATALINA_BASE/webapps/,在Tomcat的webapps目錄中,有個非常特殊的目錄ROOT,它就是網(wǎng)站默認根目錄。
每一個虛擬主機的目錄都可以使用appBase配置自己的站點目錄,里面都可以使用ROOT目錄作為主站目錄。
主頁配置:一般指定為index.jsp或index.html
WEB-INF/:當前WebApp的私有資源路徑,通常存儲當前應用使用的web.xml和context.xml配置文件
META-INF/:類似于WEB-INF
classes/:類文件,當前webapp需要的類
lib/:當前應用依賴的jar包
默認情況下,訪問Tomcat的主頁,返回的內(nèi)容是CATALINA_BASE/webapps/ROOT/index.jsp文件提供的,這里將在CATALINA_BASE/webapps/ROOT/下添加一個index.html文件,內(nèi)容如下
#cat /usr/local/src/tomcat/webapps/ROOT/index.html
tomcat index.html
添加完該文件內(nèi)容后再訪問Tomcat默認頁,返回結(jié)果如下
#curl localhost:8080
tomcat index.html
產(chǎn)生上面結(jié)果的原因是CATALINA_BASE/conf/web.xml文件中的<welcome-file-list>標簽內(nèi)容(默認頁)所導致的,復制到CATALINA_BASE/webapps/ROOT/WEB-INF/web.xml中,如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
metadata-complete="true">
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
配置修改后,再次訪問首頁,結(jié)果如下圖
從上面的驗證結(jié)果可以發(fā)現(xiàn),Tomcat的默認頁訪問順序是從上往下依次匹配的
.war:WebApp打包
.jar:EJB類打包文件
.rar:資源適配器類打包文件
.ear:企業(yè)級WebApp打包
傳統(tǒng)應用開發(fā)測試后,通常打包為war格式,這種文件部署到了Tomcat的webapps下,還可以自動展開。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body>
后面的內(nèi)容是服務器端動態(tài)生成字符串,最后拼接在一起
<%
out.println("hello jsp");
%>
<br>
<%=request.getRequestURL()%>
</body>
</html>
把test.jsp放到ROOT下去,然后訪問http://YourIP:8080/test.jsp
立即可以看到,這是通過路徑映射找到相應的test.jsp后,轉(zhuǎn)換成test_jsp.java,再編譯成test_jsp.class
CATALINA_BASE/work/Catalina/localhost/ROOT/org/apache/jsp/ 目錄下有轉(zhuǎn)換后的文件
模擬部署一個應用
常見開發(fā)項目目錄組成結(jié)構(gòu)
#mkdir projects/myapp/{WEB-INF,classes,lib} -p
#tree projects/
projects/
└── myapp
├── classes
├── lib
└── WEB-INF
4 directories, 0 files
常見應用首頁,內(nèi)容就用上面的test.jsp
#cp webapps/ROOT/test.jsp projects/myapp/index.jsp
復制項目目錄到webapps目錄下去
#cp -r projects/myapp/ /usr/local/src/tomcat/webapps/
訪問測試http://YourIP:8080/myapp
CATALINA_BASE/conf/server.xml
<Server port="8005" shutdown="SHUTDOWN">
該端口是Tomcat的管理端口,默認監(jiān)聽在127.0.0.1上。SHUTDOWN這個字符串接收到后就會關(guān)閉此Server。
#ss -nlt|grep 8080
LISTEN 0 100 [::]:8080 [::]:*
#telnet 127.0.0.1 8005
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SHUTDOWN
Connection closed by foreign host.
這個管理功能建議禁用,將SHUTDOWN改為一串猜不出來的字符串,例如
<Server port="8005" shutdown="4dbbcd8bf182d05bed2b5ef419397b0d">
CATALINA_BASE/conf/tomcat-users.xml
如果想要使用Manager App,需要一個角色manager-gui,在CATALINA_BASE/conf/tomcat-users.xml配置文件中添加,如下
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<role rolename="manager-gui"/>
<user username="test" password="test" roles="manager-gui"/>
</tomcat-users>
Tomcat啟動加載后,這些內(nèi)容是常駐內(nèi)存的。如果配置了新的用戶,需要重啟Tomcat。訪問Manager App
訪問manager的時候告訴403,提示中告訴去manager的context.xml中修改,文件路徑CATALINA_BASE/webapps/manager/META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
從配置文件中可以看到allow后面的正則表達式寫的是只允許本地訪問,但我當前的地址是192.168段的,所有需要添加正則表達式以支持訪問,配置后如下
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192\.168\.\d+\.\d+"
重啟后再次訪問測試
<Service name="Catalina">
一般情況下,一個Server實例配置一個Service,name屬性相當于該Service的ID。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
redirectPort,如果訪問HTTPS協(xié)議,自動轉(zhuǎn)向這個連接器。但大多數(shù)時候,Tomcat并不會開啟HTTPS,因為Tomcat往往部署在內(nèi)部,HTTPS性能較差。
<Engine name="Catalina" defaultHost="localhost">
defaultHost指向內(nèi)部定義某虛擬主機。缺省虛擬主機可以改動,默認localhost。
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
配置說明:
name #必須是主機名,用主機名來匹配。
appBase #當前主機的網(wǎng)頁根目錄,是相對于CATALINA_HOME,也可以使用絕對路徑
unpackWARs #是否自動解壓war格式
autoDeploy #熱部署,自動加載并運行應用
嘗試再配置一個虛擬主機,并將myapp部署到/data/webapps目錄下
<Host name="www.hechunping.com" appBase="/data/webapps/" unpackWARs="true"
autoDeploy="false" />
#mkdir /data/webapps -p
#cp -r projects/myapp/ /data/webapps/ROOT
剛才在虛擬主機中主機名定義www.hechunping.com,所有需要在宿主機的hosts文件中添加域名解析
訪問測試
<Context path="/test" docBase="/data/test" reloadable="false" />
配置說明:
path #指的是訪問的路徑
docBase #可以是絕對路徑,也可以是相對路徑(相對于Host的appBase)
reloadable #true表示如果WEB-INF/classes或META-INF/lib目錄下.class文件有改動,就會將WEB應用重新加載,性能消耗很大。生產(chǎn)環(huán)境中,會使用false來禁用。
將projects/myapp下的項目文件復制到/data/下
#cp -r projects/myapp/ /data/myapp_v1
#cd /data/
#ln -s myapp_v1/ test
在Tomcat的主配置文件server.xml中添加如下內(nèi)容
<Host name="www.hechunping.com" appBase="/data/webapps" unpackWARs="true" autoDeploy="true">
<Context path="/test" docBase="/data/test" reloadable="false" />
</Host>
訪問測試http://www.hechunping.com:8080/test/
注意:這里特別使用了軟鏈接,原因就是以后版本升級,需要將軟鏈接指向myapp_v2,重啟Tomcat。如果新版上線后,出現(xiàn)問題,重新修改軟鏈接到上一個版本的目錄,并重啟,就可以實現(xiàn)回滾。
關(guān)于Tomcat服務的安裝配置和使用就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
文章名稱:Tomcat服務的安裝配置和使用
文章源于:http://chinadenli.net/article16/ppgpdg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供服務器托管、、定制開發(fā)、建站公司、動態(tài)網(wǎng)站、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)