新手 javaer 咨询几个问题

2025 年 10 月 31 日
 dzdh

学了大概一周做了点桌面小玩意儿,做了几个 demo 网站,有些许疑惑有没有 java 前辈指点一下。

我知道 java ee 是个规范(这个规范是书面文档而已,是个倡议?还是一些具体的 API 且内置的?) 然后 JavaEE 交给了 Eclipse 现在叫 JakartaEE 我看到有一些包名是 jakarta.* 所以应该是一些具体的 jdk 内置的包?或三方包?

spring 是个什么东西?是类似 php 的 laravel ,python 的 fastapi ,go 的 gin ,rust 的 tokio 吗?只是在某个领域的事实标准,只是大多数人用,但不强制?

netty 又是个啥?文档说同等功能的还有 undertow 、tomcat-embed ,也只是基于内置 NIO 实现的“实时标准”框架吗?

4029 次点击
所在节点    Java
30 条回复
bbao
2025 年 10 月 31 日
你就说那个培训班的吧。
iseki
2025 年 10 月 31 日
Jakarta EE 是一个规范集合,你可以在 https://jakarta.ee/specifications/ 找到该集合下的各类规范。
规范的原初形式是文档,有 HTML 和 PDF 两个版本,其次,对于可以通过 Java API 表述的部分,他们在中央仓库上发布了 API 定义 Jar 包,你可以直接使用。(请注意,这个包一般来说只包含定义不包含实现)

Spring 是一个框架生态体系( aka.品牌)其包含各类用于开发的软件包,依赖注入、Web 、安全、工具链等等。他们实现了各类标准,Jakarta EE 是一个重要的标准组成部分。

Netty 是一个基础 IO 库,它在生态地位(aka.产业链)上更接近 Rust 的 tokio 。undertow tomcat 则是实现了 Jakarta EE 标准的 Web Server ,比 Netty 地位高一点。
iseki
2025 年 10 月 31 日
修正:比 Netty 地位高一点 -> 比 Netty 位置高一点
iseki
2025 年 10 月 31 日
和其它语言生态的一个很大不同是,Java 世界习惯定义标准,按标准实现。
比如数据库驱动,Go 那边是有个 sql/db 包,Java 这边有一个好几百页的 JDBC Specification ;
比如 Web Server ,Go 那边 Gin 什么的自己画一个 API 就完了,Java 这边会有标准委员会发布的 Jakarta Servlet Specification ,如果没有特别的理由,你的 Web Server 最好实现该规范;

标准化的好处就不多说了,坏处也不多说了。
dzdh
2025 年 10 月 31 日
@iseki 正缺这个。

我理解就是 JavaEE(JakartaEE)就是约定了一些标准化接口(jar 都是 interface)和配套的说明文档。

其中包含了从 web 整体到各种协议到各种 handler 的接口,比如 ServletRequest 。然后各个自己的 web 容器(比如 tomcat )和应用程序只要按照这套接口进行开发,那么就可以方便的随意随时的切换到其他各个平台。

所以 JakartaEE 只是个建议标准。但是不强制,比如 alibaba 可能 0 遵守自己按照自己的规则开发,只是 spring 大大简化了开发的复杂程度,简单配置就可以使用。

比如 solon 只是部分实现了相关接口。

说到底,自己不怕麻烦,可以使用 java.nio 自己从端口监听到处理数据包,解决粘包自己从 0 开始做。


所以 java 的优势是轮子多和所谓的“健壮性”呗。

基础语法和类型学完了,知道泛型怎么用,熟练会用反射,知道怎么动态 invoke ,学会函数式接口,知道 collect 、list 、map 、lock 等。其实 java 就是已经学会了。但是正规军都是用 spring 了呗。
iseki
2025 年 10 月 31 日
Every Jakarta EE specification includes:

A specification document and Javadoc (APIs) that describe how the technology is implemented.
A Technology Compatibility Kit (TCK) document that describes the tests that must be passed for Jakarta EE implementations to be certified as compatible.
A compatible implementation that successfully passed the TCK.

我觉得 Jakarta EE 的这种做法值得其它语言生态学习。
iseki
2025 年 10 月 31 日
> 基础语法和类型学完了,知道泛型怎么用,熟练会用反射,知道怎么动态 invoke ,学会函数式接口,知道 collect 、list 、map 、lock 等。其实 java 就是已经学会了。

我觉得可以这么说。至于 EE 的部分,随着时代变迁,也不是所有人都认可 JakartaEE 甚至很多 SE 里的标准了,毕竟他们一方面历史悠久,另一方面他们往往是 ^{TM} 的,很多人(?)对这个有不良印象。
只能说大多数 Java Web 相关项目比较喜欢 Spring 系软件包。其它还是不一定要用 Spring 系的,这个可以自由探索。
mmdsun
2025 年 10 月 31 日
Java EE (现 Jakarta EE ) 是一套企业级开发的规范( Specification ),涵盖 Web 容器( Servlet 、JSP )、数据访问( JPA )、分布式事务之类的。

Spring 是一套开源框架体系,简化并替代了部分 Jakarta EE 技术,比如 spring data jpa 。成为事实上的企业级开发标准。(早期 JavaEE 过于复杂)

Netty 是基于 Java NIO 的异步网络通信框架,专注于高性能网络 I/O 。像网关、物联网、实时通讯 IM 、底层网络开发比如:socks5 代理软件、自己公司内部搞个自定义协议、都可以开发。早期 Java NIO 有很多 BUG 而且不好用。Netty 提供了良好的封装。

Tomcat / Undertow / Jetty 都是 Jakarta Servlet 规范的实现,现在内部基于 Java NIO 构建非阻塞架构,但都没有使用 Netty 。
Moatkon
2025 年 11 月 1 日
用 java 解决一个实际问题,就差不多了
kaneg
2025 年 11 月 1 日
Spring 强大到只要你想正经做点东西,尤其是企业级的,是绕不过他的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1169693

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX