深入拆解 Tomcat & Jetty
李号双
eBay 技术主管
38890 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 45 讲
开篇词 (1讲)
深入拆解 Tomcat & Jetty
15
15
1.0x
00:00/07:36
登录|注册

开篇词 | Java程序员如何快速成长?

讲述:李号双大小:6.94M时长:07:36
掌握技术的设计思路
理解技术产生原理
跨领域的了解
知识成体系
选择Tomcat和Jetty入手
保持好奇心
上进心和耐心
学习新技术
实战经验
深入了解Tomcat和Jetty
学习基础知识
突破深度
深度体现
广度体现
解决线上问题和性能调优
学习系统设计能力
掌握Java高级技术
理解Servlet技术
选择Tomcat和Jetty深入研究
学习优秀的开源系统
发现知识体系的问题
初入职场的经历
从C/C++转向Java
成长之路
学习建议
技术的广度和深度
学习收获
突破瓶颈的方法
个人经历
Java程序员如何快速成长?

该思维导图由 AI 生成,仅供参考

你好,我是李号双,很高兴你走进我的“深入拆解 Tomcat & Jetty”专栏,与我和其他同学一起探讨熟悉又陌生的 Tomcat 和 Jetty。
如果你和我一样选择了 Java Web 开发这个方向,并且正在学习和提高的路上,你一定思考过这个问题:
我怎样才能成长为一名高级程序员或者架构师?
对于这个问题,每个人的答案都可能都不太一样,我先来讲讲我的经历。十年前我在实习的时候是做嵌入式系统开发,用的开发语言是 C 和 C++。出于我个人的兴趣爱好,当时我想转 Java,在学了一段时间的 Java 后,发现 Java 上手还是挺快的,API 比较齐全,而且也不需要自己来管理内存,感觉比 C 语言高级。毕业后我也顺利地找到了一个 Java 开发的工作,入职后我的工作主要是实现一些小模块,很多时候通过代码的复制粘贴,再稍微改改就能完成功能,这样的状态大概持续了一年。
在这个过程中,虽然我对 Java 语法更加熟悉了,也“背”过一些设计模式,用过一些 Web 框架,但是我很少有机会将一些 Java 的高级特性运用到实际项目中,因此我对它们的理解也是模糊的。那时候如果让我独立设计一个系统,我会感到非常茫然,不知道从哪里下手;对于 Web 框架,我也只是知道这样用是可以的,不知道它背后的原理是什么。并且在我脑子里也没有一张 Java Web 开发的全景图,比如我并不知道浏览器的请求是怎么跟 Spring 中的代码联系起来的。
后来我分析发现,我的知识体系在广度和深度上都有问题。为了突破这个瓶颈,我当时就想,为什么不站在巨人的肩膀上学习一些优秀的开源系统,看看大牛们是如何思考这些问题的呢。
于是我注意到了像 Tomcat 和 Jetty 这样的 Web 容器,觉得它们很神奇,只需要把 Web 应用打成 WAR 包放到它的目录下,启动起来就能通过浏览器来访问了,我非常好奇 Web 容器是如何工作的。此外 Tomcat 的设计非常经典,并且运用了方方面面的 Java 技术,而这些正好是我欠缺的,于是我决定选择 Tomcat 来深入研究。
学习了 Tomcat 的原理之后,我发现 Servlet 技术是 Web 开发的原点,几乎所有的 Java Web 框架(比如 Spring)都是基于 Servlet 的封装,Spring 应用本身就是一个 Servlet,而 Tomcat 和 Jetty 这样的 Web 容器,负责加载和运行 Servlet。你可以通过下面这张图来理解 Tomcat 和 Jetty 在 Web 开发中的位置。
随着学习的深入,我还发现 Tomcat 和 Jetty 中用到不少 Java 高级技术,比如 Java 多线程并发编程、Socket 网络编程以及反射等等。之前我仅仅只是了解这些技术,为了面试也背过一些题,但是总感觉“知道”和“会用”之间存在一道鸿沟。通过对 Tomcat 和 Jetty 源码的学习,我学会了在什么样的场景下去用这些技术,这一点至关重要。
还有就是系统设计能力,Tomcat 和 Jetty 作为工业级的中间件,它们的设计非常优秀,比如面向接口编程、组件化、骨架抽象类、一键式启停、对象池技术以及各种设计模式,比如模板方法、观察者模式、责任链模式等,之后我也开始模仿它们并把这些设计思想运用到实际的工作中。
在理解了 Web 容器以及 JVM 的工作原理后,我开始解决线上的疑难杂症,并且尝试对线上的 Tomcat 进行调优。性能的提升也是实实在在的成果,我也因此得到了同事们的认可。
总之在这个过程中,我逐渐建立起了自己的知识体系,也开始独立设计一个系统,独立解决技术难题,也就是说我渐渐具备了独当一面的能力,而这正是高级程序员或者架构师的特质。
概括一下,独当一面的能力,离不开技术的广度和深度
技术的广度体现在你的知识是成体系的,从前端到后端、从应用层面到操作系统、从软件到硬件、从开发、测试、部署到运维…有些领域虽然你不需要挖得很深,但是你必须知道这其中的“门道”。
而技术的深度体现在对于某种技术,你不仅知道怎么用,还知道这项技术如何产生的、它背后的原理是什么,以及它为什么被设计成这样,甚至你还得知道如何去改进它。
但是人的精力是有限的,广度和深度该如何权衡呢?我建议找准一个点先突破深度,而 Tomcat 和 Jetty 就是非常好的选择。但同时它们也是比较复杂的,具体应该怎么学呢?我想通过这个专栏,来分享一些我的经验。
首先我们要学习一些基础知识,比如操作系统、计算机网络、Java 语言,面向对象设计、HTTP 协议以及 Servlet 规范等。
接下来我们会学习 Tomcat 和 Jetty 的总体架构,并从全貌逐步深入到各个组件。在这个过程中,我会重点关注组件的工作原理和设计思路,比如这个组件为什么设计成这样,设计者们当时是怎么考虑这个问题的。然后通过源码的剖析,加深你的理解。更重要的是,帮你学会在真实的场景下如何运用 Java 技术
同时我还会通过 Jetty 与 Tomcat 的对比,比较它们各自的设计特点,让你对选型有更深的理解。并且通过思考和总结,帮你从中提炼一些通用的设计原则,以及实现高性能高并发的思路。
在深入了解 Tomcat 和 Jetty 的工作原理之后,我会从实战出发,带你看看如何监控 Tomcat 的性能,以及怎么从内存、线程池和 I/O 三个方面进行调优,同时我也还会分析和解决一些你在实际工作中可能会碰到的棘手问题。
在这个过程中,我还会介绍 Tomcat 和 Jetty 支持的 Servlet 新技术,比如 WebSocket 和异步 Servlet 等,我会重点分析这些新技术是从何而来,以及 Tomcat 和 Jetty 是如何支持的。这些都是 Web 技术的最新动向,你可以在自己的工作中根据需要选用这些新技术。
总之,弄懂了 Tomcat 和 Jetty,Java Web 开发对你来说就已经毫无“秘密”可言。并且你能体会到大神们是如何设计 Tomcat 和 Jetty 的,体会他们如何思考问题、如何写代码。比如怎样设计服务端程序的 I/O 和线程模型、怎样写高性能高并发程序、Spring 的 IoC 容器为什么设计成这个样子、设计一个中间件或者框架有哪些套路等…这些都能快速增加你的经验值。
成长的道路没有捷径,不仅需要上进心和耐心,还要保持对知识的好奇心。如果你也想在技术和视野上有所突破,拥有独当一面的能力,从 Tomcat 和 Jetty 入手是一个非常好的选择,我也邀请你与我一起探究 Tomcat 和 Jetty 的设计精髓,一起收获经验、享受成长。
最后,如果你正在 Java Web 开发这条路上向着架构师的方向狂奔,欢迎你给我留言,讲讲你所付出的努力、遇到了哪些问题,或者写写你对这个专栏的期待,期待与你交流。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Java程序员如何快速成长?本文作者分享了自己的成长经历,提出了快速成长的关键在于技术的广度和深度。作者以深入研究Tomcat和Jetty为例,阐述了如何通过学习优秀的开源系统来提升自己的技术能力。文章从基础知识学习、深入理解Tomcat和Jetty的架构和设计思路,到实战经验分享,全面指导读者如何通过学习这些技术来提升自己的能力。通过深入了解Tomcat和Jetty,读者可以掌握Java Web开发的精髓,提升自己的设计能力和解决技术难题的能力。文章内容丰富,涵盖了技术的广度和深度,对于想要在Java Web开发领域快速成长的读者具有很高的参考价值。

