Tomcat Web应用服务器笔记 📅 2026/7/17 19:25:20 笔记说明本文档旨在系统性地梳理Java Web应用服务器Tomcat的核心概念、它与前后端技术栈的关系、从单体到微服务的架构演进并提供基础安装、与Nginx整合以及Session共享高可用等关键实验步骤作为学习和配置的参考手册。第一部分核心概念与架构1.1 Web技术基础与演进理解Tomcat的作用需要先了解它所在的Web技术栈。B/S模式浏览器/服务器模式基于HTTP协议是当前主流。前端三大核心技术HTML网页的结构骨架。CSS网页的样式美化版本1.0/2.0/3.0。JavaScript网页的行为引擎Node.js的出现使其成为前后端通用语言。同步与异步交互Ajax同步请求后页面阻塞等待需整体刷新。异步Ajax基于XMLHttpRequest对象实现页面局部更新不阻塞用户操作。1.2 后台应用架构演进Tomcat是部署Java后台应用的传统容器其部署方式随架构演进。单体架构定义所有功能模块订单、支付、用户等整合在一个工程中打包为WAR包部署在单一服务器进程如Tomcat中。优点开发测试简单技术栈统一适合小型项目。缺点模块耦合度高一个小修改需整体重启水平扩展时需复制整个应用。代表部署在Tomcat、Jetty等Web应用服务器。微服务架构定义按业务边界拆分为多个独立服务每个服务可独立开发、部署和运行。核心特征服务松耦合、独立技术栈、独立扩展、轻量级通信通常为HTTP/RESTful。代表框架DubboJava RPC框架常配合Zookeeper高性能。Spring Cloud微服务全家桶基于HTTP/RESTful通信生态丰富。第二部分Tomcat基础实验2.1 Tomcat安装部署环境准备需要先安装JDK。下载与基础部署# 安装JDK yum install java-1.8.0-openjdk.x86_64 -y # 下载并解压Tomcat 9 wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.115/bin/apache-tomcat-9.0.115.tar.gz tar zxf apache-tomcat-9.0.115.tar.gz -C /usr/local cd /usr/local mv apache-tomcat-9.0.115 tomcat # 启动测试 /usr/local/tomcat/bin/startup.sh netstat -antlupe | grep 8080 # 验证8080端口监听Systemd服务化配置便于管理# 创建tomcat用户并授权 useradd -s /sbin/nologin -M tomcat chown tomcat.tomcat /usr/local/tomcat -R # 创建环境变量文件 vim /usr/local/tomcat/conf/tomcat.conf JAVA_HOME/etc/alternatives/jre # 创建systemd服务文件 vim /lib/systemd/system/tomcat.service [Unit] DescriptionTomcat Aftersyslog.target network.target [Service] Typeforking EnvironmentFile/usr/local/tomcat/conf/tomcat.conf ExecStart/usr/local/tomcat/bin/startup.sh ExecStop/usr/local/tomcat/bin/shutdown.sh PrivateTmptrue Usertomcat Grouptomcat [Install] WantedBymulti-user.target systemctl daemon-reload systemctl enable --now tomcat netstat -antlupe | grep java # 验证服务启动8005/8080端口第三部分NginxTomcat整合实验3.1 单体架构整合使用Nginx作为反向代理将动态请求如JSP转发给后端的Tomcat处理。Nginx配置# 在 /usr/local/nginx/conf/conf.d/ 下创建vhosts.conf server { listen 80; server_name app.timinglee.org; location ~* \.jsp$ { proxy_pass http://172.25.254.10:8080; # 转发到Tomcat } }准备测试页面并验证# 在Tomcat的ROOT目录下创建测试页面 echo test page /usr/local/tomcat/webapps/ROOT/test.jsp nginx -s reload # 浏览器访问 http://app.timinglee.org/test.jsp3.2 Tomcat负载均衡配置当有多个Tomcat实例时可以通过Nginx进行负载分发。Nginx配置upstreamnginxupstream tomcat { # hash $cookie_JSESSIONID; # 可选基于Cookie的会话保持 server 172.25.254.10:8080; server 172.25.254.20:8080; } server { listen 80; server_name app.timinglee.org; location ~* \.jsp$ { proxy_pass http://tomcat; # 转发到upstream组 } }同步测试页面将test.jsp同步到另一台Tomcat的相应目录。验证重载Nginx用不同浏览器或工具访问观察请求是否被分发到不同Tomcat。第四部分Session共享高可用实验在负载均衡环境下必须解决Session共享问题确保用户请求切换到不同Tomcat时登录状态不丢失。本实验使用Memcached作为集中式Session存储。4.1 环境准备在所有Tomcat节点安装Memcacheddnf install memcached -y vim /etc/sysconfig/memcached OPTIONS-l 0.0.0.0,::1 # 监听所有接口 systemctl enable --now memcached netstat -antlupe | grep 11211 # 验证端口部署Memcached-Session-Manager jar包该管理器用于将Tomcat的Session数据存储到Memcached。需要将memcached-session-manager、kryo等相关jar包复制到所有Tomcat的lib目录下。# 假设jar包已下载到当前目录 cp *.jar /usr/local/tomcat/lib/ scp *.jar root172.25.254.20:/usr/local/tomcat/lib/ # 同步到另一节点4.2 配置Tomcat会话管理器编辑每个Tomcat的conf/context.xml文件添加Manager配置。RS1172.25.254.10配置Context ... Manager classNamede.javakaffee.web.msm.MemcachedBackupSessionManager memcachedNodesn1:172.25.254.10:11211,n2:172.25.254.20:11211 failoverNodesn1 !-- 本机故障时Session备份到n2 -- requestUriIgnorePattern.*\.(ico|png|gif|jpg|css|js)$ transcoderFactoryClassde.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory / /ContextRS2172.25.254.20配置Context ... Manager classNamede.javakaffee.web.msm.MemcachedBackupSessionManager memcappedNodesn1:172.25.254.10:11211,n2:172.25.254.20:11211 failoverNodesn2 !-- 本机故障时Session备份到n1 -- requestUriIgnorePattern.*\.(ico|png|gif|jpg|css|js)$ transcoderFactoryClassde.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory / /Context4.3 验证会话共享重启所有Tomcat服务systemctl restart tomcat。测试逻辑通过Nginx访问应用如部署了一个有登录功能的Web应用登录后产生Session。模拟故障停止当前处理请求的Tomcat节点。刷新页面请求会被Nginx转发到另一个Tomcat节点。验证登录状态应依然保持说明Session未丢失成功从Memcached中恢复。总结Tomcat作为经典的Java Web容器是理解从单体应用部署到微服务架构演进的重要基础。在实际生产环境中它通常位于Nginx等反向代理之后处理动态内容。解决负载均衡下的Session共享问题如使用Memcached或Redis是实现应用高可用的关键一步。