浅谈Tomcat并搭建Tomcat服务器(详解)
1、Tomcat简介
Tomcat是用来解析jsp程序的程序,是Apache 软件基金会(Apache Software Foundation)的Jakart项目中的一个核心项目, 由Apache、Sun和其他一些公司及个人共同开发而成。因为Tomcat技术先进、性能稳定、而且免费,成为目前比较流行的Web应用服务器。
2、Tomcat的安装
Tomcat的安装分为俩个步骤:JDK 的安装和 Tomcat 的安装
- 安装JDK并配置Java环境
JDK的官网下载地址:https://www.oracle.com/java/technologies/javase-downloads.html
这里下载的是JDK8.0版,jdk-8u181-linux-x64.tar.gz 提取码为QsVf
rpm -qa | grep java #查找系统中是否有java
java -version #可以查看java版本信息
yum erase -y java* #如果有删除旧的版本或不需要的版本
解压安装包并将其放到本地/usr/local下
tar zxvf jdk-8u181-linux-x64.tar.gz
mkdir /usr/local/jdk #创建jdk的目录用来存放解压后的文件
mv jdk1.8.0_181/ /usr/local/jdk/
修改配置文件(添加环境变量)
vi /etc/bashrc #(或者/etc/profile)
..... #末尾添加
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_181
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/bashrc #source命令使定义的环境变量生效
java -version
显示以下内容,则配置成功
常见问题:
当执行完source命令后,执行java -version出现"未找到命令"时,及时查看环境变量是否配置成功!
- 安装Tomcat
Tomcat的官网地址:https://tomcat.apache.org/download-90.cgi
解压安装包并将其放到本地/usr/local下(这里使用的是Tomcat9.0版 提取码为QsvF)
tar zxvf apache-tomcat-9.0.41.tar.gz
mkdir /usr/local/tomcat #创建tomcat的目录用来存放解压后的文件
mv apache-tomcat-9.0.41 /usr/local/tomcat/
/usr/local/tomcat/apache-tomcat-9.0.41/bin/startup.sh #启动Tomcat服务(或使用/usr/local/tomcat/apache-tomcat-9.0.41/bin/catalina.sh start)
lsof -i:8080 #查看8080端口是否启动
/usr/local/tomcat/apache-tomcat-9.0.41/bin/shutdown.sh #关闭Tomcat服务(或使用/usr/local/tomcat/apache-tomcat-9.0.41/bin/catalina.sh stop)
ps -ef | grep java #将Tomcat关闭的彻底点,可以将java运行的进程kill掉
killall -9 进程ID
注:如果没有配置防火墙允许Tomcat通过,最好先关闭防火墙,不然端口不能访问!!
浏览器测试:http://192.168.1.52:8080 (根据个人搭建所用的地址而定),出现tomcat主页面表示Tomcat搭建成功
3、Tomcat目录结构
解压Tomcat软件包,会出现如下文件:
目录及文件 | 说明 |
---|---|
bin | 用于启动、关闭Tomcat或者其他功能的脚本(.bat文件 和 .sh文件) |
conf | 用以存放Tomcat相应的配置文件 |
lib | 存放web应用能访问的JAR包 |
logs | Catalina和其他Web应用程序的日志文件 |
webapps | Web应用程序根目录 |
temp | 存放tomcat在运行过程中产生的临时文件 |
work | 用以产生JSP编译出的Servlet的.java和.class文件 |
conf/server.xml | Tomcat主配置文件 |
conf/tomcat-users.xml | Tomcat管理用户配置文件 |
README.md、RUNNING.txt、BUILDING.txt、CONTRIBUTING.md、LICENSE、NOTICE、RELEASE-NOTES是Tomcat服务器的一些签证,运行,注意的信息。
4、Tomcat开机自启动
- 第一种方法:使用daemon的方式
使用daemon方式运行tomcat可以使tomcat不受终端影响,不会因为退出终端而停止运行;可以让tomcat以普通用户身份运行,可以让tomcat在系统启动时自动运行。
Jsvc 是专为 Java 应用程序开发的一个工具包,其目标是把 Java 应用程序的普通运行转换为可以配置某个普通用户以 Unix 守护进程的方式运行。这样的话,可以很方便地启动 / 停止应用程序。
cd /usr/local/tomcat/apache-tomcat-9.0.41/bin/ #需要编译commons-daemon-native,需要gcc组件(文件位置)
tar zxvf commons-daemon-native.tar.gz
cd commons-daemon-1.0.15-native-src/unix #跳转到unix下,探测环境并进行编译
./configure
make -j4
cp jsvc /usr/local/tomcat/apache-tomcat-9.0.41/bin #将得到的jsvc文件复制到bin下
vi /usr/local/tomcat/apache-tomcat-9.0.41/bin/daemon.sh #(下面的内容放在脚本顶端,否则先调用在定义就不生效了)
#chkconfig: 2345 80 90 #声明开机启动的运行级别和优先级
#description: auto_run #描述是否可设置开机启动
JAVA_HOME=/usr/local/jdk/jdk1.8.0_181 #指定Java的安装路径
CATALINA_HOME=/usr/local/tomcat/apache-tomcat-9.0.41 #指定Tomcat的安装路径
cp /usr/lcoal/tomcat/apache-tomcat-9.0.41/bin/daemon.sh /etc/init.d/tomcat #将编辑好的daemon.sh文件复制到/etc/init.d/tomcat下
chmod 755 /etc/init.d/tomcat
service tomcat start
注:未创建tomcat用户,启动会报错!!
useradd -s /sbin/nologin tomcat
chown tomcat:tomcat /usr/local/tomcat/ -R
service tomcat start
lsof -i:8080
service tomcat stop
chkconfig tomcat on #设置Tomcat开机启动
chkconfig --list tomcat #查看tomcat开机启动信息
reboot #重启测试tomcat是否开机自动启动
- 第二种方法:通过catalina.sh
vi /usr/local/tomcat/apache-tomcat-9.0.41/bin/catalina.sh #开头添加
JAVA_HOME=/usr/local/jdk/jdk1.8.0_181
CATALINA_HOME=/usr/local/tomcat/apache-tomcat-9.0.41
echo /usr/local/tomcat/apache-tomcat-9.0.41/bin/catalina.sh start >> /etc/rc.d/rc.local
reboot
- 第三种方法:通过修改系统配置文件
vi /etc/rc.d/rc.local #开机启动程序,可以在里面添加想在系统启动之后执行的脚本
JAVA_HOME=/usr/local/jdk/jdk1.8.0_181
/usr/local/tomcat/apache-tomcat-9.0.41/bin/startup.sh
chmod +x /etc/rc.d/rc.local
reboot
- 第四种方法:通过shell脚本实现
vi tomcat.sh
#!/bin/sh
#chkconfig: 2345 80 90
#description: start the tomcat
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_181
export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-9.0.41
case $1 in
start)
echo "Tomcat is Starting......"
$CATALINA_HOME/bin/startup.sh
sleep 1
echo "Tomcat has been Started!!"
;;
stop)
echo "Tomcat is Stoping......"
$CATALINA_HOME/bin/shutdown.sh
sleep 1
echo "Tomcat has been Stoped!!"
;;
restart)
echo "Tomcat is Restarting......"
$CATALINA_HOME/bin/shutdown.sh
sleep 1
$CATALINA_HOME/bin/startup.sh
echo "Tomcat has been Started!!"
;;
*)
echo "Usage:tomcat {start|stop|restart}"
esac
cp tomcat.sh /etc/init.d/tomcat #将编写好的脚本复制到/etc/init.d/下
chmod +x /etc/init.d/tomcat
chkconfig --add tomcat #向chkconfig添加 tomcat 服务的管理
chkconfig tomcat on
chkconfig --list tomcat
reboot
注:当出现服务tomcat不支持chkconfig时,查看编写的脚本中#chkconfig和#description语句是否正确!!
4、Tomcat 的SSL加密访问
利用 keytool 工具生成证书文件 tomcat
keytool -genkey -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/apache-tomcat-9.0.41/conf/tomcat.keystore -validity 365
参数 | 说明 |
---|---|
keytool -genkey | 自动使用默认的算法生成公钥和私钥 |
-alias | 为证书定义一个别名,这里定义为tomcat |
-keyalg | 指定密钥的算法(如:RSA、DSA) |
-keystore | 证书文件的保存路径,证书文件名称是xxx.keystore |
-validity | 证书有效期,默认值是90天 |
参数 | 说明 |
---|---|
输入密钥库口令 | 需输入大于6个字符的字符串 |
再次输入新口令 | 再次输入以确认密码无误 |
您的名字与姓氏是什么? | 必填项,必须是tomcat部署主机的域名或者IP |
你的组织单位名称是什么? | 可根据个人需求而填,也可回车跳过 |
您的组织名称是什么? | 可根据个人需求而填,也可回车跳过 |
您所在城市或区域名称是什么? | 可根据个人需求而填,也可回车跳过 |
您所在的省/市/自治区名称是什么? | 可根据个人需求而填,也可回车跳过 |
该单位的双字母国家/地区代码是什么? | 可根据个人需求而填,也可回车跳过 |
CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确? | 询问填写信息是否正确,正确输入"y",错误输入"n",重新填写上面的信息;不要回答 yes,如果回答 yes 它会重新在问你一遍 |
输入 的密钥口令 | 会在tomcat配置文件中使用,建议输入与keystore的密码一致 |
再次输入新口令 | 再次输入以确认密码无误 |
生成的证书文件位于定义的路径下
修改 tomcat 的主配置文件
vi /usr/local/tomcat/apache-tomcat-9.0.41/conf/server.xml
...
<!-- #将其注释掉
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
...
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" #启用加密连接配置(指定密钥文件路径和密钥文件密码)
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="/usr/local/tomcat/apache-tomcat-9.0.41/conf/tomcat.keystore" certificateKeystorePassword="123456" type="RSA" />
</SSLHostConfig>
</Connector>
/usr/local/tomcat/apache-tomcat-9.0.41/bin/shutdown.sh
/usr/local/tomcat/apache-tomcat-9.0.41/bin/startup.sh
浏览器测试:https://192.168.1.52:8443,出现tomcat主页面表示加密成功
- 实现 http 跳转到 https
现实项目中客户使用http访问,还是会走http协议,依然是不安全的,没有达到我们的需求,因此就需要实现 http 跳转到 https ,提高安全性
vi /usr/local/tomcat/apache-tomcat-9.0.41/conf/web.xml #修改web.xml文件(添加如下配置)
...
...
<security-constraint>
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
<security-constraint>
vi /usr/local/tomcat/apache-tomcat-9.0.41/conf/server.xml #修改配置文件
...
<Connector port="8080" protocol="HTTP/1.1" #使之生效
connectionTimeout="20000"
redirectPort="8443" />
...
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
...
</Connector>
/usr/local/tomcat/apache-tomcat-9.0.41/bin/shutdown.sh
/usr/local/tomcat/apache-tomcat-9.0.41/bin/startup.sh #重启并查看端口
浏览器测试:输入http://192.168.1.52:8080 跳转到 https://192.168.1.52:8443 表示配置成功
5、Tomcat的其它配置
- 更改Tomcat默认端口号 8080
有时在工作环境中需要安装多个 tomcat,就需要多个端口号
vi /usr/local/tomcat/apache-tomcat-9.0.41/conf/server.xml
...
<Connector port="8085" protocol="HTTP/1.1" #将8080端口号改为任意即可
connectionTimeout="20000"
redirectPort="8443" />
/usr/local/tomcat/apache-tomcat-9.0.41/bin/shutdown.sh
/usr/local/tomcat/apache-tomcat-9.0.41/bin/startup.sh
浏览器测试:http://192.168.1.52:8085,出现 tomcat 主页面表示 tomcat 端口号修改成功
- 更改Tomcat默认首页和配置虚拟目录
tomcat 的默认站点路径:/usr/local/tomcat/apache-tomcat-9.0.41/webapps/ROOT/
第一种方法:直接在webapps/ROOT/下添加index.html
cd /usr/local/tomcat/apache-tomcat-9.0.41/webapps/ROOT/
mv index.jsp index.jsp.bak
vi index.html
vi /usr/local/tomcat/apache-tomcat-9.0.41/conf/web.xml #(将index.html修改为自己所创建的;这里我创建的是index,html,所以无需修改)
...
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
/usr/local/tomcat/apache-tomcat-9.0.41/bin/shutdown.sh
/usr/local/tomcat/apache-tomcat-9.0.41/bin/startup.sh
浏览器测试:http://192.168.1.52:8085,出现自定义的页面则修改成功
第二种方法:一般有的需要将项目的欢迎页面替换到 tomcat 的主页面,这时就不建议将index.html直接放到ROOT下,需要在webapps下创建一个目录用来存放,这样方便管理
vi /usr/local/tomcat/apache-tomcat-9.0.41/conf/server.xml
...
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="web" docBase="/usr/local/tomcat/apache-tomcat-9.0.41/webapps/project" debug="0" reloadable="true"/>
...
</Host>
参数 | 说明 |
---|---|
path | 虚拟目录的名称(只输入ip地址显示页面时,该键值为空);定义一个虚拟目录web |
docBase | 登录tomcat默认的主页所在的目录 |
reloadable | reloadable设置为true表示只要tomcat中的项目有改动tomcat就会自动重新加载编译 |
vi /usr/local/tomcat/apache-tomcat-9.0.41/conf/web.xml
...
<welcome-file-list>
<welcome-file>web.html</welcome-file> #web.html位于webapps/project下
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
/usr/local/tomcat/apache-tomcat-9.0.41/bin/shutdown.sh
/usr/local/tomcat/apache-tomcat-9.0.41/bin/startup.sh
浏览器测试:http://192.168.1.52:8085/web