【Java 基础(人话版)】Java SE vs Java EE

Java SE vs Java EE:有什么区别?

最近在学习 Java 的时候,总是会看到 Java SE 和 Java EE 这两个概念。刚开始有点迷糊,后来查了资料、做了一些实验,终于弄清楚了它们的区别。这里记录一下,希望对以后复习或者遇到相同问题的朋友有帮助。


什么是 Java SE?

Java SE(Java Platform, Standard Edition) 是 Java 的标准版,可以理解为 Java 语言的基础。我们平时写 Java 代码用到的 java.langjava.utiljava.io 等核心类库,都是 Java SE 提供的。Java SE就是最基础的开发包。

Java SE 适用于开发:

  • 桌面应用程序(比如 Eclipse、IDEA 这样的 IDE,或者小型管理系统)
  • 简单的服务器端应用(比如用 Socket 开发一个局域网聊天工具)

它包含了 Java 虚拟机(JVM)、编译器(Javac)、JDK 提供的标准 API,还有我们最熟悉的 main 方法的程序入口。它带着你写代码、编译运行,集合框架这种必备工具。

示例:Java SE 应用

public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, Java SE!");}
}

这个简单的 HelloWorld 就是标准的 Java SE 代码,可以直接运行在 JVM 上。

再比如,我们想读取一个文件的内容并打印出来:

import java.io.*;public class ReadFileExample {public static void main(String[] args) throws IOException {File file = new File("example.txt");BufferedReader br = new BufferedReader(new FileReader(file));String line;while ((line = br.readLine()) != null) {System.out.println(line);}br.close();}
}

这段代码也是 Java SE 的范畴,主要是用 java.io 相关的类来操作文件。


什么是 Java EE?

Java EE(Java Platform, Enterprise Edition) 是 Java 的企业版,它是建立在 Java SE 之上的,主要用于开发企业级应用。

企业级应用一般会涉及:

  • Web 应用开发(比如 SpringBoot 开发的网站后台)
  • 分布式系统(比如电商网站的订单系统、支付系统)
  • 数据库访问(使用 JPA 或 JDBC 连接数据库)
  • 消息队列(JMS 等用于系统间的异步通信)
  • 事务管理(银行转账的事务控制)

Java EE 不是一个具体的 JDK,而是一系列的标准和规范,比如:

  • Servlet:处理 HTTP 请求的 Java 组件
  • JSP:用于编写动态网页
  • JPA(Java Persistence API):用于数据库持久化
  • JMS(Java Message Service):消息队列
  • EJB(Enterprise Java Beans):企业级组件(现在基本被 Spring 取代了)

示例:Java EE Web 应用(Servlet)
假设我们要开发一个 Web 服务,用户访问 http://localhost:8080/hello,浏览器就会显示 Hello, Java EE!,用 Java EE 实现的方法如下:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/hello")
public class HelloServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html");response.getWriter().println("<h1>Hello, Java EE!</h1>");}
}

这个 HelloServlet 继承了 HttpServlet,并使用 @WebServlet("/hello") 注解,意味着当用户访问 /hello 路径时,这个 Servlet 就会被调用,返回 Hello, Java EE!

这个示例展示了 Java EE 最基础的 Web 开发能力,而如果是一个完整的企业级应用,通常还需要数据库、事务管理、分布式部署等功能。


Java SE vs Java EE 的主要区别

