真正的命令在哪里?
root
@ubuntu24-13:
/
data
/
softs
# ls /usr/bin/java -l
lrwxrwxrwx
1
root root
22
9
月
30 15
:
20
/
usr
/
bin
/
java
-> /
etc
/
alternatives
/
java
root
@ubuntu24-13:
/
data
/
softs
# ls /etc/alternatives/java -l
lrwxrwxrwx
1
root root
43
9
月
30 15
:
20
/
etc
/
alternatives
/
java
->
/
usr
/
lib
/
jvm
/
jdk-23
.0.1
-
oracle-x64
/
bin
/
java
root
@ubuntu24-13:
/
data
/
softs
# ls /usr/lib/jvm/jdk-23.0.1-oracle-x64/bin/java -l
-
rwxr-xr-x
1 10668 10668 12328
9
月
30 15
:
20
/
usr
/
lib
/
jvm
/
jdk-23
.0.1
-
oracle
x64
/
bin
/
java
依照本安装的环境 如下显示
清理环境
root
@ubuntu24-13:
/
data
/
softs
# apt purge jdk-24
2. Rocky环境部署Java-rpm
前面安装的步骤和ubuntu一样,这里就说说不一样的安装,其他的略
安装软件
[root
@rocky9-12
softs]
# rpm -ivh jdk-23_linux-x64_bin.rpm
卸载软件
[root
@rocky9-12
softs]
# yum remove java
3.Ubuntu环境部署Java - openjdk
安装软件
root
@ubuntu24-13:
~
# apt update; apt list
openjdk*
root
@ubuntu24-13:
~
# apt install openjdk-11-jdk -y
检测效果
root
@ubuntu24-13:
~
# whereis java
java
: /
usr
/
bin
/
java
/
usr
/
share
/
java
/
usr
/
share
/
man
/
man1
/
java
.1
.gz
查看版本
root
@ubuntu24-13:
~
# java -version
openjdk version
"11.0.25"
2024
-
10
-
15
OpenJDK Runtime Environment (build
11.0.25
+
9
-
post-Ubuntu-1ubuntu124
.04
)
OpenJDK
64
-
Bit Server VM (build
11.0.25
+
9
-
post-Ubuntu-1ubuntu124
.04
, mixed mode,
sharing)
java命令在哪里
root
@ubuntu24-13:
~
# whereis java
java
: /
usr
/
bin
/
java
/
usr
/
share
/
java
/
usr
/
share
/
man
/
man1
/
java
.1
.gz
root
@ubuntu24-13:
~
# ll /usr/bin/java
lrwxrwxrwx
1
root root
22 10
月
18 01
:
21
/
usr
/
bin
/
java
-> /
etc
/
alternatives
/
java
*
root
@ubuntu24-13:
~
# ll /etc/alternatives/java
lrwxrwxrwx
1
root root
43 10
月
18 01
:
21
/
etc
/
alternatives
/
java
->
/
usr
/
lib
/
jvm
/
java-11-openjdk-amd64
/
bin
/
java
*
注意:安装软件的版本信息,会随时在变化
4.Rocky环境部署java - openjdk
安装软件
[root
@rocky9-12
~
]
# yum list
java*openjdk*
[root
@rocky9-12
~
]
# yum install java-11-openjdk -y
检测效果
[root
@rocky9-12
~
]
# whereis java
java
: /
usr
/
bin
/
java
/
usr
/
lib
/
java
/
etc
/
java
/
usr
/
share
/
java
/
usr
/
share
/
man
/
man1
/
java
.1
.gz
查看版本
[root
@rocky9-12
~
]
# java --version
openjdk
11.0.25 2024
-
10
-
15
LTS
OpenJDK Runtime Environment (Red_Hat-11
.0.25.0.9
-
1
) (build
11.0.25
+
9
-
LTS)
OpenJDK
64
-
Bit Server VM (Red_Hat-11
.0.25.0.9
-
1
) (build
11.0.25
+
9
-
LTS, mixed
mode, sharing)
真正的命令在哪里?
[root
@rocky9-12
~
]
# ll /usr/bin/java
lrwxrwxrwx.
1
root root
22 11
月
17 12
:
57
/
usr
/
bin
/
java
-> /
etc
/
alternatives
/
java
[root
@rocky9-12
~
]
# ll /etc/alternatives/java
lrwxrwxrwx.
1
root root
62 11
月
17 12
:
57
/
etc
/
alternatives
/
java
->
/
usr
/
lib
/
jvm
/
java-11-openjdk-11
.0.25.0.9
-
2.
el9.x86_64
/
bin
/
java
[root
@rocky9-12
~
]
# ll /usr/lib/jvm/java-11-openjdk-11.0.25.0.9-
2.el9.x86_64/bin/java
-
rwxr-xr-x.
1
root root
18072 10
月
17 04
:
33
/
usr
/
lib
/
jvm
/
java-11-openjdk-
11
.0.25.0.9
-
2.
el9.x86_64
/
bin
/
java
注意: 安装软件的版本信息,会随时在变化
1.3 Tomcat
Tomcat
(全称为
Apache Tomcat
)是一个开源的、轻量级的应用服务器,由
Apache
软件基金会开发和维护,它实现了
Java Servlet
、
Java Server Pages
(
JSP
)和
Java Expression
Language
(简称
JEXL java
表达式语言)等
Java EE
规范,并提供了一个运行这些
Web
应用程序的环境。
在使用
Tomcat
时,将
Java Web
应用程序(包括
Servlet
、
JSP
等文件)部署到
Tomcat
服务中,然后通过
HTTP
协议访问这些应用程序,
Tomcat
提供了一个简单而强大的方式来托管和运行
Java Web
应用程序。
1. java应用如何部署

