目录
[3.Tomcat HTTP请求过程](#3.Tomcat HTTP请求过程)
这篇文章给大家讲解Tomcat快速入门,Tomcat和Nginx类似,都是WEB服务器软件,只不过Tomcat是基于JAVA开发的WEB服务,主要解析JAVA代码。
Nginx仅支持静态资源解析,而Tomcat支持Java开发的web应用,还支持解析静态资源(效率不高)Nginx适合做前端负载均衡,而Tomcat适合做后端应用服务处理。通常清空下企业种会使用Nginx+Tomcat结合,Nginx处理静态资源,Tomcat处理动态资源。
1.Java环境简单介绍
JVM介绍:Java业务都是运行在Java虚拟机上,Java虚拟机简称为JVM,虚拟机是通过软件模拟出具有完整硬件系统的功能
为什么Java需要JVM虚拟机?
早期C语言,不支持跨平台,如果C语言想要在Windows Linux Mac上运行,需要进行分别编译,那么在Linux上有很多优秀的软件,如果需要在Windows上使用需要重新编译,移植性差。
而Java则不同,Java是可以跨平台,只需要将源码进行一次编译,能够在不同的操作系统运行。
Java是如何做到的?
它只需要在Windows Linux系统上运行一个JVM,这样我们就能将Java编译好的war包在Windows和Linux平台运行起来,无需我们重复编译,而JVM是由JRE提供的
Java环境种JRE和JDK的区别?
JRE是Java的运行环境,包含JVM
JDK是Java的开发环境,包含Java的运行环境JRE
如果说单纯的运行环境Java代码,只需要JRE足够,但是如果需要提供开发环境以及运行环境则需要JDK。
2.Tomcat快速安装
(1)安装jdk
yum -y install java
或者上传rpm包
rpm -ivh jdk-8u181-linux-x64.rpm
(2)安装Tomcat(下载,解压,启动)
#可以在官网直接下载也可以在windows下载后导入
[root@Web01 ~]# rz -E
rz waiting to receive.
[root@Web01 ~]# mkdir /soft
[root@Web01 ~]# tar xf apache-tomcat-9.0.73.tar.gz -C /soft/
#做软连接一方面是方便调用,一方面是如果升级,直接重新挂下软连接即可
[root@Web01 ~]# ln -s /soft/apache-tomcat-9.0.73/ /soft/tomcat
[root@Web01 ~]# /soft/tomcat/bin/startup.sh #启动
#8080对外提供服务的端口,8005关闭Tomcat端口
[root@Web01 ~]# netstat -tnulp|grep java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 36724/java
tcp6 0 0 :::8080 :::* LISTEN 36724/java
[root@Web01 ~]# /soft/tomcat/bin/shutdown.sh #停止
(3)配置sysrenctl方式启动
[root@Web01 ~]# systemctl cat nginx #模仿着写
# /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)"
[Install]
WantedBy=multi-user.target
cat >/usr/lib/systemd/system/tomcat.service<<'EOF'
[Unit]
Description=Apache Tomcat Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/soft/tomcat/bin/startup.sh
ExecStop=/soft/tomcat/bin/shutdown.sh
ExecRetart=/soft/tomcat/bin/shutdown.sh && sleep2 && /soft/tomcat/bin/startup.sh
[Install]
WantedBy=multi-user.target
EOF
[root@Web01 ~]# systemctl daemon-reload #加进配置文件后重载
[root@Web01 ~]# systemctl start tomcat
[root@Web01 ~]# netstat -tnulp|grep java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 38210/java
tcp6 0 0 :::8080 :::* LISTEN 38210/java
[root@Web01 ~]# systemctl enable tomcat
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.
(4)Tomcat配置文件
tomcat软件目录结构
bin ---主要包含启动和关闭tomcat的脚本(启停java脚本依赖jar包文件)
conf ---tomcat配置文件的目录(站点配置:server.xml)
lib ---tomcat运行时需要加载的jar包
logs ---tomcat日志存放位置
temp ---tomcat临时存放文件路径
webapps ---tomcat默认站点目录
work ---tomcat运行时产生的缓存文件
[root@Web01 ~]# vim /soft/tomcat/conf/server.xml #配置文件
[root@Web01 ~]# sed -i '/<!--/,/-->/d' /soft/tomcat/conf/server.xml #删除注释行
(5)Tomcat配置虚拟主机(同nginx一样)
[root@Web01 ~]# cat /soft/tomcat/conf/server.xml
...... #添加下面内容到默认host下面
<Host name="test.boss.org" appBase="/code/tomcat/test"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="test" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
......
[root@Web01 ~]# systemctl restart tomcat
[root@Web01 ~]# mkdir -p /code/tomcat/test/ROOT
[root@Web01 ~]# echo 'test:boss' > /code/tomcat/test/ROOT/index.html
本地解析hosts,浏览器访问:test.boss.org:8080
3.Tomcat HTTP请求过程
用户发出一个请求,如http://test.boss.org:8080/index.jsp
Connector发现是http/1.1协议,而且还是8080端口,于是就把请求接收后交给符合条件的Engine
Engine通过请求中的主机名test.boss.org查找满足条件的虚拟主机(Host)
找到后就去此虚拟主机指定的appBase(代码存放的目录)最后将解析产生的结果返回给用户。
Tomcat中的Context与Nginx中的location定义的路径效果类似,也与alias类似。
location /files/ {
alias /var/www/myfiles/;
}
[root@Web01 ~]# cat /soft/tomcat/conf/server.xml
......
</Host>
<Host name="test.boss.org" appBase="/code/tomcat/test" #appBase与docBase前面部分需要保持一致
unpackWARs="true" autoDeploy="true">
<!--访问test.koten.org:8080/tt这个url,会获取/code/tomcat/test/tt中页面的资源-->
<Context docBase="/code/tomcat/test/tt" path="/tt" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="test" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
......
[root@Web01 ~]# systemctl restart tomcat
[root@Web01 ~]# mkdir /code/tomcat/test/tt
[root@Web01 ~]# echo 'test:tt' > /code/tomcat/test/tt/index.html #注意这里不需要ROOT目录
#经测试,先创建tt目录重启后会显示8005端口,不先创建tt目录,虽然也可以看,但是不显示8005端口,不知道这两者是否有关联
访问界面:http://test.boss.org:8080/tt/
4.Tomcat管理页面
Tomcat自带的管理页面有管理功能和监控功能
(1)所有的管理页面,都将权限赋予了角色,而角色的名称是固定的:manager-gui,admin-gui
(2)需要添加一个用户,将用户捆绑至对应的角色,这样用户就可以访问到对应的管理页面
[root@Web01 ~]# vim /soft/tomcat/conf/tomcat-users.xml
......
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="123456" roles="manager-gui,admin-gui"/>
</tomcat-users>
(3)由于项目默认允许127.0.0.1访问,所以配置好了角色和用户也无法正常访问
将127改成10
[root@Web01 ~]# cat /soft/tomcat/webapps/host-manager/META-INF/context.xml |grep 10
allow="10\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
[root@Web01 ~]# cat /soft/tomcat/webapps/manager/META-INF/context.xml |grep 10
allow="10\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
可以查看服务器的状态.
在上面也可以进行一些部署
可以开启、停止、添加部署的虚拟主机