学了大概一周做了点桌面小玩意儿,做了几个 demo 网站,有些许疑惑有没有 java 前辈指点一下。我知道 java ee 是个规范(这个规范是书面文档而已,是个倡议?还是一些具体的 API 且内置的?) 然后 JavaEE 交给了 Eclipse 现在叫 JakartaEE 我看到有一些包名是 jakarta.* 所以应该是一些具体的 jdk 内置的包?或三方包?
spring 是个什么东西?是类似 php 的 laravel ,python 的 fastapi ,go 的 gin ,rust 的 tokio 吗?只是在某个领域的事实标准,只是大多数人用,但不强制?
netty 又是个啥?文档说同等功能的还有 undertow 、tomcat-embed ,也只是基于内置 NIO 实现的“实时标准”框架吗?
Spring 是一个框架生态体系( aka.品牌)其包含各类用于开发的软件包,依赖注入、Web 、安全、工具链等等。他们实现了各类标准,Jakarta EE 是一个重要的标准组成部分。
Netty 是一个基础 IO 库,它在生态地位(aka.产业链)上更接近 Rust 的 tokio 。undertow tomcat 则是实现了 Jakarta EE 标准的 Web Server ,比 Netty 地位高一点。
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 了。1. spring 是一个框架也可以理解一个生态.
有很多组件, 与大多数的中间件有实现.
经过了很多开发者的验证与实践的, 比如你们老板让你对接一个 mqtt,对接 kafka 就可以看下 spring 有实现没, 有的话就可以直接生产用.
2. netty 还是很重要的, 与物联网打交道的用的很多, 自己只关心协议的编解码就行了, 很强大. 用的也很多.
你做网站服务器(tomcat),他也做网站服务器(undertow)
那我要开发网站需要在你俩的服务器上运行,如果你们俩各玩各的,我是不是得根据你俩的规范单独开发
如果现在有一套规范(接口),你俩都保证实现这个接口定义的功能,我就只需要调用这套接口就行了,实际运行在 tomcat 还是 undertow 是无所谓的
这套规范就是 Java EE
以前这套玩意在 javax 包下面,由于 Sun 被 Oracle 这专利老流氓收购了之后,别人不能用 javax 这名字,后来 Oracle 终于非常“大度”的表示,新的规范我不管了,但你们得开个新服,不能继续在 javax 下面,这个新的名字就是 jakarta
spring 你暂时把它理解为跟 Java EE 同级别的东西,由于早期对 Java EE 的唾弃而开发出来的 pro max ultra 超级无敌至尊加强版,不仅仅是规范,更是一套最佳开发实践,你照着它给你定好的套路填东西就行,无脑用
netty 太底层了,不用管,等你啥时候觉得 http 协议太烂打算重新开发一套的时候再去看也不急
----文档说同等功能的还有 undertow 、tomcat-embed
说的是 Netty 也可以用于开发 Http 服务端,在这个使用场景上可以说功能同等
----也只是基于内置 NIO 实现的“实时标准”框架吗
是
大多数人用?基本 Java 服务端开发都会使用
强制? Java 开发基本没有强制的说法