2019-05-1391人觉得很赞给文章提建议

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入拆解 Tomcat & Jetty 》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(73)

  • 最新
  • 精选
  • 木子的昼夜
    置顶
    学习的时候感觉一直卡在一个level,上不去了 不知道老师有没有过相似经历 还有就是老师当年是怎么平衡工作和学习的 如果工作都是增删改查,没有高并发,没有各种新技术,老师会怎么去做

    作者回复: 你说的这个情况很典型,大多数技术人都可能会经历这个瓶颈期,可能你做的项目比较简单或者技术比较陈旧,得不到锻炼的机会,但每天又比较忙,这个时候要勇于打破舒适区,挤出时间来学习一些新东西,学什么呢?五花八门的技术太多了,但是呢这些技术都不开计算机基础,基础扎实了,学习这些新技术才更有效率。但是基础知识也很多,操作系统、算法、网络....学久了容易枯燥,你会怀疑这些知识到底有没有用,难以坚持。这个时候可以读读一些经典的,优秀的源代码,比如源码中用到了高并发技术、用到了Java的各种高级玩法、通用的设计思想,在这个过程中,你会发现自己在基础上还有哪些薄弱点,再查漏补缺,建立起知识体系。但最终要落实你的职业生涯上来,比如这个时候你基础扎实了,深度和广度都有了一定的积累,你可以选择跳槽,也可以换个项目组,因为最终你还是需要通过有挑战、有技术深度的项目来锤炼自己,才能让你的简历更好看..

    2019-05-14
    2
    99
  • 发条橙子 。
    老师终于等到你 , 好早就在期待 tomcat课程了 。 老师 , 在我原来的理解 , spring是一种 servlet , 而 tomcat&jetty 是servlet 容器 ,就是负责给类似spring这种servlet提供一个环境去运行的 。老师我这么理解对么 ? 但是有了 servlet环境还不够 ,还要有个web环境 , 这时候tomcat自己可以作为一个独立的web容器 。 早期也可以兼容Apache web容器 。 但是具体 web容器和servlet容器他们俩的分工界限在哪里我也一直不清楚 , 一名刚毕业不久的程序员 ,努力跟着老师的脚步去学习 😁

    作者回复: 橙子你好,你前面的理解是对的。Apache是一个HTTP服务器,而Tomcat或者Jetty是一个HTTP服务器+Servlet容器。HTTP服务器与Servlet容器的功能界限是:你可以把HTTP服务器想象成前台的接待,负责网络通信和解析请求,而Servlet容器是业务部门,负责处理业务请求。

    2019-05-14
    2
    54
  • Vincent
    tomcat其实是web服务器和Servlet容器的结合,可以接受网络http请求并解析成Servlet规范的请求对象,响应对象。比如HttpServletRequest对象是tomcat提供的,Servlet是规范,Tomcat是实现规范的Servlet容器,Springmvc是处理Servlet请求的应用。这样理解对吗

    作者回复: 对的,SpringMVC中的DispatcherServlet实现了Servlet接口,而Tomcat负责加载和调用这个DispatcherServlet。 同时DispatcherServlet有自己的IOC容器,叫做SpringMVC容器,这个容器负责管理SpringMVC相关的Bean,比如Controller和ViewResolver等等。 那Spring中还有其他的Bean比如Service和DAO等,他们是由全局的Spring IOC容器来管理的,因此实际上Spring中有两个IOC容器。

    2019-05-17
    31
  • Cy190622
    老师,你好。很幸运能够学习您的课程。我也是一个web开发者,平常工作也是cv模式。感觉自己好菜,尝试着去看Tomcat和Servlet的书籍和源码,总是感觉浮光掠影。这个怎么办才好? 还有一些问题,希望老师能够解答一下,感激不尽: 1.现在的各种中间价、框架都是非常多,对想进阶而言。老师建议阅读和深入学习那些框架和中间件 2.阅读源码时不时会绕进去,不是很有全局性,所以请教一下阅读源码时候的一些技巧。

    作者回复: 1,我觉得可以从Tomcat/Jetty开始,因为它们跟Web开发紧密相关,一举两得,既学了技术,又弄懂了Web的原理~ 2.是的,看源码很容易迷失在细节里无法自拔:),所以要抓住主线,分析源码之前看看它的主要功能有哪些,比如对于Tomcat、Jetty来说,主线就是启停、请求处理过程和类加载。 另外还是需要把源码跑起来,打断点调试。

    2019-05-14
    21
  • 李青
    老师,首先谢谢你的分享,自己的收益很大。 总结下自己目前的问题: 1.知道知识点,但是不知道如何应用。 2.自己的系统设计能力不行。 3.知识没有体系化。 从老师出得到的解决方案: 站在巨人的肩膀上学习一些优秀的开源系统。感受下大牛是如何思考问题的。 还想请教老师问题,什么是知识体系化,老师在学习的过程中如何使自己的知识体系化的?

    作者回复: 直观一点说,首先你需要有扎实的基础,包括java语言,操作系统,计算机网络,设计模式和数据结构算法。 然后就是前端后端的各种技术框架中间件:比如JS,Ajax,HTML,AngularJS,React,NodeJS,Nginx,Tomcat/Jetty,Spring,SpringMVC,Spring Boot,Spring Cloud,Mybatis,Mycat,Mysql,Redis,Kafka,mongoDB,ES…… 你不需要精通每种技术,但是你大概知道它们是做什么的,知道按照什么套路把它们组装成一个后台系统,以及信息以一种什么形式在它们中间流转。

    2019-05-30
    15
  • XxxxxxxMr
    老师啊 我有一个很 low很 low的问题 明明都能通过jar直接运行 怎么还要tomcat 或者jetty jboss等容器呢

    作者回复: jar直接运行,总要接收网络请求吧,那谁来帮你处理网络读取,解析请求,发送响应这些工作呢

    2019-09-25
    10
  • 尔冬橙
    老师,能用纯java代码实现一个http服务器么

    作者回复: 可以的,Tomcat和Jetty都是纯Java

    2019-07-20
    9
  • -W.LI-
    老师好!阅读源码时没法看到全貌,网上找的资料大多没有调理。英语又不好都是连懵带猜的看,往往花了半天可以只看了一个类。进度很慢很容易坚持不下去。想听听老师的起步阶段是怎么走过来了。

    作者回复: 主要是抓主线、理清主要功能,再加断点调试,初期不要太在意细节,后期再细细品味设计和编码。

    2019-05-15
    7
  • QQ怪
    终于等到老师的分享了,打卡ing

    作者回复: 😄谢谢

    2019-05-13
    2
    7
  • Tom
    老师您好,有个问题没太明白,为什么servlet可以在tomcat中运行,自己写main方法,怎样让servlet运行?

    作者回复: Servlet没有main方法,只有一个“service”接口,Tomcat负责调用这个接口。 程序员一般不会直接调用Servlet的方法,如果想试一下,可以new一个Servlet,然后直接调它的service方法,但是这个方法有两个参数:HttpServletRequest和HTTPServletResponse,这两个参数也是Tomcat准备好的,如果你想直接调Servlet的service方法,你得构造这两个参数。

    2019-05-29
    6
收起评论
显示
设置
留言
73
收藏
99+
沉浸
阅读
分享
手机端
快捷键
回顶部