楼层: 首页/ 软件技术/ 中间件全景/ 应用服务器中间件:Tomcat 与 JBoss
06

应用服务器中间件:Tomcat 与 JBoss

Application Server · Tomcat / WildFly

Tomcat 就是Java 代码的跑马场——Apache 开源 Servlet 容器,轻量级,你写的 Servlet/Spring Boot WAR 包扔进去它给你跑起来。JBoss/WildFly 是 RedHat 的完整 Java EE 应用服务器,功能全但重。绝大多数 Java Web 项目用 Tomcat 就够了。

5.1 Tomcat 是什么

论Tomcat 的脾气

Apache 开源 Servlet 容器,Java Web 应用服务器,轻量级。它的核心就是"接收 HTTP 请求 → 路由到对应的 Servlet → 跑你的 Java 代码 → 返回响应"。Spring Boot 内嵌的就是 Tomcat(默认),所以你用 Spring Boot 其实已经在用 Tomcat 了。

5.2 目录结构与 server.xml

# Tomcat 解压后的目录 apache-tomcat-10.1.x/ ├── bin/ # 启动脚本:startup.sh/shutdown.sh ├── conf/ # 配置文件:server.xml/web.xml/tomcat-users.xml ├── lib/ # Tomcat 自己的 jar 包 ├── logs/ # 日志文件 ├── webapps/ # 放你的 WAR 包或应用目录 └── work/ # JSP 编译后的 Servlet # conf/server.xml 核心结构 <Server port="8005"> # 关闭端口(SHUTDOWN 命令) <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" /> # HTTP 端口 <Connector port="8009" protocol="AJP/1.3" /> # AJP 端口(和 Nginx 通信) <Engine name="Catalina"> <Host name="localhost" appBase="webapps"> <Context path="/demo" docBase="demo.war"/> # 部署应用 </Host> </Engine> </Service> </Server>

5.3 性能调优:JVM + 连接器

# JVM 参数(setenv.sh) JAVA_OPTS="-Xms2g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200" # -Xms 和 -Xmx 设成一样,避免动态扩缩 # G1GC 适合大堆内存,停顿可控 # server.xml 连接器调优 <Connector port="8080" maxThreads="200" # 最多 200 个工作线程 acceptCount="100" # 满了以后排队最多 100 个 connectionTimeout="20000" # 连接超时 20 秒 enableLookups="false" # 关 DNS 反查(省时间) compression="on" # 开压缩 compressableMimeType="text/html,text/css,application/json"/>

5.4 集群部署:会话粘滞 + Nginx

Tomcat 集群最简单的方案:Nginx 负载均衡 + ip_hash 会话粘滞。同一个用户的请求永远打到同一台 Tomcat,Session 不用共享。但某台 Tomcat 挂了,那台上的用户 Session 全丢,要重新登录。更好的方案是 Session 放 Redis,所有 Tomcat 共享。

5.5 Tomcat 10/11 与 Jakarta EE 迁移

javax → jakarta 改名坑

Tomcat 10 开始,Java EE 改名为 Jakarta EE,所有包名从 javax.servlet.* 改成 jakarta.servlet.*。老项目升级到 Tomcat 10+ 会编译错误,必须批量替换 import。新项目直接用 Tomcat 10.1 + Spring Boot 3.x,全是 jakarta。

5.6 JBoss / WildFly:完整 Java EE 应用服务器

WildFly(原 JBoss)是 RedHat 出品的完整 Java EE/Jakarta EE 应用服务器。Tomcat 只是 Servlet 容器,WildFly 还支持 EJB、JTA(分布式事务)、JMS(消息)、JPA 等全套规范。但它很重,启动慢,配置复杂。现在大多数 Spring Boot 项目用内嵌 Tomcat,WildFly 主要在传统大型企业(金融、电信)里用。

Tomcat vs WildFly 对比
对比点TomcatWildFly/JBoss
定位Servlet 容器(轻量)完整 Java EE 应用服务器(重量)
功能跑 Servlet/JSP全套规范(EJB/JTA/JMS...)
启动速度快(几秒)慢(几十秒到几分钟)
Spring Boot默认内嵌需额外配置
适合90% 的 Java Web 项目传统大型企业系统
记
第五章小结

① Tomcat = Java 代码跑马场,Spring Boot 内嵌的就是它。调优三件套:JVM(Xms/Xmx/G1GC)、maxThreads、关 enableLookups。

② Tomcat 10+ 用 jakarta 包名,老项目升级要批量替换 javax。

③ 集群用 Nginx + ip_hash 会话粘滞,生产推荐 Session 放 Redis 共享。