servlet/Web/spring容器
servlet/Web/spring容器
servlet容器
主要职责:管理Servlet的生命周期(加载、初始化、服务、销毁),处理HTTP请求并将其路由到相应的Servlet。
实现标准:遵循Java Servlet规范(如Servlet API)。
定义:遵循 Java Servlet 规范(JSR)的运行时环境,核心功能是管理 Servlet 的生命周期(加载、初始化、处理请求、销毁)。
职责:
- 解析 HTTP 请求,将其封装为 ServletRequest/ServletResponse 对象。
- 加载和实例化 Servlet:根据配置信息加载 Servlet 类,并创建 Servlet 实例。
- 管理 Servlet 线程池、会话(Session)等。
代表实现:Tomcat、Jetty、Undertow。
特点:仅处理 Servlet 相关逻辑,不涉及 Spring 或其他框架。
Web容器
定义:Servlet 容器的扩展,在 Servlet 容器基础上增加了对 JSP、WebSocket 等 Web 技术的支持。
与 Servlet 容器的关系:
- Web 容器 ≈ Servlet 容器(现代 Java Web 开发中两者通常等价)。
- Web 容器包含并管理 Servlet 容器。
- Web 容器负责处理 HTTP 请求,将其路由到相应的 Servlet 或 JSP 页面。
- 严格来说,Web 容器是 Servlet 容器的超集(例如:Tomcat 既是 Servlet 容器也是 Web 容器)。
职责:
- 包含 Servlet 容器的所有功能
- 支持 JSP 编译为 Servlet
- 提供静态资源服务(HTML/CSS/JS)
- 管理 Web 应用上下文(ServletContext)
特点:
- 支持 JSP 等 Web 技术。
- 管理 JSP 生命周期(加载、编译、执行)。
- 处理 WebSocket 等 Web 协议。
- 提供了更多的功能,如过滤器、监听器等。
代表实现:Tomcat、Jetty、WebLogic、WebSphere。
具体来说,Web容器提供完整的 Web 应用运行时环境。
注意:在Java Web开发中,通常所说的Web容器就是Servlet容器。因为Servlet容器是Web容器的核心,
并且现代Java Web容器主要就是Servlet容器,实际开发中两者常被混用。
spring容器
定义: Spring 框架的核心,负责管理应用中所有对象的创建、依赖注入和生命周期。
职责:
- 通过依赖注入(DI)管理 Bean 及其依赖关系
- 支持 AOP、事务管理等
- 读取配置(XML、注解或 Java Config)初始化 Bean
代表实现: BeanFactory(基础接口)、ApplicationContext(高级实现,如 AnnotationConfigApplicationContext 或 XmlWebApplicationContext)
特点: 完全独立于 Web 环境,可在任何 Java 应用中使用(桌面应用、微服务等)。
联系与区别
三者的关系可以简述为:Web容器(Servlet容器)包含并管理Web应用程序,而Web应用程序中运行着Spring IoC容器。
三者的包含关系如层级架构(从底层到上层)图所示:
详细说明:
-
Web 容器包含 Servlet 容器
- Web 容器(如 Tomcat)内置了 Servlet 容器功能。
- 启动时加载 web.xml(或 Servlet 3.0+ 注解),初始化 ServletContext。
-
Web 容器托管 Spring Web 应用
- 当部署 Spring Web 应用时,Web 容器会:
- 通过 ContextLoaderListener 初始化 根 Spring IoC 容器(管理 Service、DAO 等非 Web 组件)。
- 通过 DispatcherServlet 初始化 子 Spring IoC 容器(管理 Controller、拦截器等 Web 组件)。
- 当部署 Spring Web 应用时,Web 容器会:
-
Spring IoC 容器运行在 Web 容器内
- Spring 容器由 Web 容器触发启动(例如通过 ContextLoaderListener)。
- Spring Bean 无法直接访问 Servlet API,但可通过 WebApplicationContext 获取 ServletContext。
交互流程示例
以 Tomcat 运行 Spring MVC 应用为例:
- Tomcat(Web 容器)启动时加载加载 WAR 文件,解析 web.xml,初始化 ServletContext。
- 初始化 Spring:ContextLoaderListener初始化 根Spring IoC容器(WebApplicationContext),加载 applicationContext.xml,管理 Service、DAO 等非 Web 组件。
- 初始化 DispatcherServlet:Tomcat 创建 DispatcherServlet 实例。 DispatcherServlet 初始化 子Spring IoC容器,加载 spring-mvc.xml,并关联根容器,管理 Controller、拦截器等 Web 组件。
- 当 Tomcat 接收到 HTTP 请求时,Servlet 容器(如 Tomcat)会将请求转发给 DispatcherServlet。
- DispatcherServlet 处理请求,查找并调用相应的 Controller 方法。
- Controller 方法中可能需要访问 Service 层,Service 层通过 WebApplicationContext 获取 Spring IoC 容器,调用相应的 Bean。
- 处理完成后,DispatcherServlet返回响应给 Servlet 容器。
- Servlet 容器将响应返回给客户端。
注意:
- Servlet 由 Web 容器管理,Spring 只能通过 ServletContext 间接交互。
- Web 容器可独立运行纯 Servlet/JSP 应用,Spring 只是可选框架。

浙公网安备 33010602011771号