学了大概一周做了点桌面小玩意儿,做了几个 demo 网站,有些许疑惑有没有 java 前辈指点一下。
我知道 java ee 是个规范(这个规范是书面文档而已,是个倡议?还是一些具体的 API 且内置的?) 然后 JavaEE 交给了 Eclipse 现在叫 JakartaEE 我看到有一些包名是 jakarta.* 所以应该是一些具体的 jdk 内置的包?或三方包?
spring 是个什么东西?是类似 php 的 laravel ,python 的 fastapi ,go 的 gin ,rust 的 tokio 吗?只是在某个领域的事实标准,只是大多数人用,但不强制?
netty 又是个啥?文档说同等功能的还有 undertow 、tomcat-embed ,也只是基于内置 NIO 实现的“实时标准”框架吗?
1
luman 23 小时 17 分钟前 为什么不问问神奇的 AI 呢?
|
3
pengtao2001 23 小时 15 分钟前
善用 ai
|
4
BeiChuanAlex 23 小时 14 分钟前 @luman #1 因为他不懂,所以是问不出问题的。AI 只能锦上添花,不能雪中送炭。
|
5
vhui 23 小时 13 分钟前
可以上小破站搜一下 Spring 等相关邪修
|
6
hidemyself 22 小时 59 分钟前 Jakarta EE 是个规范,也可以理解成所谓的"最佳实践",可以遵循也可以不遵循。
Spring 是个框架,和你提到几个类似。可以不用,但是大部分写 Java 的都用。 Netty 也是个框架 |
7
Ayanokouji 22 小时 50 分钟前 1. 你不需要知道 Jakarta EE 规范是什么东西,这东西除非你去开发框架,比如 spring ,才有用
2. spring 是一个大而全的框架,直接使用 spring boot 简化开发即可 3. spring 已经是事实标准了,不建议学其他框架,另外 spring 比其他语言的框架强大的多,但是你不一定能用到 4. netty 除非调研确定,必须使用,负责一律使用 spring-web 即可,tomcat 够用了 |
8
gongym 22 小时 48 分钟前
Jakarta EE 是个规范,也是实践,不是 JDK 内置的包,目前是属于 Eclipse 基金会的
|
9
Goooooos 22 小时 46 分钟前
普通的开发,都不用深入去了解 JavaEE
|
10
gongym 22 小时 45 分钟前 Spring ( Springboot )是一个大而全的框架,基本包含了 Java 服务端开发的所有工具和库,已经是事实标准了
大多数人用?基本 Java 服务端开发都会使用 强制? Java 开发基本没有强制的说法 |
11
gongym 22 小时 41 分钟前 Netty 是一个网络开发工具包,一般用于开发 Socket 服务端,比较底层,性能也很好
----文档说同等功能的还有 undertow 、tomcat-embed 说的是 Netty 也可以用于开发 Http 服务端,在这个使用场景上可以说功能同等 ----也只是基于内置 NIO 实现的“实时标准”框架吗 是 |
12
newaccount 22 小时 20 分钟前 Java EE 是规范,你这么理解
你做网站服务器(tomcat),他也做网站服务器(undertow) 那我要开发网站需要在你俩的服务器上运行,如果你们俩各玩各的,我是不是得根据你俩的规范单独开发 如果现在有一套规范(接口),你俩都保证实现这个接口定义的功能,我就只需要调用这套接口就行了,实际运行在 tomcat 还是 undertow 是无所谓的 这套规范就是 Java EE 以前这套玩意在 javax 包下面,由于 Sun 被 Oracle 这专利老流氓收购了之后,别人不能用 javax 这名字,后来 Oracle 终于非常“大度”的表示,新的规范我不管了,但你们得开个新服,不能继续在 javax 下面,这个新的名字就是 jakarta spring 你暂时把它理解为跟 Java EE 同级别的东西,由于早期对 Java EE 的唾弃而开发出来的 pro max ultra 超级无敌至尊加强版,不仅仅是规范,更是一套最佳开发实践,你照着它给你定好的套路填东西就行,无脑用 netty 太底层了,不用管,等你啥时候觉得 http 协议太烂打算重新开发一套的时候再去看也不急 |
13
kzfile 22 小时 12 分钟前
其他语言里似乎没有一种像 spring 这样巨大的东西,已经不仅仅是 web 框架了
|
14
vvtf 22 小时 9 分钟前 我补充几点吧,
1. spring 是一个框架也可以理解一个生态. 有很多组件, 与大多数的中间件有实现. 经过了很多开发者的验证与实践的, 比如你们老板让你对接一个 mqtt,对接 kafka 就可以看下 spring 有实现没, 有的话就可以直接生产用. 2. netty 还是很重要的, 与物联网打交道的用的很多, 自己只关心协议的编解码就行了, 很强大. 用的也很多. |
15
dzdh OP @vvtf
我看 new 了一个 httpcodec 的东西。不看源码,就盲猜,是不是在 accept 一个 conn 后第一步的操作,解析完数据后再传给下一个处理器。而这个 httpcodec 就是解析 http 的 header 头,生成 request 对象再把 body 再往下传。 如果我开发物联网。我就自己写一个 customIotCodec 的东西,从第一个字节的数据包开始解析完成预处理工作再传给接下来的 handler |
17
cnhongwei 21 小时 57 分钟前 jdk 只有基本功能,如文件读写,数据库 sql 的执行,加密,桌面等。但这些用来写企业级应用还不够方便,企业需要 web 服务器,数据库访问,消息处理,远程调用等,所以就有了 JakartaEE(原来叫 JavaEE),但这些不在 jdk 的范围内,这些只是一些规范,各个厂商有自己的实现,当然 oracle(原来的 sun)有 glassfish 来实现 JakartaEE ,但当时 javaee 太复杂了,特别是 EJB 这一块,很复杂而且开发不方便,所以有些就只实现了 jakartaee 的一部分,主要就是 web 这一部分,tomcat, undertow, jetty 就是这样出来的。
而 spring 就基于 web 这一块的实现,加上 Jpa(数据库)等,做了一个大而全的,使用 JakartaEE 一部分规范(不包括 EJB),实现了企业级开发的各种功能,大家都爱用,所以 spring 成了 java 开发互联网应用,企业应用的事实标准,但你可以不用,就像你不用 fastapi 来,自己使用 python 从头来实现 web 服务器也是可以的。 所在类比的话,spring 是类似于 python 的 fastapi 之类的框架,当然也有其它的框架,只是使用没有 spring 多而已。 因为 spring 中的 web 功能是基于 tomcat 或 undertow 或 jetty 来实现的,所以以前生成的企业应用要放到 tomcat 这样的应用进去部署,比较麻烦,所以就出来 spring boot ,spring boot 是集成了 tomcat 或 undertow 或 jetty ,部署的时候就更方便了,所以现在学习 spring ,就直接学习 spring boot 了。 |
18
vvtf 21 小时 57 分钟前 @dzdh #15
是的,大概就是这样,netty 会处理连接信息,开发人员只关心具体数据(in/out)就行了. netty 内置了很多标准协议的 codec, 如 http,websocket,mqtt,redis,stomp 等. 有很多的解码方式处理沾报/半包等.如固定头,固定长度等. 还有内置心跳等之类的. |
19
EeveeRibbon 21 小时 22 分钟前
感觉 Spring 在 Java 语言里已经是垄断级别的地位了,其他别的语言应该没有像这样的吧
|
20
manami 21 小时 22 分钟前
能吃透 spring 已经天下无敌了
|
21
bbao 19 小时 32 分钟前
你就说那个培训班的吧。
|
22
iseki 17 小时 9 分钟前 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 地位高一点。 |
23
iseki 17 小时 9 分钟前
修正:比 Netty 地位高一点 -> 比 Netty 位置高一点
|
24
iseki 17 小时 4 分钟前
和其它语言生态的一个很大不同是,Java 世界习惯定义标准,按标准实现。
比如数据库驱动,Go 那边是有个 sql/db 包,Java 这边有一个好几百页的 JDBC Specification ; 比如 Web Server ,Go 那边 Gin 什么的自己画一个 API 就完了,Java 这边会有标准委员会发布的 Jakarta Servlet Specification ,如果没有特别的理由,你的 Web Server 最好实现该规范; 标准化的好处就不多说了,坏处也不多说了。 |
25
dzdh OP @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 了呗。 |
26
iseki 16 小时 57 分钟前
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 的这种做法值得其它语言生态学习。 |
27
iseki 16 小时 52 分钟前
> 基础语法和类型学完了,知道泛型怎么用,熟练会用反射,知道怎么动态 invoke ,学会函数式接口,知道 collect 、list 、map 、lock 等。其实 java 就是已经学会了。
我觉得可以这么说。至于 EE 的部分,随着时代变迁,也不是所有人都认可 JakartaEE 甚至很多 SE 里的标准了,毕竟他们一方面历史悠久,另一方面他们往往是 ^{TM} 的,很多人(?)对这个有不良印象。 只能说大多数 Java Web 相关项目比较喜欢 Spring 系软件包。其它还是不一定要用 Spring 系的,这个可以自由探索。 |
28
mmdsun 15 小时 23 分钟前 via iPhone
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 。 |
29
Moatkon 3 分钟前
用 java 解决一个实际问题,就差不多了
|