深入拆解Tomcat & Jetty
李号双
eBay技术主管
立即订阅
6067 人已学习
课程目录
已完结 44 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | Java程序员如何快速成长?
免费
模块一 必备基础 (4讲)
01 | Web容器学习路径
02 | HTTP协议必知必会
03 | 你应该知道的Servlet规范和Servlet容器
04 | 实战:纯手工打造和运行一个Servlet
模块二 整体架构 (9讲)
05 | Tomcat系统架构(上): 连接器是如何设计的?
06 | Tomcat系统架构(下):聊聊多层容器的设计
07 | Tomcat如何实现一键式启停?
08 | Tomcat的“高层们”都负责做什么?
09 | 比较:Jetty架构特点之Connector组件
10 | 比较:Jetty架构特点之Handler组件
11 | 总结:从Tomcat和Jetty中提炼组件化设计规范
12 | 实战:优化并提高Tomcat启动速度
13 | 热点问题答疑(1):如何学习源码?
模块三 连接器 (9讲)
14 | NioEndpoint组件:Tomcat如何实现非阻塞I/O?
15 | Nio2Endpoint组件:Tomcat如何实现异步I/O?
16 | AprEndpoint组件:Tomcat APR提高I/O性能的秘密
17 | Executor组件:Tomcat如何扩展Java线程池?
18 | 新特性:Tomcat如何支持WebSocket?
19 | 比较:Jetty的线程策略EatWhatYouKill
20 | 总结:Tomcat和Jetty中的对象池技术
21 | 总结:Tomcat和Jetty的高性能、高并发之道
22 | 热点问题答疑(2):内核如何阻塞与唤醒进程?
模块四 容器 (8讲)
23 | Host容器:Tomcat如何实现热部署和热加载?
24 | Context容器(上):Tomcat如何打破双亲委托机制?
25 | Context容器(中):Tomcat如何隔离Web应用?
26 | Context容器(下):Tomcat如何实现Servlet规范?
27 | 新特性:Tomcat如何支持异步Servlet?
28 | 新特性:Spring Boot如何使用内嵌式的Tomcat和Jetty?
29 | 比较:Jetty如何实现具有上下文信息的责任链?
30 | 热点问题答疑(3):Spring框架中的设计模式
模块五 通用组件 (4讲)
31 | Logger组件:Tomcat的日志框架及实战
32 | Manager组件:Tomcat的Session管理机制解析
33 | Cluster组件:Tomcat的集群通信原理
特别放送 | 如何持续保持对学习的兴趣?
模块六 性能优化 (8讲)
34 | JVM GC原理及调优的基本思路
35 | 如何监控Tomcat的性能?
36 | Tomcat I/O和线程池的并发调优
37 | Tomcat内存溢出的原因分析及调优
38 | Tomcat拒绝连接原因分析及网络优化
39 | Tomcat进程占用CPU过高怎么办?
40 | 谈谈Jetty性能调优的思路
41 | 热点问题答疑(4): Tomcat和Jetty有哪些不同?
结束语 (1讲)
结束语 | 静下心来,品味经典
深入拆解Tomcat & Jetty
登录|注册

01 | Web容器学习路径

李号双 2019-05-13
你好,我是李号双。在开篇词里我提到要成长为一名高级程序员或者架构师,我们需要提高自己知识的广度和深度。你可以先突破深度,再以点带面拓展广度,因此我建议通过深入学习一些优秀的开源系统来达到突破深度的目的。
我会跟你一起在这个专栏里深入学习 Web 容器 Tomcat 和 Jetty,而作为专栏更新的第 1 篇文章,我想和你谈谈什么是 Web 容器,以及怎么学习 Web 容器。根据我的经验,在学习一门技术之前,想一想这两个问题,往往可以达到事半功倍的效果。

Web 容器是什么?

