Servlet 需要深入学习吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhuyongqi9
V2EX    Java

Servlet 需要深入学习吗

  •  3
     
  •   zhuyongqi9 2020-07-12 12:48:51 +08:00 6518 次点击
    这是一个创建于 1923 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看了林信良的《 Jsp&Servlet 学习笔记》,很厚的一本,请问大家 Servlet 需要深入学习,了解原理和里面的各种对象,还是只要了解基本的用法就行(如 ServletRequest,ServletResponse,Cookie 等),另外网上都不建议学 JSP,那么用什么来替代呢
    38 条回复    2020-07-14 22:09:55 +08:00
    whypool
        1
    whypool  
       2020-07-12 12:53:41 +08:00
    没必要了
    springboot 一把梭就行了
    brucefu
        2
    brucefu  
       2020-07-12 13:45:22 +08:00
    种水稻需要深入学习吗?不需要:我只是吃而已,会买就可以了;需要:成为袁隆平那样德高望重的长者
    yuekcc
        3
    yuekcc  
       2020-07-12 13:48:06 +08:00
    更推荐好好了解一下 http 协议。

    我已经不想再解释 query string 、request body 是什么东西了。
    huntcool001
        4
    huntcool001  
       2020-07-12 14:06:11 +08:00
    JSP 之类的不建议学,里面的各种标签啥的. 现在都是前后端分离了.

    Servlet 的原理,相关源码, Servlet Container 是怎么运作的,Tomcat 的大致的组件构成 这些要看,面试也经常会问到.
    SLKun
        5
    SLKun  
       2020-07-12 14:08:40 +08:00
    看你怎么理解深入学习...
    如果是自己实现一个简单的 Servlet, 那么这个是可以的, 帮助你加深对其设计的理解

    至于是怎么用 Servlet 的 API, 或者 JSP 的各种神奇 tag,算了吧用的时候查文档就行
    impl
        6
    impl  
       2020-07-12 14:30:14 +08:00 via Android
    买过这家伙两本厚厚的“读书笔记”,就是人家消化一下又吐出来的东西,没啥营养,建议看看别的。
    zinplus
        7
    zinplus  
       2020-07-12 14:39:13 +08:00
    2020 年没必要。servlet 和 container 的概念早就过时了。稍微了解一下原理,不必深入。java 直接 springboot+gradle 。
    zhuyongqi9
        8
    zhuyongqi9  
    OP
       2020-07-12 15:34:37 +08:00
    @impl 是的,他的书感觉非常难读
    Lanayaaa
        9
    Lanayaaa  
       2020-07-12 15:37:56 +08:00
    看成了 serverless...
    hantsy
        10
    hantsy  
       2020-07-12 15:58:06 +08:00   7
    只要你是写 Java,Java Web,建议首先看看 Java EE/Jakarta EE 全部规范方面的一些书籍,比如 Oracle 官方的 Java EE Tutorial,当然深入的 Java 技术书我比较推荐 Manning,Appress 的出版物。对 Java EE 规范有一个基本的认识,再选用一些技术框架时,比如 Dropwizard,Vertx,Quarkus,Helidon,Micronaunt,Spring Boot 等,脑子里面就会一个底本,从一种技术切换到另一种也不是什么难事。

    Spring 离不开 Java EE/Jakarta EE 标准规范,Spring 核心框架 Imports 2000 多行规范 APIs,除了 EJB ( Spring 也可以调用 EJB )外,Spring 基本集成了所有的标准。 没有 Java EE 基础,直接上 Spring 写代码永远只能写些皮毛。
    yannxia
        11
    yannxia  
       2020-07-12 16:09:47 +08:00
    不学,Servlet 直接看看 J2EE 的标准里面就说清楚了,其他的要么不属于 Servlet 要么就是具体实现的部分。
    sagaxu
        12
    sagaxu  
       2020-07-12 17:03:22 +08:00 via Android
    servlet 不是必须的,spring 也不是。至于 jsp,丢垃圾桶就对了,别浪费时间。
    cjh1095358798
        13
    cjh1095358798  
       2020-07-12 17:28:10 +08:00
    原理还是需要的
    bigbyto
        14
    bigbyto  
       2020-07-12 17:52:39 +08:00 via iPhone
    @hantsy 还是有明白人,spring 就是为了解决 javaee 太过复杂而出生的,本身也用了大量 javaee 的规范,servlet 只是其中一小部分而已,要在 java 走的更远,目光也要长远一些。
    cwokaka
        15
    cwjokaka  
       2020-07-12 18:19:49 +08:00
    看一下就行
    qwerthhusn
        16
    qwerthhusn  
       2020-07-12 19:22:23 +08:00
    JSP 放弃,剩下 Servlet 没多少东西了,看你想学多深,你想实现一个 Servlet 容器都行。
    redbelt
        17
    redbelt  
       2020-07-12 19:27:20 +08:00
    原理肯定要懂得,细节等记忆性的东西可以忽略,你得知道它的运行原理吧,servlet 仍然是当今 Java web 的主流技术。

    什么 spring boot,spring mvc 到底不还是 servlet ?

    不过最近的 reactive,所谓响应式编程可以一看。做个对比。
    zhuyongqi9
        18
    zhuyongqi9  
    OP
       2020-07-12 20:32:21 +08:00
    @hantsy 受教了,感谢老哥
    q8164305
        19
    q8164305  
       2020-07-12 20:45:27 +08:00 via Android
    原理还是要懂的,具体细节没必要了,大概看看就行了
    chihiro2014
        20
    chihiro2014  
       2020-07-12 20:46:41 +08:00
    Servlet 都被抛弃了,学 Reactive 把
    dr1q65MfKFKHnJr6
        21
    dr1q65MfKFKHnJr6  
       2020-07-12 21:29:55 +08:00
    jsp servlet 源于 j2ee 标准, , 要深入研究就看标准文档
    hantsy
        22
    hantsy  
       2020-07-12 21:47:46 +08:00
    @chihiro2014
    @redbelt

    Spring 5.0 开始支持 Reactive 编程,但是并不是所有特性都有 Reactive 版本。

    https://github.com/hantsy/spring-reactive-sample

    Servlet Stack 在很长的一段时间还会是主流,与 Reactive Stack 并存。

    另外 Spring 5 也支持 Kotlin Coroutines,本来用 Functional 或者叫流式的程序,又拉直了,看起来和传统的 Servlet 写法一样,因为并不是所有的人都是喜欢 Functional 。

    https://github.com/hantsy/spring-kotlin-coroutines-sample

    同时传统的 Servlet 编程也支持 Functional 类似的写法。

    https://github.com/hantsy/spring-webmvc-functional-sample
    hantsy
        23
    hantsy  
       2020-07-12 22:01:16 +08:00
    @sagaxu JSP 2.0 以后的 XML 兼容方式还是可行的,与之前版本不一样的是一些 JSPParser 是用 XSLT 转换的(这和一些模板引擎一样),不是 Java Compiler 编译的。传统内嵌 Java 代码,编译太扯蛋了,先转译成 Java ( Servlet 代码),Java Compiler 再编译成 Class 运行。

    https://github.com/hantsy/spring4-sandbox/blob/master/mvc-tiles3/src/main/webapp/WEB-INF/views/details.jspx

    我之前到 JSF 1 。2 后,基本都是用 Facelets 了。
    现在很少碰 Java EE 的内置的 Web UI 方案了。现在 REST 前后分开开发看起来不错,但很多时候简单的事情搞复杂了。
    ecoolper
        24
    ecoolper  
       2020-07-12 23:40:40 +08:00
    servlet 规范一定要看
    wleexi
        25
    wleexi  
       2020-07-12 23:56:06 +08:00
    hantsy
        26
    hantsy  
       2020-07-13 00:11:35 +08:00
    @wleexi 请稳步,https://jakarta.ee/
    现在是 Eclipse 基金会下的项目了。
    hantsy
        27
    hantsy  
       2020-07-13 00:13:48 +08:00
    nutting
        28
    nutting  
       2020-07-13 08:30:08 +08:00
    你要是已经有 3 年工作经验,基本的 http 相关的应该都了解了,不用深入。如果新手,适当学学
    wleexi
        29
    wleexi  
       2020-07-13 09:25:22 +08:00
    hantsy
        30
    hantsy  
       2020-07-13 09:49:59 +08:00
    @wleexi Java EE 8.0 ( 2017 )以前是由 SUN/Oracle 主导开发,后面的版本全部移交到了 Eclipse 。

    Jakarta EE 8.0 ( 2019 )是 Eclipse 下发布的第一个版本(除了协议等,和发布的产品命名,API 使用没有太多的变化),Jakarta EE 9.0 在国庆前应该会发布。

    目前 Spring 5.0 已经对齐 Jakarta EE 8.0 。
    hantsy
        31
    hantsy  
       2020-07-13 09:53:14 +08:00
    hantsy
        32
    hantsy  
       2020-07-13 09:54:56 +08:00
    Jakarta EE 9 由于 Oracle 协议问题会包括破坏性 API 更新,全部包名,XML Namespace 会启用新的 Jakarta 前缀。

    https://github.com/hantsy/jakartaee9-starter-boilerplate/blob/master/docs/upgrade.md
    wleexi
        33
    wleexi  
       2020-07-13 10:31:47 +08:00
    @hantsy 意思是关于 Servlet 的规范不能在 jcp.org 查阅了么?
    hantsy
        34
    hantsy  
       2020-07-13 11:11:29 +08:00
    @wleexi JCP 现存的 API 文档都是 2017 年以前的老版本。
    qq1340691923
        35
    qq1340691923  
       2020-07-13 11:12:55 +08:00
    必须得了解啊
    Chinsung
        36
    Chinsung  
       2020-07-13 18:36:26 +08:00   1
    没什么必要,servlet 本身就是个标准,值得学习的是容器的实现。
    但是从你能问出这个问题来看,可以说相等的时间去了解 TCP 连接,HTTP 连接,甚至去用 socket 写一个能处理很简单的 http 请求的 server,都比看一大堆这种所谓的深入要有用。
    这种是你什么时候遇到了开源的 servlet 容器出现问题,需要研究他们实现的时候再去深入的。
    walnsrully
        37
    walnsrully  
       2020-07-14 02:12:08 +08:00 via Android
    servlet 要学。jsp 不用学。前后端分离已经不需要 view 层了,页面渲染都交给前端的 js 框架了
    wleexi
        38
    wleexi  
       2020-07-14 22:09:55 +08:00
    @hantsy
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2638 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 04:21 PVG 12:21 LAX 21:21 JFK 00:21
    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