杰瑞科技汇

Java EE与Java SE有何核心区别?

  • Java SE (Java Standard Edition) 是 Java 的基础,它包含了构建任何类型 Java 应用程序所需的核心库和虚拟机。
  • Java EE (Java Platform, Enterprise Edition) 是在 Java SE 基础之上构建的企业级应用开发平台,它提供了大量用于开发大型、分布式、多层、事务性、安全的网络应用程序的 API 和运行时环境。

详细对比

为了更好地理解,我们可以用一个表格来对比它们的核心差异:

Java EE与Java SE有何核心区别?-图1
(图片来源网络,侵删)
特性 Java SE (标准版) Java EE (企业版)
定位 基础平台,所有 Java 版本的核心。 企业级应用平台,构建在 Java SE 之上。
核心组件 - Java 虚拟机
- 核心语言特性
- 基础 API (集合、IO、网络、多线程等)
- Swing/AWT (桌面 GUI)
- Web 容器 (如 Tomcat, Jetty)
- 应用服务器 (如 WebLogic, WebSphere)
- 企业级服务 API
主要用途 - 开发桌面应用程序
- 开发控制台应用程序
- 学习 Java 语言基础
- 开发 Android App (基于 Java SE)
- 开发 Web 应用 (网站、后台服务)
- 开发分布式系统
- 开发大型企业级应用 (如银行、电商系统)
关键 API/技术 - java.lang, java.util, java.io, java.net
- JDBC (数据库连接基础)
- 多线程
- Servlet/JSP (Web 请求处理)
- EJB (Enterprise JavaBeans) (业务逻辑组件)
- JPA (Java Persistence API) (ORM 对象关系映射)
- JMS (Java Message Service) (消息队列)
- JTA (Java Transaction API) (事务管理)
- JAX-RS/JAX-WS (Web 服务)
运行环境 可以在任何安装了 JRE 的机器上运行。 通常需要运行在应用服务器Web 容器中。
关系 是 Java EE 的基础,没有 Java SE,Java EE 就无法运行。 是 Java SE 的超集,在其上增加了大量企业级功能。

深入解析

Java SE (Java Platform, Standard Edition)

你可以把 Java SE 想象成盖房子的“砖、水泥、钢筋”“地基”,它提供了最核心、最通用的功能。

  • 核心是什么?

    • JVM (Java Virtual Machine):Java 程序运行的心脏,负责执行字节码,实现“一次编写,到处运行”。
    • 核心类库:提供了语言本身之外的所有基础功能,比如处理字符串、集合、文件输入输出、网络连接、多线程等,这些都在 java.* 包下。
    • 基础语言特性:面向对象、异常处理、泛型等。
  • 它能做什么?

    • 一个简单的计算器程序。
    • 一个控制台输出的“Hello, World!”。
    • 一个桌面客户端软件,比如用 JavaFX 开发的工具。
    • 它是学习 Java 的第一步,也是所有 Java 开发者必须掌握的基础。

Java EE (Java Platform, Enterprise Edition)

你可以把 Java EE 想象成盖“摩天大楼”“预制件和施工蓝图”,它利用 Java SE 的砖块,提供了专门用于构建大型、复杂、高并发、高可用性建筑的模块和工具。

Java EE与Java SE有何核心区别?-图2
(图片来源网络,侵删)
  • 它解决了什么问题? 企业级应用通常非常复杂,需要处理:

    • 高并发:成千上万的用户同时访问。
    • 事务性:保证数据操作的原子性、一致性、隔离性和持久性(比如银行转账)。
    • 安全性:用户认证、授权、数据加密等。
    • 分布式:系统由多个独立的服务组成,通过网络通信。
    • 可扩展性:能够根据负载增加服务器来应对更高的访问量。
  • 它提供了什么“预制件”?

    • Servlet:处理来自 Web 浏览器的 HTTP 请求,可以理解为 Web 服务器的“门卫”或“前台接待”,负责接收请求并分发。
    • JSP (JavaServer Pages):用于动态生成 HTML 页面,它让 Java 代码和 HTML 模板可以混合编写,方便展示数据。
    • EJB (Enterprise JavaBeans):封装复杂的业务逻辑,它是一个服务端的“组件模型”,让你可以方便地创建可重用、安全的业务逻辑模块。
    • JPA (Java Persistence API):让你可以用 Java 对象来操作数据库,而不用写繁琐的 SQL 语句,这是 ORM (Object-Relational Mapping) 的标准。
    • JMS (Java Message Service):实现应用程序之间的异步通信,用户下单后,系统可以发送一个“订单已创建”的消息,通知库存、物流等系统去处理,而不需要等待这些处理完成才返回响应给用户。
    • JTA (Java Transaction API):提供跨多个资源(如数据库、消息队列)的事务管理能力。

