Jakarta EE (原 Java EE) 技术栈概览

Jakarta EE (原 Java EE) 技术栈概览

一、各组件作用简介

组件 作用 类比
HTML 结构层:定义网页的静态结构和内容(如标题、段落、表单)。 房子的骨架和布局。
Script (JavaScript) 行为层:在浏览器端实现动态交互效果、表单验证、异步通信(AJAX)。 房子的智能家居系统(遥控灯光、窗帘)。
Servlet 请求处理核心 :接收、处理客户端(通常是浏览器)的请求,并生成动态响应。是 Java Web 应用的控制器(Controller) 餐厅的前台经理,接待顾客、接收订单、指挥后厨、最后上菜。
JSP 视图层 (传统):将 Java 代码嵌入 HTML 中,用于方便地生成动态页面。本质上在运行时会被编译成 Servlet。 餐厅的传菜员,负责把做好的菜(数据)摆盘(渲染成HTML)端出去。
EL (Expression Language) 简化视图数据访问 :在 JSP (或 JSF) 中,使用 ${} 语法轻松访问 Servlet 传递过来的数据(如 request, session 中的属性)。 获取数据的快捷钥匙
JSTL (JSP Standard Tag Library) 标签库 :提供一组标准标签(如 <c:forEach>, <c:if>),在 JSP 中替代 Java 脚本,实现循环、逻辑判断、格式化等,使页面更清晰。 一套功能强大的厨房模具,让摆盘(页面逻辑)更规范、更容易。
过滤器 (Filter) 请求/响应预处理:在请求到达 Servlet 之前或响应发送给浏览器之前,执行一些通用操作,如:权限验证、日志记录、字符编码设置。 餐厅的安检和保洁,每个顾客(请求)和每道菜(响应)都要经过他们。
监听器 (Listener) 事件监听:监听 Web 应用生命周期中的事件,如:应用的启动/关闭、Session 的创建/销毁。用于执行相应的初始化或清理工作。 餐厅的物业管理员,负责大楼(应用)开业准备、下班关门、管理储物柜(Session)的租用和回收。
JDBC 数据库连接标准:Java 语言中用来规范客户端如何访问数据库的应用程序接口(API),提供连接、执行 SQL、获取结果的方法。 通往所有关系型数据库的通用驾驶执照
H2 / MySQL 关系型数据库:用于持久化存储应用程序的结构化数据。H2 是轻量级嵌入式数据库,常用于开发和测试;MySQL 是成熟强大的生产级数据库。 餐厅的仓库,H2 像临时小库房,MySQL 像大型中央仓库。
Redis 内存数据结构存储 :用作缓存会话存储(Session Store)。因其极高的读写速度,可以存储热点数据或用户会话,减轻数据库压力。 餐厅的备餐台/传送带,把常用的食材(热点数据)或顾客的临时物品(Session)放在手边,随用随取,速度极快。

二、数据流向

2.1 流程详解:

  1. 请求发起:用户在浏览器中操作(点击链接、提交表单),浏览器发送一个 HTTP 请求。

  2. 过滤预处理 :请求首先经过一个或多个过滤器(Filter),进行统一处理(如:设置字符编码、检查用户是否登录)。

  3. 核心处理 :过滤后的请求到达 Servlet

    • Servlet 作为控制器,解析请求参数。

    • 根据需要,通过 JDBC 驱动与数据库(MySQL/H2) 交互(增删改查)。

    • 为了提升性能,Servlet 可能会先查询或更新 Redis 中的缓存数据或会话信息。

  4. 数据传递与视图渲染

    • Servlet 将处理结果数据(例如,从数据库查询到的用户列表)放入请求属性(request.setAttribute)或会话中。

    • Servlet 将请求转发(Forward) 给一个 JSP 页面。

  5. 动态页面生成

    • JSP 页面接收 Servlet 传来的数据。

    • 在 JSP 中,使用 EL 表达式 ${} 来简便地显示数据。

    • 使用 JSTL 标签 <c:forEach> 等来实现循环、条件判断等逻辑,动态生成 HTML 内容。

    • 最终,JSP 生成一个纯粹的 HTML 文件,其中可能嵌入了 Script(JavaScript) 代码。

  6. 过滤后处理与响应 :生成的 HTML 响应在发回给浏览器之前,可能会再次经过过滤器(Filter) 进行后续处理(如:压缩内容)。

  7. 客户端渲染与交互 :浏览器接收到 HTML、CSS、JavaScript 后,渲染出最终页面。用户随后在页面上的交互由 Script(JavaScript) 处理,可能通过 AJAX 直接与后端的 Servlet 进行异步通信。

三、技术演进说明

在现代架构中(如前后端分离),JSP/JSTL/EL 的使用在减少,后端 Servlet (或基于 Servlet 的 Spring MVC 等框架)主要通过 REST API 返回 JSON/XML 数据,前端由纯粹的 HTML + JavaScript (Vue/React/Angular) 来消费这些 API 并渲染页面。但 过滤器(Filter)监听器(Listener)JDBC数据库Redis 的角色和作用在后端依然至关重要。

四、传统 Servlet/JSP MVC vs JAX-RS MVC

4.1 传统 Servlet/JSP MVC 架构:

  • 核心Servlet 作为 Controller,JSP 作为 View

  • 数据流:请求 → Filter → Servlet → 设置属性 → 转发到 JSP → 渲染 HTML

  • 典型框架:Spring MVC、Struts

