一 简述
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。Tomcat 是由 Apache 开发的一个 Servlet 容器,实现了对 Servlet 和 JSP 的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。
Tomcat和nginx、Apache、(httpd)等web服务器一样,具有处理html页面的功能,另外他还是一个servlet和jsp容器,独立的servlet容器是tomcat的默认模式。不过tomcat处理静态html的能力不如nginx/Apache服务器
Tomcat安装是基于JDK安装的,JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
二 部署
2.1 下载地址
tomcat:
https://tomcat.apache.org/
jdk:
https://www.oracle.com/cn/java/technologies/downloads/
2.2 将包上传至服务器中
[root@web01 weihu]# ll -tr
总用量 198M
-rw-r--r-- 1 root root 186M 5月 6 2020 jdk-8u211-linux-x64.tar.gz
-rw-r--r-- 1 root root 12M 5月 9 19:37 apache-tomcat-9.0.75.tar.gz
2.3 安装jdk和tomcat
jdk我已经提前装好了,这里就不演示安装过程了
[root@web01 weihu]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
解压tomcat安装包到指定目录
[root@web01 weihu]# tar -xf apache-tomcat-9.0.75.tar.gz -C /usr/local/
[root@web01 weihu]# mv /usr/local/apache-tomcat-9.0.75/ /usr/local/tomcat-9.0.75
[root@web01 weihu]# cd /usr/local/
[root@web01 local]# cd tomcat-9.0.75/
[root@web01 tomcat-9.0.75]# ll -tr
总用量 148K
drwxr-x--- 2 root root 4.0K 5月 4 2023 work
drwxr-x--- 7 root root 4.0K 5月 4 2023 webapps
-rw-r----- 1 root root 17K 5月 4 2023 RUNNING.txt
-rw-r----- 1 root root 6.8K 5月 4 2023 RELEASE-NOTES
-rw-r----- 1 root root 3.4K 5月 4 2023 README.md
-rw-r----- 1 root root 2.3K 5月 4 2023 NOTICE
drwxr-x--- 2 root root 4.0K 5月 4 2023 logs
-rw-r----- 1 root root 56K 5月 4 2023 LICENSE
-rw-r----- 1 root root 6.1K 5月 4 2023 CONTRIBUTING.md
drwx------ 2 root root 4.0K 5月 4 2023 conf
-rw-r----- 1 root root 20K 5月 4 2023 BUILDING.txt
drwxr-x--- 2 root root 4.0K 5月 18 21:44 lib
drwxr-x--- 2 root root 4.0K 5月 18 21:44 temp
drwxr-x--- 2 root root 4.0K 5月 18 21:44 bin
2.4 启动tomcat
#可以进入bin目录查看
[root@web01 bin]# ll -tr
总用量 900K
-rwxr-x--- 1 root root 1.9K 5月 4 2023 version.sh
-rw-r----- 1 root root 2.0K 5月 4 2023 version.bat
-rwxr-x--- 1 root root 5.5K 5月 4 2023 tool-wrapper.sh
-rw-r----- 1 root root 4.5K 5月 4 2023 tool-wrapper.bat
-rw-r----- 1 root root 428K 5月 4 2023 tomcat-native.tar.gz
-rw-r----- 1 root root 48K 5月 4 2023 tomcat-juli.jar
-rwxr-x--- 1 root root 1.9K 5月 4 2023 startup.sh
-rw-r----- 1 root root 2.0K 5月 4 2023 startup.bat
-rwxr-x--- 1 root root 1.9K 5月 4 2023 shutdown.sh
-rw-r----- 1 root root 2.0K 5月 4 2023 shutdown.bat
-rwxr-x--- 1 root root 4.3K 5月 4 2023 setclasspath.sh
-rw-r----- 1 root root 3.8K 5月 4 2023 setclasspath.bat
-rwxr-x--- 1 root root 3.4K 5月 4 2023 makebase.sh
-rw-r----- 1 root root 3.6K 5月 4 2023 makebase.bat
-rwxr-x--- 1 root root 2.0K 5月 4 2023 digest.sh
-rw-r----- 1 root root 2.1K 5月 4 2023 digest.bat
-rwxr-x--- 1 root root 8.9K 5月 4 2023 daemon.sh
-rwxr-x--- 1 root root 1.9K 5月 4 2023 configtest.sh
-rw-r----- 1 root root 2.0K 5月 4 2023 configtest.bat
-rw-r----- 1 root root 210K 5月 4 2023 commons-daemon-native.tar.gz
-rw-r----- 1 root root 26K 5月 4 2023 commons-daemon.jar
-rwxr-x--- 1 root root 2.0K 5月 4 2023 ciphers.sh
-rw-r----- 1 root root 2.1K 5月 4 2023 ciphers.bat
-rw-r----- 1 root root 1.7K 5月 4 2023 catalina-tasks.xml
-rwxr-x--- 1 root root 25K 5月 4 2023 catalina.sh
-rw-r----- 1 root root 17K 5月 4 2023 catalina.bat
-rw-r----- 1 root root 35K 5月 4 2023 bootstrap.jar
[root@web01 bin]#
# 有两种方式启动和停止,用哪一种都可以
#第一种:
[root@web01 bin]# /usr/local/tomcat-9.0.75/bin/startup.sh //启动
[root@web01 bin]# /usr/local/tomcat-9.0.75/bin/shutdown.sh //停止
#第二种:
[root@web01 bin]# /usr/local/tomcat-9.0.75/bin/catalina.sh start //启动
[root@web01 bin]# /usr/local/tomcat-9.0.75/bin/catalina.sh stop //停止
#启动后查看端口
[root@web01 bin]# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 128 [::]:22 [::]:*
[root@web01 bin]#
端口解释:
8005是tomcat本身的端口
8080端口是负责建立http连接,通过浏览器访问tomcat服务器的web应用时,使用的就是这个连接器,也就是访问的是8080端口。
还有一个端口是8009端口,不过这个端口在新版本后没有了,这个端口是负责和其他的http服务器建立连接把tomcat与其他http服务器集成时,就需要用到这个端口。
2.5 访问测试
http://IP:8080
三 目录结构及配置文件详解
tomcat目录结构
[root@web01 ~]# cd /usr/local/tomcat-9.0.75/
[root@web01 tomcat-9.0.75]# tree -L 1
.
├── bin # 服务启动、停止等相关程序和文件
├── BUILDING.txt
├── conf #配置文件
├── CONTRIBUTING.md
├── lib #库目录
├── LICENSE
├── logs #日志目录
├── NOTICE
├── README.md
├── RELEASE-NOTES
├── RUNNING.txt
├── temp
├── webapps #应用程序,应用部署的目录
└── work #jsp编译后的结果文件
7 directories, 7 files
[root@web01 tomcat-9.0.75]#
配置文件详解
[root@web01 conf]# tree -L 1
.
├── Catalina
├── catalina.policy
├── catalina.properties
├── context.xml
├── jaspic-providers.xml
├── jaspic-providers.xsd
├── logging.properties
├── server.xml
├── tomcat-users.xml
├── tomcat-users.xsd
└── web.xml
1 directory, 10 files
[root@web01 conf]#
解释:
server.xml 主配置文件
web.xml 每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置,每个web应用也可以使用专用配置文件,来覆盖全局文件
context.xml 用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自已专用的配置,它通
常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件
tomcat-users.xml 用户认证的账号和密码文件
catalina.policy 当使用security选项启动tomcat时,用于为tomcat设置安全策略
catalina.properties Tomcat 环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数
logging.properties Tomcat 日志系统相关的配置,可以修改日志级别和日志路径等
日志结构详解
[root@web01 conf]# ls -1 /usr/local/tomcat-9.0.75/logs/
catalina.2024-05-18.log #服务日志
catalina.2024-05-19.log #服务日志
catalina.out #服务日志
host-manager.2024-05-18.log #host manager管理日志
host-manager.2024-05-19.log
localhost.2024-05-18.log #默认主机日志
localhost.2024-05-19.log
localhost_access_log.2024-05-18.txt #默认主机访问日志
localhost_access_log.2024-05-19.txt
manager.2024-05-18.log #manager管理日志
manager.2024-05-19.log
日志格式配置说明(默认配置)
[root@web01 conf]# vim /usr/local/tomcat-9.0.75/conf/server.xml
······
<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) - 当前请求的线程名称
"在html中表示双引号"符号
示例:tomcat日志实现json格式的访问日志
默认格式为:
[root@web01 conf]# tail -10f /usr/local/tomcat-9.0.75/logs/localhost_access_log.2024-05-19.txt
11.0.1.1 - - [19/May/2024:09:37:59 +0800] "GET /tomcat.css HTTP/1.1" 200 5542
11.0.1.1 - - [19/May/2024:09:37:59 +0800] "GET /bg-nav.png HTTP/1.1" 200 1401
11.0.1.1 - - [19/May/2024:09:37:59 +0800] "GET /asf-logo-wide.svg HTTP/1.1" 200 27235
11.0.1.1 - - [19/May/2024:09:37:59 +0800] "GET /bg-upper.png HTTP/1.1" 200 3103
11.0.1.1 - - [19/May/2024:09:37:59 +0800] "GET /bg-button.png HTTP/1.1" 200 713
11.0.1.1 - - [19/May/2024:09:37:59 +0800] "GET /bg-middle.png HTTP/1.1" 200 1918
11.0.1.1 - - [19/May/2024:09:38:00 +0800] "GET /favicon.ico HTTP/1.1" 200 21630
11.0.1.1 - - [19/May/2024:09:42:12 +0800] "GET /manager/status HTTP/1.1" 403 3446
11.0.1.1 - - [19/May/2024:12:35:41 +0800] "GET /manager/status HTTP/1.1" 403 3446
11.0.1.1 - - [19/May/2024:12:35:50 +0800] "GET / HTTP/1.1" 200 11230
修改配置文件
[root@web01 logs]# vim /usr/local/tomcat-9.0.75/conf/server.xml
// 修改为下面内容,注意这是一整行内容
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"}"/>
修改完成重启tomcat服务
再次查看日志已经显示为json格式的日志
[root@web01 logs]# tail -10f /usr/local/tomcat-9.0.75/logs/localhost_access_log.2024-05-19.txt
{"clientip":"11.0.1.1","ClientUser":"-","authenticated":"-","AccessTime":"[19/May/2024:12:52:34 +0800]","method":"GET / HTTP/1.1","status":"200","SendBytes":"11230","Query?string":"","partner":"-","AgentVersion":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"}
{"clientip":"11.0.1.1","ClientUser":"-","authenticated":"-","AccessTime":"[19/May/2024:12:52:35 +0800]","method":"GET / HTTP/1.1","status":"200","SendBytes":"11230","Query?string":"","partner":"-","AgentVersion":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"}
{"clientip":"11.0.1.1","ClientUser":"-","authenticated":"-","AccessTime":"[19/May/2024:12:52:59 +0800]","method":"GET / HTTP/1.1","status":"200","SendBytes":"11230","Query?string":"","partner":"-","AgentVersion":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"}