招聘 JD 上还写着「熟悉 J2EE」,面试问的却是 Spring Boot 和 MyBatis,两边其实不是一回事。

J2EE 是 Java 2 Platform, Enterprise Edition 的缩写,2006 年改名 Java EE,2017 年 Oracle 把规范交给 Eclipse 基金会,又改成 Jakarta EE。名字换了三次,规范内容大体延续。

它到底规定了什么

  • Servlet 和 JSP:处理 HTTP 请求、渲染页面。
  • EJB:早期承担事务和远程调用,现在基本被 Spring 取代。
  • JMS、JTA、JPA、JCA:消息、分布式事务、持久化、连接器。

关键点:J2EE 是一套规范,不是产品。要跑起来得有实现,比如 Tomcat(只实现了 Servlet 和 JSP 一部分)、WildFly、WebLogic、WebSphere 这些应用服务器。

和 Spring Boot 的关系

Spring 起家时就是照着 Java EE 规范做轻量替代。以前部署一个 war 要装 WebLogic、配数据源、写 web.xml;现在一个内嵌 Tomcat 的 jar,java -jar 就能启动,配置全在 application.yml 里。所以 JD 里的 J2EE 多半是历史习惯,实际干活是 Spring 那一套。

面试常问的 war 和 jar 的区别也在这里:war 交给外部容器部署,jar 自带容器能直接启动。这也解释了为什么现在的项目里几乎见不到 web.xml。

升级时最疼的是包名

Java EE 8 之后,javax.servlet 全部改成 jakarta.servlet。老项目升到 Jakarta EE 9+ 或 Spring Boot 3,得把 import 全换一遍,依赖的 jar 也要换成新命名空间的版本,漏一个就报 ClassNotFoundException,有时还要在启动日志里翻半天才看得出是哪个三方库没跟上。

新项目别纠结这个词,直接按 Spring Boot 3 加 jakarta 命名空间起步。维护老系统,先看 pom 里是 javax 还是 jakarta,再判断能不能升。