什么是Tomcat
Tomcat是由Apache軟件基金會下屬的Jakarta項目開發的一個Servlet容器,按照Sun Microsystems提供的技術規范,實現了對Servlet和JavaServer Page(JSP)的支持,並提供了作為Web服務器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat閥等。由於Tomcat本身也內含了一個HTTP服務器,它也可以被視作一個單獨的Web服務器。但是,不能將Tomcat和Apache HTTP服務器混淆,Apache HTTP服務器是一個用C語言實現的HTTPWeb服務器;這兩個HTTP web server不是捆綁在一起的。Apache Tomcat包含了一個配置管理工具,也可以通過編輯XML格式的配置文件來進行配置。
Tomcat同類產品
- Resin 服務器
Resin是Caucho公司的產品,是一個非常流行的支持Servlet和JSP的服務器,速度非常快。Resin本身包含了一個支持HTML的Web服務器,這使它不僅可以顯示動態內容,而且顯示靜態內容的能力也毫不遜色,因此許多網站都是使用Resin服務器構建。
- Jetty 服務器
Jetty是一個純粹的基於Java的網頁服務器和Java Servlet容器。盡管網頁服務器通常用來為人們呈現文檔,但是Jetty通常在較大的軟件框架中用於計算機與計算機之間的通信。Jetty作為Eclipse基金會的一部分,是一個自由和開源項目。
- JBoss服務器
JBoss是一個種遵從JavaEE規范的、開放源代碼的、純Java的EJB服務器,對於J2EE有很好的支持。JBoss采用JML API實現軟件模塊的集成與管理,其核心服務又是提供EJB服務器,不包含Servlet和JSP的Web容器,不過它可以和Tomcat完美結合。
- WebSphere 服務器
WebSphere是IBM公司的產品,可進一步細分為 WebSphere Performance Pack、Cache Manager 和WebSphere Application Server等系列,其中WebSphere Application Server 是基於Java 的應用環境,可以運行於 Sun Solaris、Windows NT 等多種操作系統平台,用於建立、部署和管理Internet和Intranet Web應用程序。
- WebLogic 服務器
WebLogic 是BEA公司的產品,可進一步細分為 WebLogic Server、WebLogic Enterprise 和 WebLogic Portal 等系列,其中 WebLogic Server 的功能特別強大。WebLogic 支持企業級的、多層次的和完全分布式的Web應用,並且服務器的配置簡單、界面友好。對於那些正在尋求能夠提供Java平台所擁有的一切應用服務器的用戶來說,WebLogic是一個十分理想的選擇。
Tomcat安裝之yum
先來搜索一下有關Tomcat的軟件包
# yum list |grep tomcat
jglobus-ssl-proxies-tomcat.noarch 2.1.0-6.el7 epel
tomcat.noarch 7.0.76-3.el7_4 updates
tomcat-admin-webapps.noarch 7.0.76-3.el7_4 updates
tomcat-docs-webapp.noarch 7.0.76-3.el7_4 updates
tomcat-el-2.2-api.noarch 7.0.76-3.el7_4 updates
tomcat-javadoc.noarch 7.0.76-3.el7_4 updates
tomcat-jsp-2.2-api.noarch 7.0.76-3.el7_4 updates
tomcat-jsvc.noarch 7.0.76-3.el7_4 updates
tomcat-lib.noarch 7.0.76-3.el7_4 updates
tomcat-native.x86_64 1.2.16-1.el7 epel
tomcat-servlet-3.0-api.noarch 7.0.76-3.el7_4 updates
tomcat-webapps.noarch 7.0.76-3.el7_4 updates
tomcatjss.noarch 7.2.1-6.el7 base
在centos7中默認提供Tomcat7版本,安裝時只需安裝tomcat,tomcat-admin-webapps,tomcat-doc-webapp,tomcat-webapps即可,其它包會自動安裝上。
# yum install -y tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps
Installed:
tomcat.noarch 0:7.0.76-3.el7_4
tomcat-admin-webapps.noarch 0:7.0.76-3.el7_4
tomcat-docs-webapp.noarch 0:7.0.76-3.el7_4
tomcat-webapps.noarch 0:7.0.76-3.el7_4
Dependency Installed:
apache-commons-logging.noarch 0:1.1.2-7.el7
avalon-framework.noarch 0:4.3-10.el7
avalon-logkit.noarch 0:2.1-14.el7
jakarta-taglibs-standard.noarch 0:1.1.2-14.el7_1
tomcat-el-2.2-api.noarch 0:7.0.76-3.el7_4
tomcat-jsp-2.2-api.noarch 0:7.0.76-3.el7_4
tomcat-lib.noarch 0:7.0.76-3.el7_4
tomcat-servlet-3.0-api.noarch 0:7.0.76-3.el7_4
Complete!
Tomcat安裝之二進制包
- 下載tomcat,目前最新版本是9.0
官網地址:[https://tomcat.apache.org/download-90.cgi]
curl -O http://mirrors.shu.edu.cn/apache/tomcat/tomcat-9/v9.0.6/bin/apache-tomcat-9.0.6.tar.gz
- 解壓源碼包放在/usr/local目錄下
# tar xvf apache-tomcat-9.0.6.tar.gz -C /usr/local/
- 創建鏈接文件
ln -sv /usr/local/apache-tomcat-9.0.6 /usr/local/tomcat9
- 安裝JDK
Tomcat9需要JDK8及以上的版本
JDK下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
# wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/jdk-8u162-linux-x64.tar.gz
- 配置centos7使用JDK1.8版本
# mkdir -p /usr/local/jdk-oracal
# tar xvf jdk-8u162-linux-x64.tar.gz -C /usr/local/jdk-oracal/
# cd /etc/profile.d/
# vi java1.8.sh
export JAVA_HOME=/usr/local/jdk-oracal/jdk1.8.0_162
export PATH=$JAVA_HOME/bin:$PATH
# source java1.8.sh
# java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
- 配置tomcat9啟動環境
# vi /etc/profile.d/tomcat9.sh
export CATALINA_HOME=/usr/local/tomcat9
export PATH=$TOMCAT_HOME/bin:$PATH
# source /etc/profile.d/tomcat9.sh
官方建議在tomcat安裝目錄的bin目錄下建一個setenv.sh,將JAVA_HOME,JRE_HOME等環境變量信息指定。示例如下:
# cat bin/setenv.sh
CATALINA_HOME=/usr/local/tomcat9
CATALINA_BASE=/usr/local/tomcat9
JAVA_HOME=/usr/local/jdk-oracal/jdk1.8.0_162
JRE_HOME=/usr/local/jdk-oracal/jdk1.8.0_162/jre/
CATALINA_PID=/usr/local/tomcat9/tomcat9.pid
- 啟動Tomcat9
# catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/local/jdk-oracal/jdk1.8.0_162
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.
# ss -tnpl |grep 8080
LISTEN 0 100 :::8080 :::* users:(("java",pid=4177,fd=49))
- 使用systemd管理tomcat9服務
# cat /usr/lib/systemd/system/tomcat9.service
[Unit]
Description=Apache Tomcat 9
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/tomcat9/tomcat9.pid
ExecStart=/usr/local/tomcat9/bin/catalina.sh start -DEFOREGRAND
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
- 配置訪問tomcat9管理界面
修改conf/tomcat-users.xml
添加如下內容
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
-->
<role rolename="manager-gui"/>
<role rolename="manager-script" />
<user username="admin" password="tomcat" roles="manager-gui,manager-script" />
</tomcat-users>
修改webapps/manager/META-INF目錄下的context.xml,在allow行的末尾加上|\d+.\d+.\d+.\d+表示允許所有主機訪問。
<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|\d+\.\d+\.\d+\.\d+" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
重啟tomcat9生效
Tomcat安裝腳本
#!/bin/bash
###########################################################################
# This script used to install and config tomcat9_binary_packet on centos7 #
# #
# write by mifyang at 2018-4-1 writer mail: mifyang@126.com #
###########################################################################
src_data_dir="/root/tomcat"
jdk_install_dir="/usr/local/jdk_oracal"
tomcat9_install_dir="/usr/local/tomcat"
jdk_url="http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/jdk-8u162-linux-x64.tar.gz"
tomcat9_url="http://mirrors.hust.edu.cn/apache/tomcat/tomcat-9/v9.0.6/bin/apache-tomcat-9.0.6.tar.gz"
jdk_src_name=${jdk_url##*/}
tomcat9_src_name=${tomcat9_url##*/}
# 創建/root/tomcat目錄用於存放源碼包
if [ ! -d $src_data_dir ];then
mkdir -p $src_data_dir
else
echo "${src_data_dir} 文件夾已存在"
fi
# 下載JDK1.8 下載tomcat9 應該提前下載好,不然下載會占用大量時間
# curl -L:跟蹤重定向,,不加-L只能返回302的結果,cookies中有用的內容是同意協議那一部分,Connection: keep-alive這句要加上,否則下載速度會變成蝸牛,-O(大寫字母o):下載文件
# cd $src_data_dir
# curl -L http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/jdk-8u162-linux-x64.tar.gz -H "Cookie: oraclelicense=accept-securebackup-cookie" -H "Connection: keep-alive" -O
# curl http://mirrors.hust.edu.cn/apache/tomcat/tomcat-9/v9.0.6/bin/apache-tomcat-9.0.6.tar.gz -O
# 解壓二進制源碼包到安裝目錄,並創建軟鏈接
if [ ! -d $jdk_install_dir ];then
mkdir -p $jdk_install_dir
tar xvf $jdk_src_name -C $jdk_install_dir
ln -sv ${jdk_install_dir}/$(ls $jdk_install_dir) ${jdk_install_dir}/jdk8
else
echo "目錄已存在"
fi
if [ ! -d $tomcat9_install_dir ];then
mkdir -p $tomcat9_install_dir
tar xvf $tomcat9_src_name -C $tomcat9_install_dir
ln -sv ${tomcat9_install_dir}/$(ls $tomcat9_install_dir) ${tomcat9_install_dir}/tomcat9
else
echo "目錄或鏈接已存在"
fi
# 配置JDK8環境
cat <<EOF > /etc/profile.d/jdk8.sh
export JDK_HOME=${jdk_install_dir}/jdk8
export PATH=$JDK_HOME/bin:$PATH
EOF
source /etc/profile.d/jdk8.sh
java -version
# 配置tomcat9運行環境
cat <<EOF > /etc/profile.d/tomcat9.sh
export CATALINA_HOME=${tomcat9_install_dir}/tomcat9
export PATH=$CATALINA_HOME/bin:$PATH
EOF
source /etc/profile.d/tomcat9.sh
cat << EOF >${tomcat9_install_dir}/tomcat9/bin/setenv.sh
CATALINA_HOME=${tomcat9_install_dir}/tomcat9
CATALINA_BASE=${tomcat9_install_dir}/tomcat9
JAVA_HOME=${jdk_install_dir}/jdk8
JRE_HOME=${jdk_install_dir}/jdk8/jre/
EOF