JAR
包的主要作用之一是实现代码复用和模块化开发
,
也就是说,主要用于在项目分层开发的场景下,通用的功能模块、工具类、第三方库等功能,这样可以使应用的结构更加清晰,便于开发和维护。而且这些通用的功能代码,可以被多个不同的
Web
应用或
Java
项目共享使用。这些相互依赖的包关系可以借助于
Maven
、
Gradle
等工具来实现。
WAR
包是一个完整的
Web
应用程序的归档文件,它包含了一个
Web
应用运行所需的所有资源,如
JSP
文件、
Servlet
类、
HTML
文件、
CSS
文件、
JavaScript
文件等。每个
WAR
包通常对应一个独立的
Web
应用,不适合用于代码的复用
--
因为他本身没有依赖。
JAR
包可以部署到不同的环境中,不仅可以用于
Web
应用
,
还可以用于各种服务的独立部署。
WAR
包通常需要部署到支持
Java Web
应用的服务器(如
Tomcat
、
Jetty
等)中才能运行,部署方式相对固定。
2.Tomcat版本选择

参考资料:
https
://
tomcat.apache.org
/
#
官网
https
://
tomcat.apache.org
/
whichversion.html
#
版本对比
3.Ubuntu安装Tomcat10
1)安装好java环境
root
@ubuntu24-16:
~
# apt install openjdk-11-jdk -y
2)安装Tomcat10
查看软件
root
@ubuntu24-13:
~
# apt list tomcat*
正在列表
..
.
完成
tomcat-jakartaee-migration
/
noble
1.0.7
-
2
all
tomcat10-admin
/
noble
10.1.16
-
1
all
tomcat10-common
/
noble
10.1.16
-
1
all
#
程序的主程序执行脚本在这个包里
tomcat10-docs
/
noble
10.1.16
-
1
all
tomcat10-examples
/
noble
10.1.16
-
1
all
tomcat10-user
/
noble
10.1.16
-
1
all
tomcat10
/
noble
10.1.16
-
1
all
安装
tomcat
root
@ubuntu24-13:
~
# apt install tomcat10 -y
检测服务状态
root
@ubuntu24-13:
~
# systemctl is-active tomcat10.service
active
检测端口
root
@ubuntu24-13:
~
# netstat -tnulp | grep java
tcp6
0
0
:::
8080
:::*
LISTEN
5875
/
jav
查看进程
root
@ubuntu24-13:
~
# ps aux | grep tomcat
tomcat
5875
3.3
4.4 3583400 176440
?
Ssl
13
:
04
0
:
04
浏览器访问 10.0.0.13:8080

4.Rocky安装Tomcat
yum list tomcat*

安装
tomcat
[root
@rocky9-12
~
]
# yum install tomcat -y
检测服务状态
[root
@rocky9-12
~
]
# systemctl is-active tomcat
inactive
启动服务
[root
@rocky9-12
~
]
# systemctl start tomcat
[root
@rocky9-12
~
]
# systemctl enable tomcat
tomcat9在rocky中部署的时候,没有测试页面

