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