演示一个简单的例子

假设我们要开发一个用户登录功能。

使用 Java SE (简化版):

Java EE与Java SE有何核心区别?-图3
(图片来源网络,侵删)
// 1. 连接数据库 (需要自己管理连接、处理异常)
Connection conn = DriverManager.getConnection("jdbc:mysql://...", "user", "pass");
// 2. 编写 SQL 语句
String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
// 3. 创建 Statement 并执行
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "admin");
pstmt.setString(2, "password123");
ResultSet rs = pstmt.executeQuery();
// 4. 处理结果
if (rs.next()) {
    System.out.println("登录成功!");
} else {
    System.out.println("用户名或密码错误!");
}
// 5. 关闭资源 (非常重要,容易忘记)
rs.close();
pstmt.close();
conn.close();

这个代码片段有很多问题:数据库连接怎么管理?连接池呢?事务怎么办?代码耦合度高,难以复用。

使用 Java EE (更规范的方式):

// 1. 使用 JPA (Entity)
@Entity
public class User {
    @Id
    private String username;
    private String password;
    // getters and setters
}
// 2. 使用 EJB (Session Bean) 封装业务逻辑
@Stateless
public class UserLoginService {
    @PersistenceContext // 容器自动注入 EntityManager
    private EntityManager em;
    public boolean login(String username, String password) {
        // JPA 自动帮你生成 SQL 并处理结果
        User user = em.find(User.class, username);
        if (user != null && user.getPassword().equals(password)) {
            return true;
        }
        return false;
    }
}
// 3. 使用 Servlet 处理 Web 请求
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @EJB // 容器自动注入 EJB
    private UserLoginService loginService;
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if (loginService.login(username, password)) {
            // 登录成功,重定向到主页
            response.sendRedirect("home.jsp");
        } else {
            // 登录失败,返回错误信息
            request.setAttribute("error", "用户名或密码错误");
            request.getRequestDispatcher("login.jsp").forward(request, response);
        }
    }
}

对比一下,Java EE 的方式:

  • 关注点分离:数据访问、业务逻辑、Web 请求处理被清晰地分离开。
  • 容器管理:数据库连接、事务、安全等由应用服务器容器自动管理,开发者无需关心。
  • 代码更简洁、更健壮:使用注解(如 @EJB, @PersistenceContext)极大地减少了样板代码。

现状与演进:从 Java EE 到 Jakarta EE

这是一个非常重要的知识点!

由于 Oracle 公司对 Java EE 商标和规范的变更,为了避免法律纠纷,Java EE 社区(主要是开源社区)在 2025 年发起了 Jakarta EE 项目。

  • Java EE 是 Oracle 拥有的商标。
  • Jakarta EE 是由 Eclipse 基金会管理的开源品牌。

主要变化: 所有 javax.* 包名的 API 都被重命名为 jakarta.*

  • javax.servlet -> jakarta.servlet
  • javax.persistence -> jakarta.persistence
  • javax.ejb -> jakarta.ejb

这意味着什么? 如果你现在开始学习一个新的 Java 企业级项目,你几乎肯定会使用 Jakarta EE 的规范和 API,虽然很多老项目仍在使用 Java EE (javax),但新项目都应该拥抱 Jakarta EE。

总结一下演进路径: Java SE 8 -> Java EE 8 -> Jakarta EE 8 / 9 / 10 ...


Java SE Java EE / Jakarta EE
角色 基石,提供核心语言和运行时。 上层建筑,提供企业级应用开发的框架和工具。
学习路径 必学第一步,所有 Java 开发的基础。 在掌握 Java SE 之后,用于构建大型、复杂的网络应用。
现代选择 依然是所有 Java 开发的起点。 Jakarta EE 是当前和未来的标准,Spring Boot 等框架也大量借鉴了其思想,但提供了更简洁的开发体验。

Java SE 是“地基”,Java EE (Jakarta EE) 是“在上面盖大楼用的专业工具包”,两者相辅相成,共同构成了强大的 Java 生态系统。

分享:
扫描分享到社交APP
上一篇
下一篇