servlet 规范以及生态

servlet生态


servlet是什么

前言

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

这是课本上的定义。似乎我们提到web应用,就一定是servlet;我们提到三层架构中的服务层,就一定是servlet容器。

但真的是这样吗?

servlet其实是一种规范,而我们常用的开发中所接触到的,大部分都是围绕这个规范出现的servlet生态工具。

这里不会介绍如何构建servlet,如何使用servlet。我会着重给大家结合现在的现实开发讲解一下servlet的概念以及理解,顺便扩展一下其他关于web应用服务层的技术。

接下来我会分几期课程,把我在几年开发经验中,对servlet的理解系统的讲解给大家。不一定都对,有异议的地方欢迎大家一起探讨。

servlet 规范

Servlet规范是Java Servlet API的规范,用于定义Web服务器如何处理HTTP请求和响应。

Servlet 规范是 Java 企业级 Web 开发的基石,定义了处理 HTTP 请求的标准接口和生命周期管理。围绕 Servlet 规范,形成了庞大的生态系统,涵盖 Web 框架、工具链、安全组件等。

Servlet 规范的核心内容

Servlet 规范(Java Servlet Specification)是 Java EE(现 Jakarta EE)的核心组成部分,最新版本为 Servlet 6.0(Jakarta EE 10)。其核心定义如下:

1. Servlet 接口与生命周期
  • 核心接口javax.servlet.Servlet(现 jakarta.servlet.Servlet
    定义三个生命周期方法:
    • init(ServletConfig config):初始化时调用(仅一次)。
    • service(ServletRequest req, ServletResponse res):处理请求的核心方法。
    • destroy():销毁 Servlet 时调用(资源释放)。
  • HTTP 专用扩展HttpServlet 抽象类
    实现 service() 方法的分发逻辑,开发者只需覆盖 doGet()doPost() 等 HTTP 方法。
2. 请求与响应对象
  • ServletRequestServletResponse
    封装原始请求和响应数据,提供参数解析、编码设置等功能。
  • HTTP 扩展HttpServletRequestHttpServletResponse
    提供 HTTP 专有方法(如 getHeader()sendRedirect())。
3. 上下文与会话管理
  • ServletContext
    应用全局共享的上下文对象,存储数据库连接池等全局资源。
  • HttpSession
    用户会话级作用域,通过 JSESSIONID Cookie 跟踪用户状态。
4. 过滤器(Filter)
  • 接口javax.servlet.Filter
    允许在请求到达 Servlet 前或响应返回客户端前插入预处理/后处理逻辑。
  • 链式调用:通过 FilterChain.doFilter() 传递请求。
5. 监听器(Listener)
  • 事件监听:如 ServletContextListener(应用启动/销毁)、HttpSessionListener(会话创建/销毁)。
  • 用途:初始化全局资源、统计在线用户数等。
6. 部署描述符与注解
  • web.xml:传统 XML 配置方式,定义 Servlet 映射、Filter 顺序等。
  • 注解:如 @WebServlet@WebFilter,简化配置。

[!NOTE]

既然提到了filter,那肯定存在多个filter都需要读取HttpServletRequest中的body的情况

但HTTP 请求体的输入流只能被读取一次

大家可以思考讨论一下我们应该如何解决这种冲突呢?

后续课程中,我会提出解决方案

servlet生态

Servlet 规范为 Web 开发提供了底层基础,而围绕它的生态系统(框架、工具、容器)进一步简化了开发流程并提升了功能。

1. Servlet 容器(运行时环境)
  • 核心实现
    • Tomcat:轻量级,广泛用于开发和中小型应用。
    • Jetty:嵌入式容器,适合微服务和云原生场景。
    • Undertow:高性能,内置于 WildFly 应用服务器。
  • 功能:实现 Servlet 规范,管理 HTTP 协议解析、线程池、会话等。
2. Web 框架
  • 传统 MVC 框架
    • Spring MVC:基于 Servlet 的模型-视图-控制器框架,深度集成 Spring 生态。
    • Struts 2:通过拦截器链处理请求,现已逐渐被 Spring MVC 取代。
  • 现代框架
    • Jakarta Faces (JSF):组件化 Web 框架,适合企业级应用。
    • Vaadin:基于 Web Components 的全栈 UI 框架。
3. 模板引擎
  • JSP (JavaServer Pages):Servlet 规范的扩展,允许在 HTML 中嵌入 Java 代码。
  • Thymeleaf:自然模板引擎,替代 JSP,支持 HTML5。
  • Freemarker/Velocity:纯文本模板引擎,生成动态内容。
4. 安全框架
  • Spring Security:基于 Filter 链的认证和授权框架,支持 OAuth2、JWT。
  • Apache Shiro:轻量级安全框架,提供简洁的 API。
5. RESTful 服务支持
  • JAX-RS:Java API for RESTful Web Services(如 Jersey、RESTEasy)。
  • Spring Boot REST:通过 @RestController 简化 REST API 开发。

[!TIP]

restful 也可以理解成一种风格及规范

6. 工具链与开发支持
  • 构建工具:Maven、Gradle 支持 WAR 包构建。
  • IDE 集成:IntelliJ IDEA、Eclipse 提供 Servlet 模板和调试支持。
  • 热部署工具:JRebel、Spring Boot DevTools。
7. 企业级扩展
  • JNDI (Java Naming and Directory Interface):用于查找数据库连接池等资源。
  • JTA (Java Transaction API):分布式事务管理。
  • CDI (Contexts and Dependency Injection):依赖注入标准。
  • HikariCP / DBCP:优化数据库连接性能。

总结


  • Servlet 规范:定义了 Java Web 开发的核心标准,涵盖请求处理、会话管理、过滤器等关键机制。
  • Servlet 生态:围绕规范构建的丰富工具链(如 Spring MVC、JSP、安全框架),支撑企业级应用开发。

下一课程,我们将围绕 servlet容器展开内容分享与讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值