V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhuyongqi9
V2EX  ›  Java

Servlet 需要深入学习吗

  •  3
     
  •   zhuyongqi9 · 2020-07-12 12:48:51 +08:00 · 5945 次点击
    这是一个创建于 1600 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看了林信良的《 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 是的,他的书感觉非常难读
    PainAndLove
        9
    PainAndLove  
       2020-07-12 15:37:56 +08:00
    看成了 serverless...
    hantsy
        10
    hantsy  
       2020-07-12 15:58:06 +08:00   ❤️ 6
    只要你是写 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 走的更远,目光也要长远一些。
    cwjokaka
        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 把
    cedoo22
        21
    cedoo22  
       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   ·   实用小工具   ·   3466 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:19 · PVG 19:19 · LAX 03:19 · JFK 06:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.