新手 javaer 咨询几个问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dzdh
V2EX    Java

新手 javaer 咨询几个问题

  •  
  •   dzdh 6 小时 49 分钟前 1081 次点击

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

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

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

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

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

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

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

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

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

    pipe.add( httpcodec{});

    for { fd = conn.accept(); pipe.run(fd) }
    cnhongwei
        17
    cnhongwei  
       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 了。
    vvtf
        18
    vvtf  
       5 小时 26 分钟前   1
    @dzdh #15
    是的,大概就是这样,netty 会处理连接信息,开发人员只关心具体数据(in/out)就行了.
    netty 内置了很多标准协议的 codec, 如 http,websocket,mqtt,redis,stomp 等.
    有很多的解码方式处理沾报/半包等.如固定头,固定长度等.
    还有内置心跳等之类的.
    EeveeRibbon
        19
    EeveeRibbon  
       4 小时 51 分钟前
    感觉 Spring 在 Java 语言里已经是垄断级别的地位了,其他别的语言应该没有像这样的吧
    manami
        20
    manami  
       4 小时 51 分钟前
    能吃透 spring 已经天下无敌了
    bbao
        21
    bbao  
       3 小时 1 分钟前
    你就说那个培训班的吧。
    iseki
        22
    iseki  
       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 地位高一点。
    iseki
        23
    iseki  
       38 分钟前
    修正:比 Netty 地位高一点 -> 比 Netty 位置高一点
    iseki
        24
    iseki  
       33 分钟前
    和其它语言生态的一个很大不同是,Java 世界习惯定义标准,按标准实现。
    比如数据库驱动,Go 那边是有个 sql/db 包,Java 这边有一个好几百页的 JDBC Specification ;
    比如 WebServer ,Go 那边 Gin 什么的自己画一个 API 就完了,Java 这边会有标准委员会发布的 Jakarta Servlet Specification ,如果没有特别的理由,你的 Web Server 最好实现该规范;

    标准化的好处就不多说了,坏处也不多说了。
    dzdh
        25
    dzdh  
    OP
       26 分钟前   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 了呗。
    iseki
        26
    iseki  
       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 的这种做法值得其它语言生态学习。
    iseki
        27
    iseki  
       22 分钟前
    > 基础语法和类型学完了,知道泛型怎么用,熟练会用反射,知道怎么动态 invoke ,学会函数式接口,知道 collect 、list 、map 、lock 等。其实 java 就是已经学会了。

    我觉得可以这么说。至于 EE 的部分,随着时代变迁,也不是所有人都认可 JakartaEE 甚至很多 SE 里的标准了,毕竟他们一方面历史悠久,另一方面他们往往是 ^{TM} 的,很多人(?)对这个有不良印象。
    只能说大多数 Java Web 相关项目比较喜欢 Spring 系软件包。其它还是不一定要用 Spring 系的,这个可以自由探索。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2571 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 13:02 PVG 21:02 LAX 06:02 JFK 09:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86