JavaWeb服务器/servlet容器(Tomcat、Undertow 、WebLogic)

发布于:2025-08-10 ⋅ 阅读:(13) ⋅ 点赞:(0)

🚀 1、Java 生态中的 Web 服务器(Servlet 容器)

名称 简介 特点
Tomcat Apache 开发的 Servlet 容器,最广泛使用 稳定、成熟、社区大
Jetty Eclipse 维护的轻量级容器,适合嵌入式使用 启动快、可扩展性好
Undertow JBoss(Red Hat)开发,WildFly 默认使用 异步非阻塞、超轻量、支持 HTTP/2
Resin 商业产品,性能好但闭源(部分开源) 快速、高性能
GlassFish Oracle 推出的全功能 Java EE 服务器 支持完整 Java EE 规范,重量级
WildFly JBoss 新一代 Java EE 服务器 支持微服务、集成 Undertow
WebLogic Oracle 商业产品,用于大型企业 Java EE 部署 重型、功能强、企业级支持
WebSphere IBM 推出的 Java EE 服务器 重型、功能强、用于大型企业系统

🌐 2、其他主流 Web 服务器(跨语言)

名称 开发语言 简介 应用场景与特点
Nginx C 高性能反向代理服务器,支持静态资源和负载均衡 Web 网关、静态资源服务、代理后端 Java 等
Apache HTTP C 最老牌 Web 服务器之一,功能全面 支持模块多,但性能不如 Nginx
Caddy Go 自动 HTTPS、配置简洁的新一代 Web 服务器 适合中小型项目
Lighttpd C 轻量 Web 服务,适合低内存场景 嵌入式设备或轻量部署

💡  3、总结:Java 项目常用选择

场景需求 推荐服务器 说明
Spring Boot 默认 Tomcat 支持好,稳定,开箱即用
高并发、高性能 Undertow 非阻塞 IO、轻量
嵌入式、微服务部署 Jetty/Undertow 启动快,占内存少
Java EE 全规范 GlassFish/WildFly 支持 Java EE 全栈
商业项目、企业采购 WebLogic/WebSphere 企业支持强,功能全面

⚡ 4、常见用途搭配

前端服务 后端服务 搭配示例
Nginx Spring Boot + Tomcat Nginx 代理静态资源和 API 请求给后端
Nginx Spring Boot + Undertow 支持高并发接口服务,响应快
Apache HTTP WebLogic 用于传统 Java EE 项目部署

📌 5、三个最常用的服务器(Tomcat和 Jetty 和 Undertow)

5.1 ✅ 基本介绍

项目 Tomcat Jetty Undertow
开发组织 Apache Eclipse Red Hat / JBoss
采用方式 Spring Boot 默认内嵌容器 手动引入依赖或替换默认容器 手动引入依赖或替换默认容器
IO 模型 支持 NIO(阻塞为主) 支持异步 NIO(部分支持非阻塞) 完全异步、非阻塞
是否支持 HTTP/2 需扩展支持 支持 原生支持

5.2 ⚙️性能与资源占用

指标/对比点 Tomcat Jetty Undertow
启动速度 非常快
内存占用 较低 最低
并发处理能力 中等 中等偏上 高并发处理优异
CPU 占用 稳定 利用率高但高效
请求吞吐量 普通 中等

5.3 📦功能特性对比

功能特性 Tomcat Jetty Undertow
Servlet 支持 ✅ 完整 ✅ 完整 ✅ 完整
JSP 支持 ✅ 支持 ⚠️ 需额外依赖 ❌ 不支持
WebSocket 支持
HTTP/2 支持 ⚠️ 手动配置 ✅ 支持 ✅ 原生支持
支持异步请求 部分支持 支持 ✅ 原生支持
嵌入式部署支持

5.4 📁 Spring Boot 配置对比

容器 Maven 依赖
Tomcat 默认(无需额外配置)
Jetty 排除 Tomcat,引入 spring-boot-starter-jetty
Undertow 排除 Tomcat,引入 spring-boot-starter-undertow

5.5 🧠 适用场景建议

应用场景 推荐服务器 理由
普通企业 Web 项目 Tomcat 稳定、支持 JSP、社区广泛
嵌入式系统、启动快、轻量服务 Jetty 启动快,内存占用少,易于嵌入
高并发微服务系统、网关服务 Undertow 非阻塞 IO,吞吐量高,性能优
使用 JSP 页面渲染 Tomcat 唯一默认支持 JSP 的容器
要求支持 HTTP/2、高性能接口 Undertow 原生支持 HTTP/2 与异步

🔚 6、一句话总结:微服务前后端分离、不用JSP,用undertow就对了!

6.1 Springboot项目maven引入undertow

    <dependencies>

        <!-- SpringBoot Web容器 -->
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
             <!-- 移除springboot默认的tomcat服务器 -->
             <exclusions>
                 <exclusion>
                     <artifactId>spring-boot-starter-tomcat</artifactId>
                     <groupId>org.springframework.boot</groupId>
                 </exclusion>
             </exclusions>
        </dependency>

        <!-- web 容器使用 undertow -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>

    </dependencies>

6.2 yml文件配置

  undertow:
    # HTTP post内容的最大大小。当值为-1时,默认值为大小是无限的
    max-http-post-size: -1
    # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
    # 每块buffer的空间大小,越小的空间被利用越充分
    buffer-size: 512
    # 是否分配的直接内存
    direct-buffers: true
    threads:
      # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
      io: 8
      # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
      worker: 256

网站公告

今日签到

点亮在社区的每一天
去签到