[root
@rocky9-12
~
]
# mkdir /usr/share/tomcat/webapps/ROOT
[root
@rocky9-12
~
]
# echo "Hello,the beautiful world" >
/usr/share/tomcat/webapps/ROOT/index.jsp
[root
@rocky9-12
~
]
# curl 10.0.0.12:8080
Hello,the beautiful world
1.4 源码部署
1.ubuntu二进制部署tomcat
1)j
ava
环境部署好
root
@ubuntu24-16:
~
# apt install openjdk-11-jdk -y
检查效果
root
@ubuntu24-16:
~
# java -version
定制环境变量
root
@ubuntu24-16:
~
# vim /etc/profile.d/java.sh
export JAVA_HOME
=/
usr
/
lib
/
jvm
/
java-11-openjdk-amd64
export JAVA_BIN
=
$JAVA_HOME
/
bin
export PATH
=
$JAVA_BIN:$PATH
加载环境变量
root
@ubuntu24-16:
~
# source /etc/profile.d/java.sh
获取软件
root
@ubuntu24-16:
~
# mkdir /data/softs -p; cd /data/softs
root
@ubuntu24-16:
/
data
/
softs
# wget https://dlcdn.apache.org/tomcat/tomcat-
9/v9.0.97/bin/apache-tomcat-9.0.97.tar.gz
解压文件
root
@ubuntu24-16:
/
data
/
softs
# mkdir /data/server
root
@ubuntu24-16:
/
data
/
softs
# tar xf apache-tomcat-9.0.97.tar.gz -C
/data/server/
定制软连接
root
@ubuntu24-16:
/
data
/
softs
# ln -s /data/server/apache-tomcat-9.0.97
/data/server/tomcat
root
@ubuntu24-16:
/
data
/
softs
# ls /data/server/
apache-tomcat-9
.0.97
tomcat
查看目录结构
root
@ubuntu24-16:
/
data
/
softs
# ls /data/server/tomcat
bin conf lib logs README.
md
RUNNING.txt
webapps
BUILDING.txt CONTRIBUTING.
md
LICENSE NOTICE RELEASE-NOTES temp work
root
@ubuntu24-16:
/
data
/
softs
# ls /data/server/tomcat/bin/
bootstrap.jar configtest.sh shutdown.sh
catalina.bat daemon.sh startup.bat
catalina.sh
【启动脚本】
digest.bat startup.sh
。。。。。
查看启动脚本
root
@ubuntu24-16:
~
# /data/server/tomcat/bin/catalina.sh
Using CATALINA_BASE
:
/
data
/
server
/
tomcat
Using CATALINA_HOME
:
/
data
/
server
/
tomcat
Using CATALINA_TMPDIR
: /
data
/
server
/
tomcat
/
temp
。。。。。
定制系统环境变量
root
@ubuntu24-16:
~
# vim /etc/profile.d/tomcat.sh
export CATALINA_BASE
=/
data
/
server
/
tomcat
export CATALINA_HOME
=/
data
/
server
/
tomcat
export CATALINA_TMPDIR
=
$CATALINA_HOME
/
temp
export CLASSPATH
=
$CATALINA_HOME
/
bin
/
bootstrap.jar
:
$CATALINA_HOME
/
bin
/
tomcat
juli.jar
export PATH
=
$CATALINA_HOME
/
bin
:
$PATH
加载系统环境变量
root
@ubuntu24-16:
~
# source /etc/profile.d/tomcat.sh
启动
tomcat
root
@ubuntu24-16:
~
# catalina.sh start
Using CATALINA_BASE
:
/
data
/
server
/
tomcat
Using CATALINA_HOME
:
/
data
/
server
/
tomcat
Using CATALINA_TMPDIR
: /
data
/
server
/
tomcat
/
temp
Using JRE_HOME
:
/
usr
Using CLASSPATH
:
/
data
/
server
/
tomcat
/
bin
/
bootstrap.jar
:/
data
/
server
/
tomcat
/
bin
/
tomcat-juli.jar
Using CATALINA_OPTS
:
Tomcat started.
查看端口效果
root
@ubuntu24-16:
~
# netstat -tnulp | grep java
tcp6
0
0
:::
8080
:::*
LISTEN
5114
/
java
tcp6
0
0 127.0.0.1
:
8005
:::*
LISTEN
5114
/
java
root
@ubuntu24-16:
~
# catalina.sh stop
Using CATALINA_BASE
:
/
data
/
server
/
tomcat
Using CATALINA_HOME
:
/
data
/
server
/
tomcat
Using CATALINA_TMPDIR
: /
data
/
server
/
tomcat
/
temp
Using JRE_HOME
:
/
usr
Using CLASSPATH
:
/
data
/
server
/
tomcat
/
bin
/
bootstrap.jar
:/
data
/
server
/
tomcat
/
bin
/
tomcat-juli.jar
Using CATALINA_OPTS
:
NOTE
:
Picked up JDK_JAVA_OPTIONS
:
--
add-opens
=
java.base
/
java.lang
=
ALL-UNNAMED
-
-
add-opens
=
java.base
/
java.io
=
ALL-UNNAMED
--
add-opens
=
java.base
/
java.util
=
ALL
UNNAMED
--
add-opens
=
java.base
/
java.util.concurrent
=
ALL-UNNAMED
--
add
opens
=
java.rmi
/
sun.rmi.transport
=
ALL-UNNAMED
定制专用服务用户
root
@ubuntu24-16:
~
# useradd -r -s /sbin/nologin tomcat
root
@ubuntu24-16:
~
# id tomcat
uid
=
997
(tomcat) gid
=
984
(tomcat)
组
=
984
(tomcat)
更改文件权限,因为是链接文件,所以,需要执行两条命令
root
@ubuntu24-16:
~
# chown -R tomcat:tomcat /data/server/tomcat
root
@ubuntu24-16:
~
# chown tomcat:tomcat -R /data/server/tomcat/*
root
@ubuntu24-16:
~
# ll /data/server/tomcat
lrwxrwxrwx
1
tomcat tomcat
33 11
月
17 14
:
02
/
data
/
server
/
tomcat
->
/
data
/
server
/
apache-tomcat-9
.0.97
/
定制启动服务脚本
root
@ubuntu24-16:
~
# cat /lib/systemd/system/tomcat.service
[Unit]
Description
=
Tomcat
After
=
syslog.target network.target
[Service]
Type
=
forking
# Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
ExecStart
=/
data
/
server
/
tomcat
/
bin
/
startup.sh
ExecStop
=/
data
/
server
/
tomcat
/
bin
/
shutdown.sh
PrivateTmp
=
true
User
=
tomcat
Group
=
tomcat
[Install]
WantedBy
=
multi-user.target
加载服务配置
加载服务配置
root
@ubuntu24-16:
~
# systemctl daemon-reload
启动
tomcat
服务
root
@ubuntu24-16:
~
# systemctl start tomcat
root
@ubuntu24-16:
~
# systemctl status tomcat
●
tomcat.service
-
Tomcat
Loaded
:
loaded (
/
usr
/
lib
/
systemd
/
system
/
tomcat.service; disabled; preset
:
enabled)
Active
:
active (running)
浏览器访问 10.0.0.13:8080 里面的链接可以正常点击
3.rocky二进制部署tomcat
安装
java
环境
[root
@rocky9-15
~
]
# yum install java-11-openjdk -y
检查效果
[root
@rocky9-15
~
]
# java --version
openjdk 11.0.25 2024-10-15 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.25.0.9-1) (build 11.0.25+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.25.0.9-1) (build 11.0.25+9-LTS, mixed mode, sharing)
定制环境变量
[root
@rocky9-15
~
]
# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.25.0.9-3.el9.x86_64
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$JAVA_BIN:$PATH
加载环境变量
[root
@rocky9-15
~
]
# source /etc/profile.d/java.sh
[root
@rocky9-15
~
]
# mkdir /data/softs -p; cd /data/softs
[root
@rocky9-15
softs]
# wget
https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.40/bin/apache-tomcat-10.1.40.tar.gz
解压文件
[root
@rocky9-15
softs]
# mkdir /data/server
[root
@rocky9-15
softs]
# tar xf apache-tomcat-10.1.33.tar.gz -C /data/server/
定制软连接
[root
@rocky9-15
softs]
# ln -s /data/server/apache-tomcat-10.1.33
/data/server/tomcat
[root
@rocky9-15
softs]
# ls /data/server/
apache-tomcat-10
.1.33
tomcat
查看目录结构
[root
@rocky9-15
softs]
# ls /data/server/tomcat
bin conf lib logs README.
md
RUNNING.txt
webapps
BUILDING.txt CONTRIBUTING.
md
LICENSE NOTICE RELEASE-NOTES temp work
[root
@rocky9-15
softs]
# ls /data/server/tomcat/bin/
bootstrap.jar configtest.sh shutdown.sh
catalina.bat daemon.sh startup.bat
catalina.sh
【启动脚本】
digest.bat startup.sh
。。。。。
查看启动脚本
[root
@rocky9-15
softs]
# /data/server/tomcat/bin/catalina.sh
定制系统环境变量
[root
@rocky9-15
~
]
# vim /etc/profile.d/tomcat.sh
export CATALINA_BASE
=/
data
/
server
/
tomcat
export CATALINA_HOME
=/
data
/
server
/
tomcat
export CATALINA_TMPDIR
=
$CATALINA_HOME
/
temp
export CLASSPATH
=
$CATALINA_HOME
/
bin
/
bootstrap.jar
:
$CATALINA_HOME
/
bin
/
tomcat
juli.jar
export PATH
=
$CATALINA_HOME
/
bin
:
$PATH
加载系统环境变量
[root
@rocky9-15
~
]
# source /etc/profile.d/tomcat.sh
启动
tomcat
[root
@rocky9-15
~
]
# catalina.sh start
Using CATALINA_BASE
:
/
data
/
server
/
tomcat
Using CATALINA_HOME
:
/
data
/
server
/
tomcat
Using CATALINA_TMPDIR
: /
data
/
server
/
tomcat
/
temp
Using JRE_HOME
:
/
usr
/
lib
/
jvm
/
java-11-openjdk-11
.0.25.0.9
-
2.
el9.x86_64
Using CLASSPATH
:
/
data
/
server
/
tomcat
/
bin
/
bootstrap.jar
:/
data
/
server
/
tomcat
/
bin
/
tomcat-juli.jar
Using CATALINA_OPTS
:
Tomcat started.
查看端口效果
[root
@rocky9-15
~
]
# netstat -tnulp | grep java
tcp6
0
0
:::
8080
:::*
LISTEN
33657
/
java
tcp6
0
0 127.0.0.1
:
8005
:::*
LISTEN
33657
/
java
浏览器效果
4.rocky定制tomcat服务脚本
停止
tomcat
服务
[root
@rocky9-15
~
]
# catalina.sh stop
Using CATALINA_BASE
:
/
data
/
server
/
tomcat
Using CATALINA_HOME
:
/
data
/
server
/
tomcat
Using CATALINA_TMPDIR
: /
data
/
server
/
tomcat
/
temp
Using JRE_HOME
:
/
usr
/
lib
/
jvm
/
java-11-openjdk-11
.0.25.0.9
-
2.
el9.x86_64
Using CLASSPATH
:
/
data
/
server
/
tomcat
/
bin
/
bootstrap.jar
:/
data
/
server
/
tomcat
/
bin
/
tomcat-juli.jar
Using CATALINA_OPTS
:
定制
专用服务用户
[root
@rocky9-15
~
]
# useradd -r -s /sbin/nologin tomcat
[root
@rocky9-15
~
]
# id tomcat
用户
id
=
980
(tomcat)
组
id
=
979
(tomcat)
组
=
979
(tomcat)
更改文件权限
[root
@rocky9-15
~
]
# chown -R tomcat:tomcat /data/server/tomcat
[root
@rocky9-15
~
]
# chown -R tomcat:tomcat /data/server/tomcat/*
[root
@rocky9-15
~
]
# ll /data/server/tomcat
lrwxrwxrwx 1 tomcat tomcat 34 5月 5 12:36 /data/server/tomcat -> /data/server/apache-tomcat-10.1.33
定制
启动服务脚本
[root
@rocky9-15
~
]
# vim /lib/systemd/system/tomcat.service
[Unit]
Description
=
Tomcat
After
=
syslog.target network.target
[Service]
Type
=
forking
# Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
ExecStart
=/
data
/
server
/
tomcat
/
bin
/
startup.sh
ExecStop
=/
data
/
server
/
tomcat
/
bin
/
shutdown.sh
PrivateTmp
=
true
User
=
tomcat
Group
=
tomcat
[Install]
WantedBy
=
multi-user.target
加载服务配置
[root
@rocky9-15
~
]
# systemctl daemon-reload
启动
tomcat
服务
[root
@rocky9-15
~
]
# systemctl start tomcat
[root
@rocky9-15
~
]
# systemctl status tomcat
●
tomcat.service
-
Tomcat
Loaded
:
loaded (
/
usr
/
lib
/
systemd
/
system
/
tomcat.service; disabled; preset
:
enabled)
Active
:
active (running)
浏览器访问
10.0.0.13:8080
注意
-
如果遇到
tomcat
服务启动失败,因为文件权限的原因的话
报错现象:
tomcat.service
:
Failed at step EXEC spawning
/
data
/
server
/
tomcat
/
bin
/
startup.sh
:
Permission denied
解决方法:检查
SELinux
策略
[root
@rocky9-15
~
]
# setenforce 0
5.tomcat结构组成
1.tomcat目录结构
查看目录结构
[root
@rocky9-12
~
]
# ls /data/server/tomcat/
bin conf lib logs README.
md
RUNNING.txt
webapps
BUILDING.txt CONTRIBUTING.
md
LICENSE NOTICE RELEASE-NOTES temp work
功能解读;
bin
#
管理脚本文件目录
conf
#
配置文件目录
lib
#
库文件目录
logs
#
日志目录
temp
#
临时文件目录
webapps
#
应用程序目录
work
# jsp
编译后的结果文件,建议提前预热访问,升级应用后,删除此目录数据才能
更新
服务脚本中
,
使用的脚本内信息
[root
@rocky9-12
~
]
# systemctl cat tomcat.service | grep sh
ExecStart
=/
data
/
server
/
tomcat
/
bin
/
startup.sh
ExecStop
=/
data
/
server
/
tomcat
/
bin
/
shutdown.sh
上面两个脚本,本质上调用的都是
catalina.sh
[root
@rocky9-12
~
]
# cat /data/server/tomcat/bin/startup.sh | grep sh
#!/bin/sh
# this work for additional information regarding copyright ownership.
EXECUTABLE
=
catalina.sh
[root
@rocky9-12
~
]
# cat /data/server/tomcat/bin/shutdown.sh | grep sh
#!/bin/sh
# this work for additional information regarding copyright ownership.
EXECUTABLE
=
catalina.sh
2.tomcat 和 catalina 的关系
-
Web
容器:用作处理静态页面
-
JSP
容器:把
jsp
翻译成一般的
servlet
-
catalina
:是一个
servlet
容器,用于处理
servlet
Tomcat
的
servlet
容器在
4.
X
版本中被
craig McClanahan ( Apache struts
项目的创始人,也
是
Tomcat
的
Catalina
的架构帅
)
重新设计为
catalina
,即
catalina
就是
servlet
容器
3.tomcat 组件
每一个组件都有一个 Java 类来实现,在配置文件中通常用 className 来指定


