1.tomcat基本介绍
JVM介绍
java业务基本上都是运行在java虚拟机上的,Java虚拟机简称JVM
虚拟机是通过软件模拟出具有完整硬件操作系统的功能
JAVA环境JRE和JDK的区别
jre是java的运行环境,包含jvm
jdk是java的开发环境,包含Java的运行环境jre
如果单纯的运行java代码,只需要jre就够了,如果需要提供开发环境以及运行环境则需要jdk
Tomcat
Tomcat和nginx类似,都是web服务器,只不过tomcat是基于java环境开发的web服务,只要解析java代码
nginx仅支持静态资源分析,而tomcat支持解析java开发的web应用,还支持解析静态资源(效率不高)
nginx适合做前端负载,tomcat适合做后端应用处理
通常情况下企业会使用 nginx+tomcat结合,nginx处理静态,tomcat处理动态
tomcat快速部署
yum install java-11-openjdk -y
[root@test3 bin]
/root/apache-tomcat-10.1.30/bin
[root@test3 bin]
bootstrap.jar ciphers.sh daemon.sh migrate.bat shutdown.sh tool-wrapper.bat
catalina.bat commons-daemon.jar digest.bat migrate.sh startup.bat tool-wrapper.sh
catalina.sh commons-daemon-native.tar.gz digest.sh setclasspath.bat startup.sh version.bat
catalina-tasks.xml configtest.bat makebase.bat setclasspath.sh tomcat-juli.jar version.sh
ciphers.bat configtest.sh makebase.sh shutdown.bat tomcat-native.tar.gz
配置为systemctl管理
[root@test3 system]
[root@test3 system]
[Unit]
Description=The tomcat apache
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
ExecStart=/root/apache-tomcat-10.1.30/bin/startup.sh
ExecStop=/root/apache-tomcat-10.1.30/bin/shutdown.sh
ExecRestart=/root/apache-tomcat-10.1.30/bin/shutdown.sh && sleep 2 && /root/apache-tomcat-10.1.30/bin/startup.sh
[Install]
WantedBy=multi-user.target
[root@test3 ~]
[Unit]
Description=The tomcat apache
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
ExecStart=/root/apache-tomcat-9.0.98/bin/startup.sh
ExecStop=/root/apache-tomcat-9.0.98/bin/shutdown.sh
Restart=/root/apache-tomcat-9.0.98/bin/shutdown.sh && sleep 2 && /root/apache-tomcat-9.0.98/bin/startup.sh
[Install]
WantedBy=multi-user.target
[root@test3 system]
[root@test3 system]
[root@test3 system]
● tomcat.service - The tomcat apache
Loaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2024-11-30 21:16:25 CST; 5s ago
Process: 2449 ExecStart=/root/apache-tomcat-10.1.30/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 2463 (java)
Tasks: 34
Memory: 206.9M
CGroup: /system.slice/tomcat.service
└─2463 /usr/bin/java -Djava.util.logging.config.file=/root/apache-tomcat-10.1.30/conf/logging.properties -Djava.util.loggi...
Nov 30 21:16:25 test3 systemd[1]: Starting The tomcat apache...
Nov 30 21:16:25 test3 startup.sh[2449]: Tomcat started.
Nov 30 21:16:25 test3 systemd[1]: Started The tomcat apache.
[root@test3 system]
tcp6 0 0 :::8080 :::* LISTEN 2463/java
如何测restart有没有生效,restart之后 pid号会变 ps -ef
tomcat 软件目录结构
bin --主要包含启动和关闭tomcat的脚本(启停java脚本依赖jar包)
conf --tomcat的配置文件目录(站点配置 server.xml)
lib --tomcat运行时需要加载的jar包
logs --tomcat日志存放的路径 localhost_access_log.2024-12-04.txt,访问日志
temp --tomcat临时存放文件的路径
webapps --tomcat默认站点目录
work --tomcat运行时产生的缓存
配置文件 server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"> 自动解压.war
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
日志参数解释:
%a - 远程IP地址
%A - 本地IP地址
%b - 发送的字节数,不包括HTTP头,或“ - ”如果没有发送字节
%B - 发送的字节数,不包括HTTP头
%h - 远程主机名
%H - 请求协议
%l (小写的L)- 远程逻辑从identd的用户名(总是返回' - ')
%m - 请求方法
%p - 本地端口
%q - 查询字符串(在前面加上一个“?”如果它存在,否则是一个空字符串
%r - 第一行的要求
%s - 响应的HTTP状态代码
%S - 用户会话ID
%t - 日期和时间,在通用日志格式
%u - 远程用户身份验证
%U - 请求的URL路径
%v - 本地服务器名
%D - 处理请求的时间(以毫秒为单位)
%T - 处理请求的时间(以秒为单位)
%I (大写的i) - 当前请求的线程名称
tomcat自定义server
<Host name="th.com" appBase="/code/tomcat"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="th" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
tomcat实际的资源路径为
/code/tomcat/ROOT
[root@test3 ~]
配置hosts解析
root@test3 logs]
192.168.23.103 th.com
此时就有日志了
[root@test3 logs]
192.168.23.103 - - [07/Dec/2024:20:51:41 +0800] "GET / HTTP/1.1" 404 683
192.168.23.1 - - [07/Dec/2024:21:00:46 +0800] "GET / HTTP/1.1" 404 649
192.168.23.1 - - [07/Dec/2024:21:00:46 +0800] "GET /favicon.ico HTTP/1.1" 404 649

配置首页文件
[root@test3 logs]
[root@test3 logs]
[root@test3 logs]
1111
tomcat中Context的作用:
<Host name="th.com" appBase="/code/tomcat"
unpackWARs="true" autoDeploy="true">
<Context docBase="/code/tt" path="/tt" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="th" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
创建资源
[root@test3 ~]
[root@test3 ~]
[root@test3 ~]

tomcat管理页

Tomcat自带的管理页面
管理功能
监控功能
1.所有的管理页面都将权限赋予了角色,而角色的名称时固定的 manager-gui admin-gui
2.需要添加一个用户,将用户捆绑至对应的角色,这样用户就可以访问到对应的页面
[root@test3 ~]
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui,admin-gui"/>
</tomcat-users>
开启ip地址的限制
由于项目默认允许127.0.0.1访问,所以配置好了角色和用户也无法正常访问
[root@test3 ~]
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
改成
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
[root@test3 ~]
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
[root@test3 ~]

tomcat部署zrlog
[root@test3 ~]
<Host name="zr.com" appBase="/code/zrlog"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="zrlog" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
上传zrlog包
[root@test3 zrlog]
/code/zrlog
[root@test3 zrlog]
ROOT ROOT.war
如何快速扩展一台ttest2
1.安装jdk
[root@test2 yum.repos.d]
2.拷贝tomcat目录文件
[root@test3 ~]
3.拷贝tomcat 代码文件
[root@test3 ~]
[root@test3 ~]
重启,访问test2的IP即可
加入负载均衡
[root@test3 ~]
upstream {
server 192.168.23.103:8080;
server 192.168.23.102:8080;
}
server {
listen 80;
server_name 192.168.23.103;
location / {
proxy_pass http://zrlog;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
}
}
Tomcat+nginx+redis会话保持
多种会话方式:1.ip_hash 2.mysql 3.redis
tomcat 自带的cluster session复制,(官方建议不超过4个节点)
所有节点都需要配置
cat server.xml
<Host name="session.com" appBase="/code/session/"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>