新手 javaer 咨询几个问题

1 天前
 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 实现的“实时标准”框架吗?

1827 次点击
所在节点    Java
30 条回复
luman
1 天前
为什么不问问神奇的 AI 呢?
dzdh
1 天前
@luman 说的也是云里雾里。
pengtao2001
1 天前
善用 ai
BeiChuanAlex
1 天前
@luman #1 因为他不懂,所以是问不出问题的。AI 只能锦上添花,不能雪中送炭。
vhui
1 天前
可以上小破站搜一下 Spring 等相关邪修
hidemyself
1 天前
Jakarta EE 是个规范,也可以理解成所谓的"最佳实践",可以遵循也可以不遵循。
Spring 是个框架,和你提到几个类似。可以不用,但是大部分写 Java 的都用。
Netty 也是个框架
Ayanokouji
1 天前
1. 你不需要知道 Jakarta EE 规范是什么东西,这东西除非你去开发框架,比如 spring ,才有用
2. spring 是一个大而全的框架,直接使用 spring boot 简化开发即可
3. spring 已经是事实标准了,不建议学其他框架,另外 spring 比其他语言的框架强大的多,但是你不一定能用到
4. netty 除非调研确定,必须使用,负责一律使用 spring-web 即可,tomcat 够用了
gongym
1 天前
Jakarta EE 是个规范,也是实践,不是 JDK 内置的包,目前是属于 Eclipse 基金会的
Goooooos
1 天前
普通的开发,都不用深入去了解 JavaEE
gongym
1 天前
Spring ( Springboot )是一个大而全的框架,基本包含了 Java 服务端开发的所有工具和库,已经是事实标准了
大多数人用?基本 Java 服务端开发都会使用
强制? Java 开发基本没有强制的说法
gongym
1 天前
Netty 是一个网络开发工具包,一般用于开发 Socket 服务端,比较底层,性能也很好

----文档说同等功能的还有 undertow 、tomcat-embed
说的是 Netty 也可以用于开发 Http 服务端,在这个使用场景上可以说功能同等

----也只是基于内置 NIO 实现的“实时标准”框架吗
newaccount
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 协议太烂打算重新开发一套的时候再去看也不急
kzfile
1 天前
其他语言里似乎没有一种像 spring 这样巨大的东西,已经不仅仅是 web 框架了
vvtf
1 天前
我补充几点吧,
1. spring 是一个框架也可以理解一个生态.
有很多组件, 与大多数的中间件有实现.
经过了很多开发者的验证与实践的, 比如你们老板让你对接一个 mqtt,对接 kafka 就可以看下 spring 有实现没, 有的话就可以直接生产用.
2. netty 还是很重要的, 与物联网打交道的用的很多, 自己只关心协议的编解码就行了, 很强大. 用的也很多.
dzdh
1 天前
@vvtf

我看 new 了一个 httpcodec 的东西。不看源码,就盲猜,是不是在 accept 一个 conn 后第一步的操作,解析完数据后再传给下一个处理器。而这个 httpcodec 就是解析 http 的 header 头,生成 request 对象再把 body 再往下传。

如果我开发物联网。我就自己写一个 customIotCodec 的东西,从第一个字节的数据包开始解析完成预处理工作再传给接下来的 handler
dzdh
1 天前
那放到 go 。就是

pipe.add( httpcodec{});

for { fd = conn.accept(); pipe.run(fd) }
cnhongwei
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 了。
vvtf
1 天前
@dzdh #15
是的,大概就是这样,netty 会处理连接信息,开发人员只关心具体数据(in/out)就行了.
netty 内置了很多标准协议的 codec, 如 http,websocket,mqtt,redis,stomp 等.
有很多的解码方式处理沾报/半包等.如固定头,固定长度等.
还有内置心跳等之类的.
EeveeRibbon
1 天前
感觉 Spring 在 Java 语言里已经是垄断级别的地位了,其他别的语言应该没有像这样的吧
manami
1 天前
能吃透 spring 已经天下无敌了

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

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

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

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

© 2021 V2EX