Tomcat服务部署

目录

[一. Tomcat概述](#一. Tomcat概述)

[1.1 什么是Tomcat](#1.1 什么是Tomcat)

[1.2 安装Tomcat](#1.2 安装Tomcat)

[1.2.1 CentOS7 安装](#1.2.1 CentOS7 安装)

[1.2.2 ubuntu 安装](#1.2.2 ubuntu 安装)

[1.2.3 使用脚本快速安装](#1.2.3 使用脚本快速安装)

[二. 配置文件及核心组件](#二. 配置文件及核心组件)

[2.1 配置文件](#2.1 配置文件)

[2.1.1 安装目录下文件介绍](#2.1.1 安装目录下文件介绍)

[2.1.2 conf子目录](#2.1.2 conf子目录)

[2.2 组件](#2.2 组件)

[三. tomcat 处理请求过程](#三. tomcat 处理请求过程)

[四. 常见配置详解](#四. 常见配置详解)

[4.1 主页文件的优先级](#4.1 主页文件的优先级)

[4.2 状态页](#4.2 状态页)

[4.2.1 开启状态页(只能在本机登录)](#4.2.1 开启状态页(只能在本机登录))

[4.2.2 开启允许远程状态页](#4.2.2 开启允许远程状态页)

[4.3 常见的端口](#4.3 常见的端口)

[五. 虚拟主机配置](#五. 虚拟主机配置)

[六. tomcat nginx 动静分离](#六. tomcat nginx 动静分离)

[6.1 配置单级反向代理](#6.1 配置单级反向代理)

[6.2 多级反向代理](#6.2 多级反向代理)

[七. 实现Java项目](#七. 实现Java项目)

[7.1 自建博客](#7.1 自建博客)


一. Tomcat概述

1.1 什么是Tomcat

Tomcat 是一个开源的 Java Servlet 容器Web 服务器 ,由 Apache 软件基金会开发和维护。它实现了 Java EE(Jakarta EE) 中的 Servlet、JSP(JavaServer Pages)和 WebSocket 规范,是运行 Java Web 应用程序的核心环境之一。

1.2 安装Tomcat

注意:安装tomcat 前必须先部署JDK。

JDK(Java Development Kit,Java 开发工具包 是 Oracle 公司(原 Sun 公司)提供的 Java 开发核心工具包 ,用于 开发、编译和运行 Java 程序 。它是 Java 生态系统的基石,包含 JRE(Java 运行时环境)开发工具(如编译器、调试器)。)

1.2.1 CentOS7 安装

复制代码
#在centos7-1上安装

cd /data/

#拖入Java开发工具包(JDK)和Tomcat服务器的压缩包

ls
复制代码
tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local/
tar xf apache-tomcat-9.0.16.tar.gz -C /usr/local/

cd /usr/local
ls
复制代码
ln -s jdk1.8.0_291/ jdk

#配置JDK的环境变量,让系统正确识别Java相关命令
vim /etc/profile.d/jdk.sh

export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre 
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
复制代码
#加载并执行 /etc/profile.d/jdk.sh 文件中的内容。
source /etc/profile.d/jdk.sh

#检查当前系统中安装的 Java 版本。
java -version

#创建一个符号链接(软链接)。
ln -s apache-tomcat-9.0.16/ tomcat

#创建一个名为 tomcat 的系统用户。
useradd tomcat

#更改目录及其内容的所属用户和组。
chown tomcat:tomcat  apache-tomcat-9.0.16/ -R

#定义 Tomcat 服务的运行方式
vim /usr/lib/systemd/system/tomcat.service

[Unit]
Description=Tomcat
After=syslog.target network.target

[Service]
Type=forking
Environment=PATH=$PATH:$JAVA_HOME/bin
Environment=CLASSPATH=/usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Environment=CATALINA_HOME=/usr/local/tomcat
Environment=JAVA_HOME=/usr/local/jdk
Environment=CATALINA_HOME=/usr/local/tomcat
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/jdk/bin
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target
复制代码
systemctl daemon-reload
systemctl start tomcat
systemctl status tomcat

1.2.2 ubuntu 安装

复制代码
#在ubuntu 1上安装

cd /opt/

#拖入Java开发工具包(JDK)和Tomcat服务器的压缩包

ls
复制代码
tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local/

tar xf apache-tomcat-9.0.16.tar.gz -C /usr/local/

cd /usr/local

ls
复制代码
ln -s jdk1.8.0_291/ jdk

vim /etc/profile.d/jdk.sh

export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre 
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
复制代码
source /etc/profile.d/jdk.sh

java -version


useradd tomcat

chown tomcat:tomcat apache-tomcat-9.0.16/ -R
ln -s apache-tomcat-9.0.16/ tomcat
ls
vim /usr/lib/systemd/system/tomcat.service

After=syslog.target network.target

[Service]
Type=forking
Environment=PATH=$PATH:$JAVA_HOME/bin
Environment=CLASSPATH=/usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Environment=CATALINA_HOME=/usr/local/tomcat
Environment=JAVA_HOME=/usr/local/jdk
Environment=CATALINA_HOME=/usr/local/tomcat
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/jdk/bin
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target
复制代码
systemctl daemon-reload
systemctl start tomcat
systemctl status tomcat

1.2.3 使用脚本快速安装

复制代码
centos7-2

cd /data/

#拖入拖入Java开发工具包(JDK)Tomcat服务器的压缩包和运行脚本
复制代码
#运行脚本
bash install_tomcat_.sh

systemctl status tomcat

二. 配置文件及核心组件

2.1 配置文件

2.1.1 安装目录下文件介绍

目录名字 功能
bin 存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.shstartup.shshutdown.sh 三个文件
conf 存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。
lib 存放 Tomcat 服务器的 jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的 jar 包
logs 存放 Tomcat 日志 catalina.out比较常使用
temp 存放 Tomcat 运行时产生的文件
webapps 存放项目资源的目录
work Tomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到(升级版本时注意要删除里面的缓存)

2.1.2 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选项启动omcat时,用于为tomcat设置安全策略
catalina.properties Tomcat环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数
logging.properties Tomcat日志系统相关的配置,可以修改日志级别和日志路径等
注意配置文件对于大小写敏感

2.2 组件

(1) Server

  • 作用:Tomcat 的顶级容器,代表整个 Tomcat 实例。

  • 功能:管理所有其他组件(如 Service 和 Connector)的生命周期。

(2) Service

  • 作用:将 Connector 和 Engine 组合在一起,形成一个完整的服务。

  • 功能:一个 Server 可以包含多个 Service,每个 Service 可以独立运行。

(3) Connector

  • 作用:负责处理客户端请求并将其传递给 Engine。

  • 功能:支持多种协议(如 HTTP、HTTPS、AJP)。

  • 示例

    • HTTP/1.1 Connector:处理 HTTP 请求。

    • AJP Connector:处理 Apache HTTP Server 与 Tomcat 之间的通信。

(4) Engine

  • 作用:处理所有请求的核心组件。

  • 功能:管理多个 Host(虚拟主机)并决定将请求路由到哪个 Host。

(5) Host

  • 作用:代表一个虚拟主机,用于托管多个 Web 应用程序。

  • 功能:每个 Host 可以包含多个 Context(Web 应用程序)。

  • 示例 :默认的 localhost Host。

(6) Context

  • 作用:代表一个 Web 应用程序。

  • 功能:管理应用程序的资源(如 Servlet、JSP、静态文件)。

  • 示例:每个 WAR 文件部署后会生成一个 Context。

(7) 内嵌类

可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以logger举例,在不同容器组件内分别定义。

(8) 集群类组件

listener、cluster

三. tomcat 处理请求过程

  1. 假设来自客户的请求为: http://localhost:8080/test/index.jsp 浏览器端的请求被发送到服务端端口8080,Tomcat进程监听在此端口上。通过侦听的HTTP/1.1Connector获得此请求。

  2. Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的响应

  3. Engine获得请求192.168.91.100:8080/test/index.jsp,遍历它所有虚拟主机Host

  4. Engine匹配到名为localhost的Host。如果匹配不到,就把请求交给该Engine中的defaultHost处理. localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context

  5. Host匹配到路径为/test的Context

  6. path=/test的Context获得请求index.jsp,在它的mapping table中寻找对应的servlet path = alias

  7. Context匹配到URLPATTERN为*.jsp的Sservlet,对应于]spServlet类构造HtpServletRequest对象和HttpServletResponse对象,作为参数调用)spSer let的doGet或doPost方法。

  8. Context把执行完了之后的HttpServletResponse对象返回给Host

  9. Host把HttpServletResponse对象返回给Engine

  10. Engine把HttpServletResponse对象返回给Connector

  11. Connector把HttpServletResponse对象返回给浏览器端

四. 常见配置详解

4.1 主页文件的优先级

Tomcat 会按照 <welcome-file> 的顺序依次查找文件。
如果找到第一个文件(如 index.html),则返回该文件作为响应。
如果第一个文件不存在,则继续查找第二个文件(如 index.htm),依此类推。
如果所有文件都不存在,Tomcat 会返回目录列表(如果目录列表功能已启用)或返回 404 错误。

复制代码
vim /usr/local/tomcat/conf/web.xml

<welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>


假设用户访问 http://localhost:8080/app/:

Tomcat 首先查找 index.html。
如果 index.html 存在,则返回该文件。
如果不存在,继续查找 index.htm。
查找 index.htm。
如果 index.htm 存在,则返回该文件。
如果不存在,继续查找 index.jsp。
查找 index.jsp。
如果 index.jsp 存在,则返回该文件。
如果不存在,Tomcat 返回目录列表或 404 错误。

4.2 状态页

在 Tomcat 中,"状态页"(Status Page)通常指的是 Tomcat 提供的用于监控服务器运行状态的页面。这些页面可以显示服务器的运行信息,如连接数、线程池状态、内存使用情况等。

4.2.1 开启状态页(只能在本机登录)

默认的管理页面被禁用,启用方法如下

复制代码
cd /usr/local/tomcat/conf

vim tomcat-users.xml

<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
复制代码
systemctl restart tomcat

systemctl status tomcat

4.2.2 开启允许远程状态页

复制代码
cd /usr/local/tomcat/webapps/manager

ls

cd META-INF

vim context.xml

systemctl restart tomcat

4.3 常见的端口

8080: 默认接收 http 请求的端口

8005: 安全端口,可以关闭tomcat

8009: apache 和 tomcat 联动 AJP 协议


五. 虚拟主机配置

Tomcat 的虚拟主机(Virtual Host)配置是为了支持在同一台服务器上运行多个独立的网站或应用程序,每个网站或应用程序可以拥有不同的域名、文件路径和配置。

配置步骤如下:

复制代码
centos7-1
ls /usr/local/tomcat/webapps/

cd /data/
rm -rf *

mkdir -pv web{1,2,3}/ROOT
echo "web1 www.a.com" > web1/ROOT/index.html
echo "web2 www.b.com" > web2/ROOT/index.html
echo "web3 www.c.com" > web3/ROOT/index.html

cat web1/ROOT/index.html

vim /usr/local/tomcat/conf/server.xml
复制代码
systemctl restart tomcat

centos7-2
vim /etc/hosts
192.168.52.101 nodel www.a.com www.b.com www.c.com

curl www.a.com:8080

curl www.b.com:8080

curl www.c.com:8080

六. tomcat nginx 动静分离

6.1 配置单级反向代理

单级反向代理(Single-Level Reverse Proxy)是一种常见的网络架构设计,通常用于将客户端的请求转发到后端服务器,并将后端服务器的响应返回给客户端。反向代理在客户端和后端服务器之间充当中间层,提供负载均衡、安全性、缓存等功能。

在配置虚拟主机的基础上:

复制代码
客户机;192.168.52.105----------->uduntu

nginx服务器:192.168.52.31------->uduntu-1

tomcat服务器1:192.168.52.101---->centos7-1

tomcat服务器2:192.168.52.102---->centos7-2

centos7-2
yum install epel-release.noarch -y(不要手打,可能会出错,用tab补全)
yum install nginx -y
systemctl start nginx
vim /etc/nginx/nginx.conf

location / {
        proxy_pass   http://www.a.com:8080/;
       }
nginx -t

systemctl restart nginx

curl www.a.com:8080

curl www.b.com:8080

curl www.c.com:8080

cd /usr/local/tomcat/webapps/ROOT
mv index.jsp index.jsp.bak
vim index.jsp
7-2 102
复制代码
centos7-1
cd /usr/local/tomcat/webapps/ROOT
mv index.jsp index.jsp.bak
vim index.jsp
7-1 101

ubuntu-1
apt install nginx -y
systemctl start nginx
systemctl status nginx

cd /etc/nginx/
vim nginx.conf
include /etc/nginx/sites-enabled/*;(复制)
复制代码
cd /etc/nginx/sites-enabled/
ls
ll
vim default
#添加以下内容
upstream tomcat {
server 192.168.52.101:8080;
server 192.168.52.102:8080;
}

location ~* \.jsp$ {
proxy_pass http;//tomcat;
}
复制代码
nginx -t

systemctl restart nginx

cd /var/www/html/

vim index.html

ubuntu2204-1

ubuntu

curl 192.168.52.31/index.html

curl 192.168.52.31/index.jsp

6.2 多级反向代理

复制代码
centos7

yum install epel-release -y

yum install nginx -y

systemctl start nginx

vim /etc/nginx/nginx.conf

upstream web {
server 192.168.52.103;
server 192.168.52.104;
}

location / {
proxy_pass http://web;
}

nginx -t

systemctl restart nginx
复制代码
7-13
yum install epel-release -y

yum install nginx -y

systemctl start nginx

cd /usr/share/nginx/html

ls

echo "i come from 7-13" > index.html

cat index.html

vim /etc/nginx/nginx.conf

location -* |.jsp$ {
proxy_pass http://192.168.52.101:8080;
}

nginx -t

systemctl restart nginx
复制代码
7-14
yum install epel-release -y

yum install nginx -y

systemctl start nginx

cd /usr/share/nginx/html

echo "i come from 7-14" > index.html

cat index.html

vim /etc/nginx/nginx.conf

location -* |.jsp$ {
proxy_pass http://192.168.52.102:8080;
}

nginx -t

systemctl restart nginx
复制代码
7-11

使用上述脚本快速安装tomcat

systemctl status tomcat

cd /usr/local/tomcat/webapps/ROOT


echo " i come from 7-11 " > test.jsp

7-12

使用上述脚本快速tomcat 安装

systemctl status tomcat

cd /usr/local/tomcat/webapps/ROOT


echo " i come from 7-12 " > test.jsp

192.168.52.107/test.jsp


七. 实现Java项目

7.1 自建博客

复制代码
#在centos7-1上安装

cd /usr/local/tomcat/webapps

#将jpress-v3.2.1.war文件拖入其中

ln -s jpress-v3.2.1 jpress


cat >/etc/yum.repos.d/mysql.repo <<EOF
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/
enabled=1
gpgcheck=0
EOF

yum -y install mysql-community-server

systemctl start mysqld

grep password /var/log/mysqld.log

mysql -u root -p'自己的密码'

set global validate_password_policy=0;
set global validate_password_length=1;
#修改密码策略

alter user root@'localhost' identified by 'abc123';CREATE DATABASE blog;
GRANT all ON blog.* TO 'bloguser'@'%' IDENTIFIED BY 'admin123';
GRANT all ON blog.* TO 'bloguser'@'localhost' IDENTIFIED BY 'admin123';
flush privileges;


相关推荐
Chase_Mos3 小时前
Spring 必会之微服务篇(1)
java·spring·微服务
小林学习编程6 小时前
SpringBoot校园失物招领信息平台
java·spring boot·后端
撸码到无法自拔6 小时前
docker常见命令
java·spring cloud·docker·容器·eureka
heart000_16 小时前
IDEA 插件推荐:提升编程效率
java·ide·intellij-idea
ŧ榕树先生7 小时前
查看jdk是否安装并且配置成功?(Android studio安装前的准备)
java·jdk
未来的JAVA高级开发工程师7 小时前
适配器模式
java
LUCIAZZZ7 小时前
JVM之内存管理(一)
java·jvm·spring·操作系统·springboot
D_aniel_7 小时前
排序算法-计数排序
java·排序算法·计数排序
极小狐7 小时前
极狐GitLab 通用软件包存储库功能介绍
java·数据库·c#·gitlab·maven
旧故新长7 小时前
Browserless 快速上手
java