让我们先来简单回顾一下 Web 技术的发展历史,可以帮助你理解 Web 容器的由来。
早期的 Web 应用主要用于浏览新闻等静态页面,HTTP 服务器(比如 Apache、Nginx)向浏览器返回静态 HTML,浏览器负责解析 HTML,将结果呈现给用户。
随着互联网的发展,我们已经不满足于仅仅浏览静态页面,还希望通过一些交互操作,来获取动态结果,因此也就需要一些扩展机制能够让 HTTP 服务器调用服务端程序。
于是 Sun 公司推出了 Servlet 技术。你可以把 Servlet 简单理解为运行在服务端的 Java 小程序,但是 Servlet 没有 main 方法,不能独立运行,因此必须把它部署到 Servlet 容器中,由容器来实例化并调用 Servlet。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入拆解Tomcat & Jetty 》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(49)

  • 蔡伶
    打卡

    先说下听完老师课程的感受:经典不会随着时间而消逝。java和servlet规范已经发布20多年、操作系统和网络协议以及html更是经过了几十年的洗礼,现在依然是业内最核心的技术基础,毫不动摇。

    课程的理解:当前web技术涉及的知识包括这样几层,
    第一层:核心规范相当于宪法,主要包括servlet规范、网络协议等;
    第二层:主流技术支撑相当于各类法律,包括java语言、各类中间件等;
    第三层:基于各行业的业务应用和框架,相当于行政法规地方法规。
    规范是基础,具体实现可以用java也可以用python等等,行业应用和框架更是可以百花齐放。
    那我们的学习一定是从具体技术入手,从规范和体系结构统筹安排,最后再落实到实现。是一个自底向上再由上向下的一个过程,也是一个由薄到厚再由厚到薄的过程。

    作者回复: 说的很好👍

    2019-05-15
    18
  • 落幕
    和一群优秀的人共同进步,这种感觉很好。
    2019-05-14
    1
    15
  • G
    你说的所有spring. 都应该说springMVC

    作者回复: 嗯嗯,SpringMVC是Spring的子集,我就说成Spring了~

    2019-05-13
    15
  • 今夜秋风和
    应用程序的上下文,这个概念总是感觉理解不透彻

    作者回复: 简单可以这里理解:

    我们把Spring的IOC容器理解为一个工厂,这个工厂负责创建组装你的Bean。

    但是我们怎么向IOC容器中放入Bean呢?可能通过配置文件或者注解或者其他方式,于是容器除了做创建、组装Bean的工作,还需要去做解析配置文件或者注解的工作,于是把容器换个说法,叫应用上下文。

    2019-05-14
    8
  • 贤蛋蛋
    请问为什么说http是超文本传输协议,文本两字的含义是什么?http2.0所说的二进制帧,为什么说是二进制,和1.1格式上的本质区别是什么?再往下一层到TCP能否都看成二进制帧?

    作者回复: 文本可以理解为只有文字信息的文档,超文本是带有超链接的文档,可以链接到另一个文档,或一张图...

    HTTP1.1是文本协议,HTTP2.0是二进制协议。

     文本协议的协议数据是由ACSII字符组成的,比如文章里的HTTP请求的例子:请求行、请求头和请求体,我们一眼就看出什么意思。这是因为协议里的每个Byte都是用ACSII字符来解释的。

    二进制协议的的每个Byte完全由协议本身来定义,比如一个Byte有8个Bit,这8个Bit可能有不同的意思(比如代表长度或者其他标志位),不一定代表一个ACSII字符。

    TCP是二进制协议。


    2019-05-15
    4
  • 凌霄
    遇到过一个偶发的tomcat8问题,请求到tomcat后,nio长连接,到了20秒后超时后才自动断开连接,返回结果内容正常,抓包发现和正常的比少了最后的回车换行。

    作者回复: 你的应用程序设置的响应长度Content-Length与实际响应数据长度不符,可能长了那么一丢丢,这样Tomcat一直在等你的数据呢。

    2019-05-14
    4
  • yy_java
    请问老师,操作系统基础 除了您推荐的那本书以外还有其他薄点的书籍推荐吗?

    作者回复: 😑,我理解这本书是有点厚,但还是建议读经典的比较好,你不需要一口气读完,专栏讲到了某个点再去看看相关的部分~

    2019-05-18
    3
  • 小可爱(๑• . •๑)
    期待不断更新,希望老师能够讲清楚,让大家都理解

    作者回复: 后面的内容基本是先回顾基础知识,再谈Tomcat&Jetty如何在真实场景下运用这些基础知识,这样理解起来比较容易。

    2019-05-14
    2
  • JackJin
    还停留在使用容器的阶段,并不清楚其原理,例如:一个请求到一个响应返回,其涉及到的设计模式,以及为什么这样做,这样做的好处是什么;我能在容器的基础上做一些自定义的扩展吗?希望在专栏收获到这些。

    作者回复: 对的,这个专栏会学习Tomcat&Jetty为什么设计成这样,设计者是怎么考虑问题的;

    Tomcat和Jetty做为中间件,可扩展性非常强,你可以通过它们定制自己的Web容器!

    2019-05-13
    2
  • 日拱一卒
    我当前主要基于微服务架构做一些项目的架构设计,因为微服务默认采用tomcat作为web服务器,而且比较稳定,一直没有深入探究过细节。这是一个坑,将来如果微服务运行出现问题,需要更多理解web服务器的细节,才能有底气去解决问题。
    希望这个专栏能有深度,帮助我们在深入理解tomcat的同时,能在将来的工作中运用到。
    2019-08-18
    1
    1
  • Geek_f318ce
    打卡第一天。我们通过深入的学习Tomcat&Jetty来完成自我提升。今天主要回答了两个问题,第一,Web容器是什么?简而言之,Web容器就是Servlet容器加HTTP服务器,它使得我们请求的页面可以与客户端动态的交互。还介绍了Tomcat,Jetty与Weblogic,Jboss的区别。后者不但包含了HTTP服务器和Servlet容器,它还包含了EJB,是完整的JavaEE应用服务器。第二,回答了如何学习Web容器。我总结为,打好基础,发散思维。我们要有操作系统,Java编程语言,Web开发的基础。在学习时,多问问自己为什么?为什么这样设计?不这样设计会咋地?对这些问题的回答就是对自己的提高。
    2019-05-16
    1
  • Monday
    操作系统还是我的痛,但也不是一两天就能补充得了的。只好边学本专栏边学操作系统了。希望不要因为操作系统的缘故拖了学习本专栏的后腿😃😃

    作者回复: 不会的,咱们这边都有具体应用场景,根据实际运用场景开学理解起来会容易些

    2019-05-16
    1
  • Jaswine
    带着问题学知识,学习的时候问自己几个为什么,为什么这么设计?为什么不那么设计?在自己解答这些为什么的时候,最后发现都是计算机基础知识决定的,操作系统,网络,数据结构和算法

    作者回复: 嗯嗯,除了学,还要思考和总结

    2019-05-15
    1
  • yunfeng
    Java web开发基础一节没有说明白,是自己动手去玩Springmvc还是原生servlet&jsp
    2019-11-21
  • 熊斌
    工作几年之后才明白 万变不离其宗,所以一直努力往技术的最底层走。跟着大佬探寻常用技术的本质。双11刚买的课,每天看一两节
    2019-11-14
  • 迈克尔嘿嘿
    订阅老师的专栏太晚了。附一个学习笔记,是整理老师的文章和对同学答疑的精彩部分。便于复习。https://juejin.im/entry/5dc2affd6fb9a04a9f11c180
    2019-11-06
  • 舒偌一
    老师,http容器是根据sevlet规范中定义的service接口找到这个service接口的吗?servlet容器又是如何把数据流转给http容器的,是通过HttpServletResponse吗?
    2019-09-10
  • 舒偌一
    老师,以下是我对http容器和servlet容器协作的理解,http容器通过操作系统的API获取客户端浏览器的请求信息,在调用sevlet容器的service接口,把获取的请求信息流转给servlet容器,servlet容器根据请求信息找到具体的servlet类,servlet类调用相关业务类进行处理,业务类处理完成后把数据流转给servlet类,servlet类把数据封装后流转给servlet容器,servlet容器调用http容器接口,把数据流转给http容器,http容器再流转到操作系统API,最后在客户端浏览器展示。老师,我这样理解不知道对不对?
    2019-09-10
  • tomcat是一个请求起一个线程吗?为什么不像netty那种一个线程池只有十几个线程在处理请求呢?
    2019-09-05
    1
  • 孙宁
    是不是有些路线可以并行?

    作者回复: 可以的

    2019-08-26
收起评论
49
返回
顶部