对比项Java SEJava EE
用途开发桌面应用、小型服务器端应用开发 Web 和企业级应用
核心库提供基本 API(java.langjava.utiljava.io额外提供 Web、数据库、事务、消息队列等支持
是否包含 Web 技术不包含包含(Servlet、JSP、JPA、JMS 等)
开发环境直接运行在 JVM需要应用服务器(如 Tomcat、WildFly)
示例读取文件、计算器程序在线商城、银行管理系统

定位不同
SE像是瑞士军刀的基础款,EE则是专业电工包。有次试着用纯SE写Web项目,结果自己实现了半天Servlet才发现EE早就封装好了(血的教训)。

组件差异
刚开始学EE时被各种缩写吓到:

// EE项目日常
@WebServlet("/hello") // 注解大法好
public class HelloServlet extends HttpServlet {protected void doGet(...) {response.getWriter().println("真香!");}
}

而SE项目可能只是:

public static void main(String[] args) {System.out.println("Hello 单身狗");
}

部署环境
SE程序双击就能跑,EE项目却要伺候Tomcat这种主子。第一次部署时把war包扔错目录,对着404页面怀疑人生了半小时…


什么时候用 Java SE? 什么时候用 Java EE?

  • 如果只是写个小工具,比如处理 Excel、批量修改文件、爬取网页数据,那么 Java SE 就够了。
  • 如果要开发 Web 网站,比如一个博客系统或者在线商城,就需要用到 Java EE。

现在很多公司用 Spring Boot 作为 Java EE 的替代方案,因为它更轻量级,不需要复杂的应用服务器。但本质上,它依然属于 Java EE 体系。


结论

Java SE 和 Java EE 的区别,其实就是 基础 vs 企业级,如果只是学习 Java 语法或者写一些简单的应用,Java SE 足够了。而如果要做 Web 开发、数据库管理、大规模分布式系统,那么 Java EE 就必不可少。

虽然 Java EE 看起来更复杂,但它的很多概念(如 Servlet、JSP、JPA)依然是现代 Web 开发的基础,理解它们对学习 Spring Boot 甚至微服务架构都会很有帮助。

这篇笔记主要是对 Java SE 和 Java EE 的一些基础知识做个总结,算是对自己学习的一个整理。如果有错误或遗漏的地方,欢迎交流!后续会持续更新相关的 Java 基础内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26379.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EasyRTC:支持任意平台设备的嵌入式WebRTC实时音视频通信SDK解决方案

随着互联网技术的飞速发展&#xff0c;实时音视频通信已成为各行各业数字化转型的核心需求之一。无论是远程办公、在线教育、智慧医疗&#xff0c;还是智能安防、直播互动&#xff0c;用户对低延迟、高可靠、跨平台的音视频通信需求日益增长。 一、WebRTC与WebP2P&#xff1a;实…

为AI聊天工具添加一个知识系统 之127 详细设计之68 编程 核心技术:Cognitive Protocol Language 之2

问题 Q1396、根据我们的讨论&#xff0c;我前面给出的文字表述在用词准确性上以及完整性&#xff08;忽略细节&#xff09; 您觉得有问题吗&#xff1f;有用词错误和 缺项的问题吗 Q1397、请对具体术语的数学定义或工程实现方案进行深度扩展说明 Q1398、 请为全部映射关系提供…

ELK接入SpringBoot【Docker Compose】

安装Docker-Compose curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose 随便找个地&#xff0c;创建docker-compose.yml文件&#xff0c;把这坨文本复制进去 version: 3 services:el…

基于javaweb的SSM+Maven幼儿园管理系统设计和实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

NAT 代理服务 内网穿透

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; NAT 技术背景二&#xff1a;&#x1f525; NAT IP 转换过程三&#xff1a;&#x1f525; NAPT四&#xff1a;&#x1f525; 代理服务器&#x1f98b; 正向…

Apache IoTDB 树表双模型直播回顾(下)

2 月 26 日面向 Apache IoTDB 树表双模型的功能特性、适用场景、建模选择和未来规划&#xff0c;田原同学通过直播进行了全面解答。以下为直播讲稿&#xff08;下&#xff09;&#xff0c;干货满满&#xff0c;建议收藏⬇️⬇️ ⚡️注意&#xff1a; 1. 功能演示部分请直接查看…

LabVIEW中交叉关联算法

交叉关联算法通过统计多通道信号间的相关性&#xff0c;抑制各通道独立的本底噪声&#xff0c;保留共有的有效信号成分。其数学本质为对多个通道信号进行两两相乘并累加&#xff0c;最终通过归一化处理得到降噪后的输出信号。 这个VI演示了如何在LabVIEW中执行信号的互相关分析…

手撸大模型-基础篇 简单线性回归模型预测房价

# NumPy Pandas Matplotlib import numpy as np import matplotlib.pyplot as plt 双特征&#xff0c;矩阵化 1. Min-Max 归一化及其逆操作 1.1 输入数据归一化 def normalize1(sample, data): max_value np.max(data) min_value np.min(data) return (samp…

使用UA-SPEECH和TORGO数据库验证自动构音障碍语音分类方法

使用UA-SPEECH和TORGO数据库验证自动构音障碍语音分类方法 引言 原文:On using the UA-Speech and TORGO databases to validate automatic dysarthric speech classification approaches 构音障碍简介 构音障碍是一种由于脑损伤或神经疾病(如脑瘫、肌萎缩侧索硬化症、帕金森…

React底层原理详解

React中Element&Fiber对象、WorkInProgress双缓存、Reconcile&Render&Commit、第一次挂载过程详解 在面试中介绍React底层原理时&#xff0c;需遵循逻辑清晰、层次分明、重点突出的原则&#xff0c;结合技术深度与实际应用场景。以下是结构化回答模板&#xff1a;…

el-table修改表格颜色

文章目录 一、el-table属性修改表格颜色1.1、header-row-class-name修改表头行颜色1.2、header-row-style修改表头样式1.3、row-class-name修改行颜色 二、el-table-column属性修改表格颜色2.1、class-name修改整列的颜色2.2、label-class-name修改列标题颜色 本文讲解vue修改e…

Graphics View画一个可调速的风机(pyqt)

效果如图&#xff1a; 风机具备调节转速的功能&#xff0c;转速通过扇叶旋转的快慢来区别&#xff0c;共分为四档&#xff0c;其中零档为静止状态&#xff0c;而一、二、三档则依次增加转速。在代码中&#xff0c;BlowerWrapper 类包含了可旋转的扇叶、风机外框以及选项三个主要…

SP脏迹Dirt生成器

常用生成器之一 用于模型表面生成污垢和脏迹 添加一个填充图层 添加黑色遮罩 添加生成器 选择Dirt 调整强度 如果UV有接缝就把Use Triplanar打开

AnyDesk 远程桌面控制软件 v9.0.2

AnyDesk 是一款功能强大的跨平台远程桌面控制软件。它支持 Windows、MacOS、Linux 和 Android 系统&#xff0c;同时 iOS 也在其支持范围内。其主要功能包括远程桌面控制&#xff0c;用户能远程访问其他计算机或移动设备&#xff0c;用于远程协作、支持和教授等&#xff0c;可实…

关于延迟任务线程池,Java提供的ScheduledThreadPoolExecutor,Spring提供的ThreadPoolTaskScheduler

今天讲解定时任务、延迟任务的线程池使用方式&#xff1a; 1、从 java 角度 2、从 Spring 框架角度 文章目录 Java提供&#xff1a;ScheduledExecutorService接口&#xff08;创建延迟任务线程池&#xff09;① 用法1&#xff1a;1. 重写afterExecute方法2. .schedule()方法调度…

Python PDF文件拆分-详解

目录 使用工具 将PDF按页数拆分 将PDF的每一页拆分为单独的文件 将PDF按指定页数拆分 根据页码范围拆分PDF 根据指定内容拆分PDF 将PDF的一页拆分为多页 在日常生活中&#xff0c;我们常常会遇到大型的PDF文件&#xff0c;这些文件可能难以发送、管理和查阅。将PDF拆分成…

链表的概念及功能实现

一、链表之单向链表 前面我们使用顺序储存结构实现的顺序表&#xff0c;虽然查询的时候很快&#xff0c;但在进行元素的增加或者删除的时候:比较麻烦&#xff0c;需要你去移动大量的元素把数据删除或者增加。 链表里的数据是以结点方式来表示的&#xff0c;每一个结点的组成是…

【Python 语法】算法合集

查找二分查找代码大 O 表示法 广度优先搜索代码 狄克斯特拉算法 递归递归调用栈 分而治之&#xff08;divide and conquer&#xff0c;D&C&#xff09;贪心教室调度问题背包问题集合覆盖问题 动态规划背包问题旅游行程最优化 遇到问题时&#xff0c; 如果不确定该如何 高效…

Android 应用开发中,证书、签名和加固简述

在 Android 应用开发中&#xff0c;证书、签名和加固是保障应用安全和完整性的重要机制&#xff0c;各自作用如下&#xff1a; 一、应用证书&#xff08;Digital Certificate&#xff09; 作用&#xff1a; 身份标识&#xff1a;证书包含开发者的公钥、组织信息等&#xff0c;用…

在什么情况下需要使用光谱相机呢?

1.需要捕捉不可见光信息时 光谱相机不仅能捕捉可见光&#xff0c;还能记录红外、紫外等波段的光谱信息。以下场景尤其适用&#xff1a; 环境监测&#xff1a;检测水质、空气污染物等肉眼无法观察的物质。 农业监测&#xff1a;分析植物的近红外反射率&#xff0c;判断作物健…