什么是 JavaEE / Jakarta EE,为什么要学它
先说历史包袱,别被名字绕晕:JavaEE(Java Platform, Enterprise Edition) 是 Sun 时代(后来 Oracle)定的一套"企业级开发规范"。2017 年 Oracle 把它捐给 Eclipse 基金会,因为 "Java" 是商标,不能随便用,2019 年正式改名 Jakarta EE。最实质的变化:所有包名从 javax.servlet.* 改成了 jakarta.servlet.*。
论为什么要学"过时"的 Jakarta EE
是什么:Jakarta EE 不是某一个软件,而是一组规范——Servlet 规范(怎么处理 HTTP 请求)、JSP 规范(怎么写动态网页)、JDBC 规范(怎么连数据库)。Tomcat、Jetty 这些是"实现了规范的容器"。
为什么要学:今天公司里 90% 的 Java Web 用 Spring Boot,没人手写 Servlet。但 Spring 只是把 Servlet、JDBC 这些底层包了层舒服的壳。你不认识壳底下的砖,Spring 报错时(比如 404、405、过滤器链、乱码)就只能干瞪眼。学 Jakarta EE 是为了看懂 Spring 在替你干什么。
版本基线:本页按 Jakarta EE 10/11 讲,对应 Servlet 6.0、JSP 3.1、JDBC 4.3,运行在 Tomcat 10+ / JDK 11 以上(具体 minor 版本以 Tomcat 官网兼容矩阵为准)。包名一律是 jakarta.*,网上老教程的 javax.* 别照抄。
| 你写的东西 | 老写法(Jakarta EE 裸用) | 现代写法(Spring Boot 替你干了) |
|---|---|---|
| 接一个 GET 请求 | 写一个 Servlet,配 web.xml 或注解 | 一个 @GetMapping 注解 |
| 查数据库 | 手写 JDBC,自己开连接关连接 | JdbcTemplate / MyBatis / JPA |
| 返回网页 | 写 JSP,混 HTML 和 Java | 返回 JSON 给前端 Vue/React |
| 登录拦截 | 自己写 Filter 检查 Session | Spring Security 配几行配置 |
论名字演变史:J2EE → JavaEE → Jakarta EE
2000 年前后:Sun 公司搞出 J2EE(Java 2 Platform, Enterprise Edition),一套重量级规范,EJB 那套配置繁琐到劝退一代人。
2006 年:改名 Java EE,版本号跳到 5、6、7、8,越来越轻。Spring 就是在吐槽 EJB 的浪潮中崛起的。
2017 年起:Oracle 把 JavaEE 捐给 Eclipse 基金会,但 "Java" 是注册商标不能随便用,2019 年正式改名 Jakarta EE,包名从 javax.* 整体迁到 jakarta.*。你看到的 javax / jakarta 之争,就是这段历史的尾巴。
Servlet 容器三连:Tomcat、Jetty、Undertow
"实现了 Servlet 规范"的软件,就叫 Servlet 容器(也叫 Web 容器)。它负责把 HTTP 协议翻译成 Request/Response 对象。三者区别不大,初学认准 Tomcat 就行。
| 容器 | 特点 | 你会在哪遇到它 |
|---|---|---|
| Tomcat | Apache 出品,最主流、资料最多、坑最少。 | 教科书、公司老项目首选;学它不亏。 |
| Jetty | 轻量,善于嵌进程序里(嵌入式)。 | 一些中间件、测试环境内嵌启动。 |
| Undertow | 高性能、非阻塞,Spring Boot 默认可选。 | 追求高吞吐时替换 Tomcat。 |
动手前的环境三件套
光看本页代码跑不起来,先把这三样装好:① JDK 21(上一页已讲);② Tomcat 10+(官网解压即用,启动 bin/startup.sh,浏览器开 http://localhost:8080 看到猫脸就算活了);③ MySQL 8.x。JSTL 标签库和 JDBC 驱动,用 Maven 加依赖最省事,别手动下 jar 到处扔。
| 工具 | 干什么 |
|---|---|
| Tomcat 10+ | 跑 Servlet 的容器,本页所有代码的宿主。 |
| MySQL 8.x | 存用户、留言数据;JDBC URL 端口 3306。 |
| Maven(推荐) | 管依赖(JDBC 驱动、JSTL、HikariCP),别手动下 jar。 |
这一页怎么学:别和 Spring 一起学
给你的学习节奏排个队:① 先把 Servlet + JSP + JDBC 三件套手敲一遍(就是第 9 章留言板);② 遇到不懂的底层概念(过滤器、Session)再回翻本页;③ 留言板跑通后,再去学 Spring Boot。
最大的弯路是刚看完 Servlet 就同时啃 Spring——两个东西都半吊子,出了问题不知道怪谁。先把裸 Servlet 玩明白,Spring 只是替你把这些零件自动化。
1.(概念题)Java EE 和 Jakarta EE 是什么关系?为什么改名?
查看答案
答案:同一个东西,改名了。Oracle 2017 年把 JavaEE 捐给 Eclipse 基金会,因为"Java"是商标不能随便用,2019 年改名 Jakarta EE。最实质变化:包名从 javax.* 改成 jakarta.*。
2.(选择题)Tomcat 10.1 对应哪个规范?包名是?A. Java EE 8 / javax B. Jakarta EE 10 / jakarta C. Jakarta EE 8 / javax
查看答案
答案:B。Tomcat 10.1 对应 Jakarta EE 10,Servlet 6.0,包名 jakarta.*。Tomcat 9 才是 javax。
3.(概念题)Spring Boot 3.x 要求哪个 JDK?包名是?
查看答案
答案:JDK 17+,包名 jakarta.*。Spring Boot 2.x 才用 javax。从 2 升 3 要全量换包名。
4.(概念题)Servlet 容器是什么?Tomcat 和 Jetty 区别?
查看答案
答案:实现了 Servlet 规范的软件,把 HTTP 请求翻译成 Request/Response 对象。Tomcat 最主流资料最多;Jetty 轻量适合嵌入式。初学认准 Tomcat。