组件说明

简单理解
Server
组件是
Tomcat
的顶级管理组件,代表着整个
Tomcat
运行的实例。定义了全局服务器配置。
Service
组件:是
Server
组件的子元素,是对外提供服务的实体。
Connector
组件
:
用于接收客户端请求。
Engine
组件
:
用于响应用户请求然后转交给后面的真实服务来处理请求。
组件分类
类别 说明
顶级组件 Server,代表整个Tomcat容器,一台主机可以启动多tomcat实例,确保端口不冲突服务类组件
服务类组件 Service,实现组织Engine和Connector之间关联关系, 里面只能包含一个Engine连接器组件
连接器组件 Connector,有HTTP(8080/tcp),HTTPS(8443/tcp),AJP(8009/tcp)协议的连接器
容器类 Engine、Host,Context都是容器类组件,可以嵌入其它组件,内部配置如何运行应用程序
内嵌类 可以内嵌到其他组件内,valve,logger,realm,loader,manager等。
集群类组件 listener、cluster
4.配置项
tomcat
配置目录结构
[root
@rocky9-12
~
]
# tree /data/server/tomcat/conf/
/
data
/
server
/
tomcat
/
conf
/
├──
Catalina
#
每个项目的单独配置文件存放目录
│
└──
localhost
#
对应一个
virtualhost
├──
catalina.policy
# java
程序对各目录的权限配置
├──
catalina.properties
# tomcat
环境变量配置以及
jvm
调优相关参数
├──
context.xml
# web
项目默认的上下文配置
├──
jaspic-providers.xml
# jaspic
配置
├──
jaspic-providers.xsd
#
上述文件中的标签取值约束
├──
logging.properties
# tomcat
的日志配置,定义日志级别,格式等
├──
server.xml
#
主配置文件,用于配置整个
Tomcat
服务器基本结构和行为
├──
tomcat-users.xml
#
用户配置文件,用于配置
Tomcat
的用户、角色和其对应的权限
├──
tomcat-users.xsd
#
上述文件中的标签取值约束
└──
web.xml
# Web
项目部署的默认配置,每个项目也可使用独立配置
server.xml 是tomcat的主配置文件 web.xml web的首页文件,会话数据复制
5.web.xml
/
data
/
server
/
tomcat
/
conf
/
web.xml
文件是
Apache Tomcat
中用于配置
Web
应用程序的部署
描述符(
Deployment Descriptor
)文件,采用
XML
格式。在这个文件中,可以配置许多与
Web
应用程序相关的设置。以下是一些常见的配置项及其含义
在基于
Java
的
Web
应用程序中,
web.xml
文件扮演着至关重要的角色,它主要用于配置
Web
应用程序的 各种组件和行为。
和
元素用于定义 Servlet
元素用于将 Servlet 映射到 URL 模式
# web.xml 用于注册和配置Servlet,包括Servlet的名称、类名、URL映射以及初始化参数等。
和
元素用于定义过滤器
元素用于将过滤器映射到 URL 模式
# 过滤器(Filter)用于在请求到达Servlet之前或响应发送给客户端之前对请求或响应进行预处理。
web.xml 中可以配置过滤器的名称、类名以及它应该过滤的URL模式。
元素用于定义监听器,例如监听 ServletContext、HttpSession 等对象的生命周期
事件
# 监听器(Listener)用于监听Web应用程序中的事件,如上下文初始化、会话创建和销毁等。通过
web.xml 可以配置监听器的类名。
元素用于定义默认的欢迎文件,当用户访问根路径时,将尝试展示这些文件
# web.xml 可以指定Web应用程序的欢迎页面,当用户访问Web应用程序的根URL时,将显示这些页面
中的一个。
元素用于定义错误页面,指定当发生特定 HTTP 错误码时应该显示的页面
# 可以配置特定错误码或异常类型对应的错误处理页面。
# 可以设置会话的超时时间等会话相关的参数。
6.server.xml
/
data
/
server
/
tomcat
/
conf
/
server.xml
文件是
Apache Tomcat
中的主要配置文件之一,用
于配置
Tomcat
服务器的全局设置、连接器(
Connectors
)、虚拟主机(
Virtual Hosts
)等。以下是一些
server.xml
文件中可能包含的主要配置项及其含义的简要解释
# Server
元素是配置整个
Tomcat
服务器的根元素,它包含了
Tomcat
的全局设置
# className
指定实现此组件的
java
类,默认org.apache.catalina.core.StandardServer
# port
定义关闭服务的端口,
-1
表示禁用远程关闭
# shutdown="SHUTDOWN"
终止服务时要发送给服务端的字符串
# address
监听端口绑定的地址,不指定默认为
localhost
# Listener
是监听器配置,指定监听器的特性,日志、内存泄露、应用创建销毁等
#
多种不同的监听功能,分别有哪些类代码来实现
#
它不是为客户端请求准备的,它的对象是应用内部的各种资源
#
配置全局命名资源
#
元素定义了
Tomcat
中的一个服务
(
实例
)
,一个
tomcat
服务器可以开多个实例,不同实例可以监听不同的端口,使用不同的配置和部署不同的web
应用程序,每个实例被定义成一个Service,一个
Service
可以包含多个连接器和多个虚拟主机
# className
指定实现的
java
类,默认org.apache.catalina.core.StandardService
# name
指定实例名称
。。。。。
7.tomcat的web目录
[root
@rocky9-12
]
# tree -L 1 /data/server/tomcat/webapps/
/
data
/
server
/
tomcat
/
webapps
/
├──
docs
#
包含
Tomcat
的文档,包括用户指南、配置示例、
API
文档等。
├──
examples
#
包含一些
Tomcat
的示例应用程序,这用于演示如何使用Tomcat的各种功能。
├──
host-manager
# Tomcat
的管理应用程序,用于
管理Tomcat中的虚拟主机
。
├──
manager
#
另一个
Tomcat
的管理应用程序,用于
管理部署在Tomcat上的Web应用程序
。
└──
ROOT
# ROOT
目录是
Tomcat
的默认
Web
应用程序的根目录。
8.两个特殊的目录
WEB-INF目录:可以理解为“Web Information”的缩写
#ls /data/server/tomcat/webapps/
ROOT/WEB-INF
/
web.xml
功能作用:
WEB-INF
目录是
Java Web
应用程序中的一个标准目录,它主要用于存放
Web
应用程序的配置文件、类文件、库文件以及其他资源文件,这些文件和资源不会直接暴露给外部用户。
WEB-INF
目录中最常见的配置文件是
web.xml
。
web.xml
是
Java Web
应用程序的部署描述符文件,它包含了
Servlet
、
Filter
、
Listener
、会话配置、欢迎页面、错误页面等关键配置信息。这个文件对于
Web
应用程序的启动和运行至关重要。
META-INF 目录:通常可以理解为“Meta Information”的缩写
# ls /data/server/tomcat/webapps/
manager/META-INF
/
context.xml
功能作用:
META-INF
是
Java
应用程序中的一个标准目录,用于存放元数据。这些元数据信息可以包括配置文件、版本信息、扩展点描述等。
在
Java Web
应用程序中,
META-INF
目录通常位于
WAR
文件的根目录下,或者在
Tomcat
等
Web
服务器的
webapps
目录下某个应用程序的根目录(如
/
data
/
server
/
tomcat
/
webapps
/
manager
/
中的
META-INF
)。在
Java
的
Maven
项目中,
META-INF
目录也常出现在
JAR
文件或
EAR
文件的根目录下。
META-INF
目录常用于存放各种配置文件,这些文件定义了应用程序的行为和参数。例如,
context.xml
文件(如您所提到的)在
Tomcat
中用于配置应用程序的上下文参数,如数据源、资源链接等。
小结
需要注意的是,
META-INF
和
WEB-INF
都是
Java Web
应用程序中的标准目录,但它们的用途和存放的内容有所不同。
META-INF
更侧重于
存放与应用程序相关的元数据信息
,而
WEB-INF
则更侧重于
存放Web应用程序的配置文件和资源文件
。
9.上下文
上下文提供了理解和处理某个事件或信息所必需的背景信息。在计算机和编程领域,尤其是当我们谈论Web应用程序和
Tomcat
服务器时,
“
上下文
”
有着特定的含义。
功能定位
以
Tomcat
服务器为例,上下文(
Context
)是指一个
Web
应用程序在
Tomcat
中的运行环境。每个
Web
应用程序都有自己的上下文,这个上下文包含了应用程序的配置信息、资源文件、类文件等。你可以把上下文想象成一个容器,它封装了
Web
应用程序的所有相关信息,使得
Tomcat
能够正确地识别、加载和处理该应用程序的请求。
角色作用
当你在
Tomcat
中部署一个
Web
应用程序时,
Tomcat
会为该应用程序创建一个上下文。这个上下文会根据应用程序的配置文件(如
web.xml
)来初始化,并加载应用程序所需的所有资源。然后,当客户端发送请求到
Tomcat
服务器时,
Tomcat
会根据请求的
URL
找到对应的上下文,并将请求传递给该上下文中的
Web
应用程序进行处理。
上下文在
Tomcat
中起到了至关重要的作用,它使得
Tomcat
能够同时托管多个独立的
Web
应用程序,并根据请求正确地找到并处理对应的应用程序。
1.5 日志的配置
[root@
rocky9-12
~]#
cat /data/server/tomcat/conf/logging.properties | grep -Ev "#|^$"
handlers
=
1
catalina.org.apache.juli.AsyncFileHandler,
2l
ocalhost.org.apache.juli.AsyncFileHandler,
3
manager.org.apache.juli.AsyncFileHandler,
4
host
manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
。。。。。
[root
@rocky9-12
~
]
# tree /data/server/tomcat/logs/
/
data
/
server
/
tomcat
/
logs
/
├──
catalina.
2025
-
05
-
05
.log
# tomcat
启动和停止过程中的日志
├──
catalina.out
# tomcat
中标准输出和标准错误输出日志,对于系统调试和错误排查非常重要。
├──
localhost
.2025
-
05
-
05
.log
#
主要记录虚拟主机的启动、部署应用以及遇到的异常问题。
└──
localhost_access_log
.2025
-
05
-
05
.txt
# web
应用访问日志,可自定义格式
如果
tomcat
另开启了其他的功能,还会有如下日志
├──
host-manager
.2025
-
05
-
05
.log
# tomcat
中自带的
host-manager
项目的日志
└──
manager
.2025
-
05
-
05
.log
# tomcat
中自带的
manager
项目日志
1.web应用级别日志
默认
WEB
访问日志
[root
@ubuntu
~
]
# cat /data/server/tomcat/conf/server.xml
。。。。
className
=
"org.apache.catalina.valves.AccessLogValve"
#
日志类
directory
=
"logs"
#
日志文件目录
prefix
=
"localhost_access_log"
#
日志文件前缀
suffix
=
".txt"
#
日志文件后缀
pattern
=
"%h %l %u %t "%r" %s %b"
#
日志文件内容格式
%
h
#
客户端主机名,如果
connector
的
enableLookups
属性值为
false
,则此变量值为
客户端主机
IP
%
l
#
从
identd
获取的远程逻辑用户名,如终返回
-
%
u
#
远程登录的用户名,如果没有返回
-
%
t
#
请求时间
&
quot;
#
双引号
%
r
#
请求头的第一行,包括请求方法,被请求的资源路径,
HTTP
协议版本
%
s
# HTTP
协议的响应状态码
%
b
#
响应数据的内容长度,如果是
0
字节用
-
表示
2. 自定义日志实践
修改配置文件
[root
@rocky9-12
~
]
# vim /data/server/tomcat/conf/server.xml
..
.
<
Valve className
=
"org.apache.catalina.valves.AccessLogValve"
directory
=
"logs"
prefix
=
"localhost_access_log"
suffix
=
".txt"
pattern
=
"
{"clientip":"%h","ClientUser":"%l","
;authenticated":"%u","AccessTime":"%t","
method":"%r","status":"%s","SendBytes&qu
ot;:"%b","Query?
string":"%q","partner":"%
{Referer}i","AgentVersion":"%{User-Agent}i"}"
/>
#
注释掉原来的
pattern
最主要是复制pattern
pattern="{"clientip":"%h","ClientUser":"%l","authenticated":"%u","AccessTime":"%t","method":"%r","status":"%s","SendBytes":"%b","Query?string":"%q","partner":"%{Referer}i","AgentVersion":"%{User-Agent}i"}" />
注意:
&
quot;
其实指的就是双引号
。
直接使用双引号可能会引起解析错误,因为双引号常被用作属性值的界定符。
重启
tomcat
服务
[root
@rocky9-12
~
]
# systemctl restart tomcat.service
测试访问
[root
@rocky9-12
~
]
# curl 127.1:8080
效果如下
json格式化显示 (
JSON在线解析格式化验证 - JSON.cn)
1.6 应用访问
1.默认的访问接口
查看默认的应用目录
[root
@rocky9-12
~
]
# ls -1 /data/server/tomcat/webapps/
docs
# http://10.0.0.12:8080/docs
examples
# http://10.0.0.12:8080/examples
host-manager
# http://10.0.0.12:8080/host-manager
manager
# http://10.0.0.12:8080/manager
ROOT
# http://10.0.0.12:8080/ #
默认的首页
2.其他的访问接口
[root@
rocky9-12 ~]# curl 10.0.0.12:8080/docs/ -I
HTTP/1.1 403
Content-Type: text/html;charset=UTF-8
Date: Mon, 05 May 2025 07:52:36 GMT
[root
@rocky9-12
~
]
# tail -n4 /data/server/tomcat/webapps/docs/META
INF/context.xml
<
Context antiResourceLocking
=
"false"
>
<
Valve className
=
"org.apache.catalina.valves.RemoteAddrValve"
#
为限定了只能通过本机
IP
访问
,
所以,其他主机访问都会返回
403
allow
=
"127.d+.d+.d+|::1|0:0:0:0:0:0:0:1"
/>
Context
>
确认效果
[root
@rocky9-12
~
]
# curl 127.0.0.1:8080/docs/ -I
HTTP
/
1.1 200
Accept-Ranges
:
bytes
ETag
:
W
/
"14888-1731018535000"
Last-Modified: Thu, 07 Nov 2024 22:28:55 GM
Content-Type
:
text
/
html
DDate: Mon, 05 May 2025 07:55:43 GMT
结果显示:
只能通过
127.0.0.1
来进行访问
修改context.xml 文件,实现访问,无需重启tomcat服务
修改配置,注释掉访问
IP
限制,再次刷新即可
[root
@rocky9-12
~
]
# tail -n6 /data/server/tomcat/webapps/docs/META
INF/context.xml
<
Context antiResourceLocking
=
"false"
>
Context
>
测试结果
3.访问其他的入口
Documentation ,Configuration 导航对应的项目目录是 docs,修改下列配置
[root
@rocky9-12
tomcat]
# cat webapps/
docs/
META-INF/context.xml
<
?
xml version
=
"1.0"
encoding
=
"UTF-8"
?
>
<
Context antiResourceLocking
=
"false"
>
#
将此行注释,或者添加允许访问的
IP |10.0.0.d+
,或注释掉
<
Valve className
=
"org.apache.catalina.valves.RemoteAddrValve"
allow
=
"127.d+.d+.d+|::1|0:0:0:0:0:0:0:1|
10.0.0.d+
"
/>
Context
>
Examples 导航对应的项目目录是 examples,修改下列配置
[root
@rocky9-12
tomcat]
# cat webapps/
examples/
META-INF/context.xml
<
?
xml version
=
"1.0"
encoding
=
"UTF-8"
?
>
<
Context
>
。。。。。
#
将此行注释,或者添加允许访问的
IP |10.0.0.d+
,或注释掉
<
Valve className
=
"org.apache.catalina.valves.RemoteAddrValve"
allow
=
"127.d+.d+.d+|::1|0:0:0:0:0:0:0:1|
10.0.0.d+
"
/>
Context
>
Server Status 是状态查看页; Manager App 是应用管理;Host Manager 是虚拟主机管理;Server
Status,Manager App 导航对应的项目目录是 manager,根据页面提示,修改下列配置
Host Manager
是虚拟主机管理
,
对应的项目目录是
host-manager,
根据页面提示,修改下列配置
[root
@rocky9-12
tomcat]
# cat webapps/
host-manager/
META-INF/context.xml
同上
增加管理用户
默认情况下,无论是进入
Server Status
、
Manager App
、
Host Manager
这三个中的任意一
个,都会跳入一个页面,效果如下
需要我们通过一个管理用户进入到这些页面里面,可以修改
conf
/
tomcat-users.xml
文件来实现。
添加几个用户和角色组
[root
@rocky9-12
tomcat]
# tail -n5 conf/tomcat-users.xml
<
role rolename
=
"admin-gui"
/>
<
role rolename
=
"manager-gui"
/>
<
role rolename
=
"manager-status"
/>
<
user username
=
"tomcat"
password
=
"s3cret"
roles
=
"admin-gui,manager-gui,manager
status"
/>
tomcat-users
>
重启
tomcat
服务
[root
@rocky9-12
tomcat]
# systemctl restart tomcat
再次浏览器尝试访问
注意:必须要先开启Server Status 、Manager App、Host Manager访问入口
4.jsp页面访问
创建新目录,并部署页面
[root
@rocky9-12
~
]
# cd /data/server/tomcat/webapps/
[root
@rocky9-12
webapps]
# mkdir haha
定制页面
[root
@rocky9-12
webapps]
# cat haha/index.html
Hello World
[root
@rocky9-12
webapps]
# cat haha/index.jsp
<%
@
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
>
hello world
! <
br
/>
<%
out.println(
"this is test page"
);
%><
br
/>
<%=
request.getRequestURL()
%>
body
>
html
>
配置解析
<%=
request.getRequestURL()
%>
配置段
=
号两侧不允许有任何空格
[root
@rocky9-12
webapps]
# curl 10.0.0.12:8080/haha/
Hello World
[root
@rocky9-12
webapps]
# curl 10.0.0.12:8080/haha/index.jsp
jsp
hello world!
this is test page
http://10.0.0.12:8080/haha/index.jsp
5.jsp访问解析
因为采用的是
jsp
字节码方式访问的,所以会生成配套的缓存
[root
@rocky9-12
tomcat]
# tree /data/server/tomcat/work/Catalina/localhost/dira/
/
data
/
server
/
tomcat
/
work
/
Catalina
/
localhost
/
dira
/
index_jsp.class
# java
字节码,非文本格式
index_jsp.java
# servlet
代码
修改
JSP
文件
echo 123 > haha/test.jsp
curl 10.0.0.12:8080/haha/index.jsp
结果生成了新的缓存文件
[root
@rocky9-12
webapps]
# cd ../work/Catalina/localhost/haha/org/apache/jsp/
[root
@rocky9-12
jsp]
# ll
6.定制访问端口实践
修改默认端口为
80
[root
@rocky9-12
tomcat]
# grep -A5 '
<
Connector port
=
"80"
protocol
=
"HTTP/1.1"
connectionTimeout
=
"20000"
redirectPort
=
"8443"
maxParameterCount
=
"1000"
/>
[root
@rocky9-12
tomcat]
# systemctl restart tomcat
查看端口服务
[root
@rocky9-12
tomcat]
# netstat -tnulp | grep 80
tcp6
0
0 127.0.0.1
:
8005
:::*
LISTEN
2374
/
java
查看日志
[root
@rocky9-12
tomcat]
# grep 80 logs/catalina.out
。。。。
修改默认端口为
8000
同样的步骤 这里略
最后可以正常访问
7.远程管理端口
8005
是远程管理端口,普通用户可以通过此端口关闭
tomcat
[root
@rocky9-12
tomcat]
# grep 8005 conf/server.xml
# Tomcat
的
8005
端口是用于
Shutdown
命令的监听端口
#
当
Tomcat
收到通过这个端口发送的匹配此字符串
SHUTDOWN
的命令时,它会启动关闭过程。
<
Server port
=
"8005"
shutdown
=
"SHUTDOWN"
>
查看端口
[root
@rocky9-12
tomcat]
# netstat -tnulp | grep 8005
tcp6
0
0 127.0.0.1
:
8005
:::*
LISTEN
2514
/
java
普通用户通过此端口关闭
tomcat
,
需要提前用
root
用户安装
telnet
命令
[root
@rocky9-12
tomcat]
# su - li#
切换普通用户
[li
@rocky9-12
~
]
$
telnet
127.1 8005
#
连接
tomcat
Trying
127.0.0.1
..
.
Connected to
127.1
.
Escape character is
'^]'
.
SHUTDOWN
#
发送管理命令
SHUTDOWN
Connection closed by foreign host.
[li
@rocky9-12
~
]
$
exit
注销
检测服务状态
[root
@rocky9-12
tomcat]
# systemctl is-active tomcat
inactive
结果显示:
tomcat
服务已经关闭了
8.禁用远程关闭
通过
0
端口
--
使用随机端口 或者随机乱码字符串来实现,禁用远程关闭
[root
@rocky9-12
tomcat]
# grep SHUTDOWN conf/server.xml
<
Server port
=
"0"
shutdown
=
"SHUTDOWN"
>
重启服务
[root
@rocky9-12
tomcat]
# systemctl restart tomcat.service
上述结果显示:
管理端口更改为随机端口了
而且每次重启的端口都不一样
禁用端口服务
-
1
表示禁用端口服务
[root
@rocky9-12
tomcat]
# grep SHUTDOWN conf/server.xml
<
Server port
=
"-1"
shutdown
=
"SHUTDOWN"
>
重启服务后,发现没有了管理端口
[root
@rocky9-12
tomcat]
# systemctl restart tomcat.service
[root
@rocky9-12
tomcat]
# netstat -tnulp | grep java
tcp6
0
0
:::
8000
:::*
LISTEN
2863
/
java