4.2 JAX-RS MVC 架构:

  • 核心:使用 JAX-RS (Java API for RESTful Web Services) 作为基础,添加视图渲染能力

  • 数据流:请求 → JAX-RS 资源方法 → 返回数据模型 → 模板引擎渲染视图

  • 典型实现:Jersey MVC、RESTEasy MVC

4.3 优劣对比

方面 传统 Servlet/JSP MVC JAX-RS MVC
设计理念 基于动作的 MVC 基于资源的 RESTful + 视图
URL 映射 @WebServlet("/user") 或 XML 配置 @Path("/user") + HTTP 方法注解
视图技术 主要 JSP,也可集成其他 更灵活,支持多种模板引擎 (Freemarker, Mustache等)
返回类型 通常 RequestDispatcher.forward() 可返回 ViewableResponse 或直接数据
REST 支持 需要额外配置,不原生 原生支持 REST,同一控制器可服务 HTML 和 JSON
内容协商 需要手动处理 内置支持,根据 Accept 头返回不同格式
现代化程度 较传统,但成熟稳定 更现代,符合微服务趋势
学习曲线 相对平缓,概念直接 需要理解 REST 概念

五、现代企业级 Web 应用的技术选择

现实情况:现代企业很少"纯用"其中任何一种,而是采用混合或演进后的架构。

5.1. 前后端分离成为主流

技术栈:

  • 前端:React、Vue.js、Angular (单页面应用)

  • 后端 :Spring Boot + Spring Web MVC JAX-RS (Jersey)

  • 通信:RESTful JSON API,部分场景用 GraphQL

  • 数据:MySQL/PostgreSQL + Redis + 消息队列

2. Spring Boot 的统治地位

现代 Java 企业开发中,Spring Boot (基于 Spring MVC) 占据了绝对主导地位,原因:

  • 起步依赖:极简配置,快速搭建

  • 生态丰富:Spring Data、Spring Security、Spring Cloud 等完整解决方案

  • 生产就绪:Actuator、健康检查、Metrics 等开箱即用

  • 灵活视图:支持传统 MVC 也完美支持 REST API

5.3. 模板引擎的演进

即使需要服务器端渲染,也更多选择:

  • Thymeleaf (Spring 官方推荐) - 自然模板,可在浏览器中直接查看

  • Freemarker - 老牌强大模板引擎

  • JSP - 正在被逐渐淘汰,因为:

    • 编译性能问题

    • 与 Servlet 容器耦合过紧

    • 不利于模块化开发

5.4 现代企业级架构总结

场景 推荐技术栈 说明
传统企业内部系统 Spring Boot + Thymeleaf 开发快速,维护简单
互联网 Web 应用 Spring Boot + React/Vue 前后端分离,体验更好
微服务架构 Spring Boot (纯API) 只提供 REST API
高性能 API 服务 JAX-RS (Jersey/Quarkus) 对性能要求极高的场景
遗留系统维护 传统 Servlet/JSP 现有系统,逐步重构

核心结论:

  1. 技术选择上Spring Boot + Spring MVC 是目前企业级 Java Web 开发的事实标准

  2. 架构模式上前后端分离 已成为主流,后端主要提供 API

  3. JAX-RS 在需要严格遵循 REST 规范或构建轻量级 API 服务时是优秀选择

  4. 传统 Servlet/JSP MVC 主要存在于遗留系统,新项目较少采用纯这种架构

现代开发者应该掌握 Spring Boot 构建 REST API 的能力,同时了解前端框架的基本协作方式,这是当前就业市场最需要的技能组合。

六、什么是 REST API?

REST API 是一种基于 REST(Representational State Transfer)架构风格设计的应用程序编程接口。

6.1 核心特征:

  1. 无状态 (Stateless):每个请求包含所有必要信息,服务器不存储客户端状态

  2. 统一接口 (Uniform Interface):使用标准的 HTTP 方法(GET, POST, PUT, DELETE)

  3. 资源导向 (Resource-Based):一切都被抽象为资源,通过 URI 访问

  4. 表述性 (Representational):同一资源可以有不同表现形式(JSON, XML 等)

6.2 REST API 与传统 Web 应用的区别:

方面 传统 Web 应用 (Servlet/JSP) REST API
数据格式 返回 HTML 页面 返回 JSON/XML 数据
客户端 浏览器渲染页面 任何客户端(Web, 移动端, 第三方)
状态管理 常用 Session/Cookie 无状态,常用 Token
URL 设计 动作导向 (/login.do, /showUsers) 资源导向 (/api/users, /api/messages)
HTTP 方法 主要用 GET/POST 充分利用 GET/POST/PUT/DELETE 等

七、Web 请求完整数据流

相关推荐
多则惑少则明1 小时前
【算法题4】找出字符串中的最长回文子串(Java版)
java·开发语言·数据结构·算法
不会编程的小寒1 小时前
C and C++
java·c语言·c++
一 乐1 小时前
鲜花销售|基于springboot+vue的鲜花销售系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring
帧栈1 小时前
开发避坑指南(73):itext7 pdf表单字体加粗解决方案
java·pdf
就叫飞六吧1 小时前
找不到或无法加载主类 @C:\***\Local\Temp\idea_arg_file...
java·ide·intellij-idea
4***99741 小时前
后端在微服务中的Spring Cloud Gateway
java·微服务·架构
y1y1z1 小时前
Spring国际化
java·后端·spring
weixin_307779132 小时前
Jenkins ASM API 插件:详解与应用指南
java·运维·开发语言·后端·jenkins
ByteX2 小时前
springboot 项目某个接口响应特别慢排查
java·spring boot·后端