目录
[一,Tomcat 是什么](#一,Tomcat 是什么)
[1.2、Tomcat 的核心组件](#1.2、Tomcat 的核心组件)
[1.2.1、Tomcat Web 应用服务](#1.2.1、Tomcat Web 应用服务)
[1.2.2、Web 动态页面](#1.2.2、Web 动态页面)
[1.2.3、JSP(JavaServer Pages)](#1.2.3、JSP(JavaServer Pages))
[2.1、什么是 Nginx 反向代理?](#2.1、什么是 Nginx 反向代理?)
[负载均衡(Nginx 核心功能)](#负载均衡(Nginx 核心功能))
[IP 哈希(ip_hash)------ 会话粘滞核心策略](#IP 哈希(ip_hash)—— 会话粘滞核心策略)
[2. 原理(请求处理流程)](#2. 原理(请求处理流程))
[3. 配置文件](#3. 配置文件)
[4. 应用接口调用](#4. 应用接口调用)
[5. 数据库接口调用](#5. 数据库接口调用)
[Tomcat1 server 配置](#Tomcat1 server 配置)
一,Tomcat 是什么
Tomcat 是由 Apache 软件基金会开发的开源轻量级 Java Servlet 容器,同时支持 JavaServer Pages(JSP)、Expression Language(EL)等 Java EE 核心技术,是运行 Java Web 应用的核心中间件。它并非完整的 Java EE 应用服务器(如 JBoss、WebLogic),但足够支撑绝大多数中小型 Java Web 应用的部署与运行,具备跨平台、轻量、易配置的特点,是开发和部署 Java Web 项目的首选工具之一。
1.2、Tomcat 的核心组件
1.2.1、Tomcat Web 应用服务
Tomcat 作为开源的 Java Web 应用服务器,核心作用是为 Java Web 应用提供运行环境,支持动态页面、业务逻辑代码的解析与执行。它本质是一个 Servlet 容器,兼容 Java EE 规范中的 Servlet、JSP 等核心技术,能将开发者编写的 Web 应用(包含动态页面、业务逻辑、配置文件等)部署到服务器上,使客户端(浏览器、APP 等)通过网络请求访问应用资源。
其核心优势在于轻量性和易用性:无需依赖复杂的 Java EE 完整服务器(如 WebLogic),仅需 JDK 环境即可启动;支持跨平台(Windows、Linux、macOS 等),且部署流程简单(可通过复制 WAR 包、配置 XML 文件或借助管理界面完成部署),是中小型 Java Web 项目开发、测试和生产环境的首选服务。
1.2.2、Web 动态页面
Web 动态页面是指页面内容并非固定不变,而是根据请求参数、数据库数据、业务逻辑计算结果等动态生成的页面。与静态页面(如 HTML 页面,内容写死在文件中,所有用户访问结果一致)相比,动态页面能实现个性化交互、数据实时更新等功能。
核心特点:
- 内容动态生成:页面数据来自后端数据库(如用户信息、商品列表)、请求参数(如搜索关键词)或业务逻辑(如订单计算),每次访问可能返回不同结果;
- 依赖服务器解析:动态页面无法直接被浏览器识别,需通过 Web 服务器(如 Tomcat)调用后端程序(如 Servlet、JSP、Java 代码)解析处理,生成标准 HTML 内容后,再返回给客户端渲染;
- 支持交互功能:可实现用户登录、数据提交、评论、搜索等交互操作,核心是通过 "客户端请求→服务器处理→响应结果" 的流程完成数据交互。
常见技术实现:
除了 JSP,还包括 PHP(搭配 Apache/Nginx)、ASP.NET(搭配 IIS)、Python(Django/Flask 框架)等,但在 Java Web 生态中,JSP 是与 Tomcat 原生兼容的核心动态页面技术。
1.2.3、JSP(JavaServer Pages)
JSP 是 Java Web 规范定义的动态页面技术,本质是 "嵌入了 Java 代码的 HTML 页面",文件后缀为 .jsp。它允许开发者在 HTML 静态标签中插入 Java 代码片段、JSP 内置标签或表达式,最终由 Tomcat 解析为 Servlet 类并执行,生成动态 HTML 响应。
核心原理:
- 第一次访问 JSP 页面时,Tomcat 会将
.jsp文件编译为对应的 Java 源文件(Servlet),再编译为字节码文件(.class); - 后续访问该页面时,若 JSP 文件未修改,Tomcat 会直接复用已编译的 Servlet 执行,避免重复编译,提升性能;
- 执行过程中,Java 代码片段负责处理业务逻辑(如数据库查询、请求参数解析),HTML 标签负责页面结构渲染,最终将动态生成的 HTML 内容返回给客户端。
核心组成部分:
- 静态 HTML 标签:负责页面基础结构(如
<html>、<div>、<table>等),与普通 HTML 页面一致; - Java 代码片段:用
<% 代码 %>包裹,用于编写业务逻辑(如循环、条件判断、数据库连接、变量定义等); - JSP 表达式:用
<%= 表达式 %>包裹,用于直接输出变量或表达式结果到页面(如<%= username %>输出当前登录用户名); - JSP 指令:用
<%@ 指令 %>定义,用于配置页面属性(如page指令指定编码格式、导入 Java 包,include指令引入其他页面片段); - 内置对象:Tomcat 自动创建的对象,无需手动实例化即可使用(如
request接收客户端请求数据、response发送响应、session存储用户会话信息、out输出内容到页面)。
与 Servlet 的关系:
- JSP 是 Servlet 的 "简化版":Servlet 是纯 Java 类,需通过
out.println()输出 HTML 标签,开发页面结构繁琐;而 JSP 以 HTML 为主体,嵌入 Java 代码,更适合页面渲染; - 本质统一:JSP 最终会被编译为 Servlet 执行,二者底层执行逻辑一致,只是开发视角不同(JSP 侧重页面,Servlet 侧重业务逻辑);
- 分工协作:实际开发中,通常用 JSP 负责页面展示,Servlet 负责接收请求、处理核心业务逻辑(如数据库交互),再将结果传递给 JSP 渲染,实现 "业务逻辑与页面展示分离"。
1.2.4,小结:
Tomcat 是 Server 中专门用于运行 Java Web 应用的轻量级 Servlet 容器 / Java Web 应用服务器,核心价值是为 Servlet/JSP 提供运行环境,同时具备基础 Web 服务器的请求处理能力。
二,反向代理
2.1、什么是 Nginx 反向代理?
反向代理(Reverse Proxy)是 Nginx 的核心功能之一:客户端请求先发送至 Nginx 服务器,由 Nginx 作为 "中间代理",将请求转发至后端的应用服务器(如 Tomcat、Java 服务、Node.js 服务等),后端服务器处理后将响应结果返回给 Nginx,再由 Nginx 转发给客户端。
Nginx 在这里就像"中转站",客户端只知道自己连的是 Nginx,不知道真正提供服务的是哪台后端。
核心特点:客户端仅与 Nginx 交互,无需知道后端真实应用服务器的地址,Nginx 隐藏了后端服务细节,同时承担请求分发、负载均衡、缓存等功能。
2.2、核心作用
- 隐藏后端服务:保护后端应用服务器不直接暴露在公网,降低被攻击风险(如避免直接访问 Tomcat 的 8080 端口);
- 负载均衡:当后端有多台应用服务器(如多台 Tomcat 集群)时,Nginx 可按策略(轮询、权重、IP 哈希等)分发请求,避免单台服务器过载,提升系统可用性;
- 静态资源缓存:Nginx 可直接处理静态资源(HTML、CSS、JS、图片等),无需转发至后端,减少应用服务器压力,提升访问速度;
- SSL 终结:统一在 Nginx 配置 HTTPS(配置 SSL 证书),后端服务无需处理加密解密,简化部署;
- 请求过滤与改写:拦截非法请求(如恶意请求、无效参数),或修改请求路径、请求头(如添加跨域头、统一字符编码)。
2.3、工作原理
-
客户端向 Nginx 发送 HTTP/HTTPS 请求(如访问
https://www.example.com,Nginx 监听 80/443 端口); -
Nginx 接收请求后,根据配置的反向代理规则(如请求路径、域名),匹配对应的后端服务集群(如
http://tomcat_cluster); -
Nginx 按负载均衡策略(如轮询),将请求转发至集群中的某一台应用服务器(如
192.168.1.100:8080); -
后端应用服务器处理请求(如 Tomcat 运行 Java Web 应用,生成动态页面或 JSON 数据);
-
后端服务器将响应结果返回给 Nginx;
-
Nginx 可对响应进行缓存(如静态资源)或直接转发给客户端,完成一次请求流程。
反向代理核心配置
server { listen 80; # Nginx监听端口 server_name example.com; # 你的域名/IP # 所有请求转发到后端服务 location / { proxy_pass http://127.0.0.1:3000; # 后端服务地址(必填) proxy_set_header Host $host; # 传递主机名到后端 proxy_set_header X-Real-IP $remote_addr; # 传递真实客户端IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理链IP proxy_set_header X-Forwarded-Proto $scheme; # 传递协议(http/https) proxy_connect_timeout 60s; # 连接后端超时时间 proxy_read_timeout 60s; # 读取后端响应超时时间
三,负载均衡
负载均衡(Nginx 核心功能)
- 定义:将客户端请求按策略分发至多台后端服务器(如 Tomcat 集群),避免单台过载。
- 核心策略:轮询(默认)、权重(按比例分配)、IP 哈希(固定客户端到同一服务器)、备用机(故障切换)。
- 核心价值:提升系统并发能力、可用性,避免单点故障。
轮询
# 1. 轮询策略的后端集群(默认,无需额外关键词)
upstream backend_polling {
# 可选:自定义权重(weight越大,分配请求越多)
server 192.168.1.100:8080 weight=2; # 权重2,分配请求比例更高
server 192.168.1.101:8080; # 权重默认1
server 192.168.1.102:8080; # 权重默认1
最小连接数
# 2. 最少连接数策略的后端集群(核心:least_conn关键词)
upstream backend_least_conn {
least_conn; # 启用最少连接数策略(核心配置)
server 192.168.1.100:8080 weight=2; # 权重仍生效(连接数计算会乘以权重)
server 192.168.1.101:8080;
server 192.168.1.102:8080;
IP 哈希(ip_hash)------ 会话粘滞核心策略
IP 哈希是 Nginx 内置的基础哈希策略,根据客户端 IP 地址计算哈希值,确保同一客户端的请求始终转发到同一后端节点(实现会话粘滞),适合需要保持会话状态的场景(如登录态、购物车、游戏会话)。
完整配置
worker_processes auto;
events { worker_connections 1024; }
http {
include mime.types;
default_type application/octet-stream;
# IP哈希策略的后端集群(核心:ip_hash关键词)
upstream backend_ip_hash {
ip_hash; # 启用IP哈希(核心配置)
# 后端节点配置(注意:backup/down节点不参与IP哈希)
server 192.168.1.100:8080 weight=1; # 权重对ip_hash仅影响故障恢复后的分配,无比例作用
server 192.168.1.101:8080;
server 192.168.1.102:8080;
# 故障容错配置(可选)
max_fails 3; # 节点连续失败3次标记不可用
fail_timeout 30s; # 故障节点隔离30秒
proxy_next_upstream off; # 可选:禁用失败重试(避免会话跳转,根据业务选择)
}
# 前端监听配置
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_ip_hash; # 转发到IP哈希集群
# 必配:传递客户端真实IP(否则哈希基于Nginx代理IP,失去意义)
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
四,Tomcat
Tomcat 是Java Web 应用的专用运行容器:它的核心职责是作为 "中间载体",完成三个关键动作:
- 接收客户端的 HTTP 请求(如浏览器发送的访问请求);
- 调用对应的 Servlet(Java Web 的核心业务组件)处理请求;
- 将处理后的结果(如动态生成的 HTML 页面、JSON 数据)作为 HTTP 响应返回给客户端。简单来说,Tomcat 是让 Java Web 应用 "跑起来" 的基础环境。
2. 原理(请求处理流程)
Tomcat 处理请求的核心链路是:
- Connector 监听请求:Tomcat 的 Connector 组件(连接器)会监听指定端口(如默认 8080),当客户端请求到达时,Connector 接收请求并解析为 Tomcat 内部的标准请求对象;
- Mapper 分发 :Mapper 是 Tomcat 的 "路由组件",它根据请求的 URL 路径,匹配到对应的 Servlet(比如请求
/user/login对应LoginServlet); - Servlet 执行:找到对应的 Servlet 后,Tomcat 调用该 Servlet 的业务逻辑代码(如处理用户登录、查询数据库);
- 返回响应:Servlet 处理完成后生成响应结果,再通过 Connector 转换为 HTTP 响应,返回给客户端。
3. 配置文件
Tomcat 的核心配置文件及作用:
- server.xml:Tomcat 的全局基础配置文件,主要定义服务、连接器(端口)、虚拟主机(Host)等。例如:配置监听端口(如将 8080 改为 80)、绑定域名对应的虚拟主机目录;
- web.xml :Web 应用的全局配置文件(默认位于 Tomcat 的
conf目录下),定义了全局的 Servlet、Filter(过滤器)、Listener(监听器)等规则。例如:配置默认首页(如index.jsp)、全局字符编码过滤器; - context.xml :主要用于配置数据源(数据库连接池),通过 JDNI(Java 命名和目录接口)的方式管理数据库连接,避免每个 Web 应用重复配置数据库连接信息;
- tomcat-users.xml :Tomcat 的用户权限配置文件,用于管理 Tomcat 管理控制台(如 Web 管理界面、远程部署)的用户账号、角色(如管理员角色
manager-gui)。
4. 应用接口调用
Tomcat 作为容器,会将接收到的请求 "交付" 给开发者编写的代码:
- 直接调用Servlet :若开发者手写了 Servlet 类,Tomcat 会根据请求路径匹配到对应的 Servlet 并执行其
service()方法; - 调用框架:实际开发中,更多是通过 Spring、Spring Boot 等框架开发 Web 应用,Tomcat 会将请求转发给框架的入口(如 Spring 的 DispatcherServlet),再由框架分发到具体的业务方法(如 Controller 中的接口)。
5. 数据库接口调用
Tomcat 环境下,Java Web 应用连接数据库的两种方式:
- 通过 JDNI 数据源 :在
context.xml中配置数据库连接池(如 Druid、C3P0),应用通过 JDNI 名称(如java:comp/env/jdbc/mydb)获取数据库连接,由 Tomcat 统一管理连接的创建、复用、销毁,提升性能; - 自己管理 JDBC 连接 :开发者在代码中直接通过 JDBC API(如
DriverManager.getConnection())创建数据库连接,这种方式需手动管理连接的关闭,易出现连接泄漏,仅适用于简单场景。
五,动静分离配置案例
1.准备开发环境

若没有则需要去下载。
2,opt目录下 下载并解压安装包 移动安装包


扩展
tomcat不是一个服务,搜不到。 需要搜java


Tomcat1 server****配置

内容为:

验证

进入 并编辑 vim /usr/local/tomcat/tomcat1/conf/server.xml
删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path=""
reloadable="true" /

记住此机端口号;后面编辑的俩台serve的端口号都要改,不然报错

先准备图片至对应目录

进入并编辑 vim /usr/local/nginx/conf/nginx.conf

重启服务后测试
