Web服务器和Servel容器

Servlet、WebMVC、WebFlux

通信协议方面,Java应用常用的有HTTP、HTTPS、WebSocket、TCP、UDP等;

  1. HTTP/HTTPS:Web应用最基础的协议,Servlet容器(如Tomcat)和WebFlux(如Netty)均支持。
  2. WebSocket:用于双向实时通信,Servlet(通过javax.websocket)和WebFlux(如WebSocketHandler)均可实现。
  3. TCP/UDP:通过Java NIO或Netty等库实现,常用于高性能网络通信,WebFlux底层(如Netty)原生支持。

Servlet

Servlet其实是 Server Applet,全称 Java Servlet,指的是用Java 编写的服务端程序。

Java EE标准,用于处理请求和响应的基础,定义了处理HTTP请求的核心接口(如ServletRequestServletResponse)。特点是同步阻塞I/O,每个请求占用一个线程,线程池容量决定并发上限。

Servlet 容器

Tomcat、Jetty等,Servlet容器负责生命周期管理。

Servlet 容器其实就是管理和加载这些 Servlet 类的,拿到 HTTP 请求之后找到对应的 Servlet 类这就是 Servlet 容器要做的事情。

HTTP 服务器

Apache、Nginx等,

Web 容器

HTTP 服务器 + Servlet 容器 = Web 容器

WebMVC

WebMVC:Spring WebMVC

基于Servlet API构建的同步阻塞式Web框架,属于Spring生态。

依赖Servlet容器(如Tomcat),使用DispatcherServlet作为核心控制器,通过@Controller@RequestMapping定义路由。适合传统CRUD应用,与JDBC等阻塞式工具链集成简单。

WebFlux

Spring 5+引入的响应式非阻塞Web框架,支持Reactive Streams规范。支持非阻塞、异步处理,可以在Servlet容器(如Tomcat)或Netty这样的非Servlet环境下运行。

  • 特点
    • 非阻塞模型:基于事件循环(如Netty或Servlet 3.1+容器),少量线程处理高并发请求。
    • 响应式编程:使用FluxMono(Reactor库)处理异步数据流。
    • 协议支持:除HTTP外,更易集成WebSocket、SSE等实时协议。
    • 适用场景:高并发、低延迟的IO密集型应用(如微服务网关)。

也可以运行在支持Servlet 3.1+的容器上,比如Tomcat,但此时还是使用非阻塞的方式。而使用Netty的话,是完全脱离Servlet环境的。

总结

  • 通信协议是数据传输的规则,如HTTP、WebSocket。
  • Servlet是Java处理Web请求的底层标准,WebMVC是其上层同步框架,WebFlux是响应式替代方案。
  • Servlet和WebMVC是基于命令式编程,而WebFlux是响应式编程,使用函数式风格,比如Reactor库的Flux和Mono。
  • Servlet和WebMVC是同步的,每个请求对应一个线程,适合传统的阻塞式操作;而WebFlux是非阻塞的,使用事件循环,适合高并发和大量IO操作的场景。另外,WebFlux可以脱离Servlet容器,比如用Netty,而WebMVC必须依赖Servlet容器。

参考链接

Servlet参考链接:

  1. 为什么要有 Servlet ,什么是 Servlet 容器,什么是 Web 容器? - yes的练级攻略 - 博客园
  2. 从Servlet到云原生:一文讲透Java Web容器的核心技术体系_tomcat_AI时代的一滴水_InfoQ写作社区
posted @ 2025-06-08 22:55  joudys  阅读(55)  评论(0)    收藏  举报