摘要: 在分析 Tomcat 实现之前,首先看一下 Servlet 规范是如何规定容器怎么把请求映射到一个 servlet。本文首发于(微信公众号: 顿悟源码 ) 1. 使用 URL 路径 收到客户端请求后,容器根据请求 URL 的上下文名称匹配 Web 应用程序,然后根据去除上下文路径和路径参数的路径,按 阅读全文
posted @ 2019-05-06 08:59 小创 阅读(3003) 评论(0) 推荐(0) 编辑
摘要: Digester 是一个依据 xml 配置文件动态构建 Java 对象树的工具,基于 SAX 解析器进行封装,它为 SAX 事件的处理提供了更高级和友好的接口,让开发更专注于要执行的处理,隐藏了 XML 元素详细的层次结构信息。 1. 对象堆栈 为了便于实现,内部使用 堆栈 存储创建的对象。当满足元 阅读全文
posted @ 2019-05-05 09:04 小创 阅读(646) 评论(0) 推荐(0) 编辑
摘要: Tomcat 容器是对 Servlet 规范的实现,也称为 Servlet 引擎。在分析 Tomcat 容器的设计和实现之前,首先简单了解一下 Servlet 规范,弄清楚 Tomcat 究竟要实现什么? 1. Servlet 规范简述 Servlet 是什么?javadoc 中已经明确说明: Se 阅读全文
posted @ 2019-04-30 17:43 小创 阅读(1870) 评论(0) 推荐(0) 编辑
摘要: List 表示的就是线性表,是具有相同特性的数据元素的有限序列。它主要有两种存储结构,顺序存储和链式存储,分别对应着 ArrayList 和 LinkedList 的实现,接下来以 jdk7 代码为例,对这两种实现的核心源码进行分析。 1. ArrayList 源码分析 ArrayList 是基于 阅读全文
posted @ 2019-04-24 13:34 小创 阅读(1329) 评论(1) 推荐(0) 编辑
摘要: 在《Tomcat 对 HTTP 协议的实现(上)》一文中,对请求的解析进行了分析,接下来对 Tomcat 生成响应的设计和实现继续分析。本文首发于(微信公众号: 顿悟源码 ) 一般 Servlet 生成响应的代码是这样的: 像生成响应头和响应体并写入缓冲区,最后写入通道,这些都由 Tomcat 来做 阅读全文
posted @ 2019-04-22 15:48 小创 阅读(1086) 评论(0) 推荐(0) 编辑
摘要: 协议,直白的说就是存在一堆字节,按照协议指定的规则解析就能得出这堆字节的意义。HTTP 解析分为两个部分:解析请求头和请求体。 请求头解析的难点在于它没有 固定长度的头部 ,也不像其他协议那样提供数据包长度字段,判断是否读取到一个完整的头部的唯一依据就是遇到一个仅包括回车换行符的 空行 ,好在在找寻 阅读全文
posted @ 2019-04-21 08:28 小创 阅读(3302) 评论(0) 推荐(0) 编辑
摘要: Tomcat 对 BIO 和 NIO 两种模型都进行了实现,其中 BIO 的实现理解起来比较简单,而 NIO 的实现就比较复杂了,并且它跟常用的 Reactor 模型也略有不同,具体设计如下: 可以看出多了一个 BlockPoller 的设计,这是因为在 Servlet 规范中 ServletInp 阅读全文
posted @ 2019-04-18 17:44 小创 阅读(2755) 评论(0) 推荐(1) 编辑
摘要: 输入输出是操作系统不可或缺的一部分,大致分为两类:面向磁盘和面向网络。在 Java 中有3种 I/O 类型:BIO、NIO 和 AIO,分别是同步阻塞、同步非阻塞和异步非阻塞 I/O,这里着重描述 BIO 和 NIO 的区别和常用的编程模型。 1. 为什么设计 NIO 一个直接原因就是为了更好的利用 阅读全文
posted @ 2019-04-18 07:37 小创 阅读(821) 评论(0) 推荐(0) 编辑
摘要: Doug Lea 在 Scalable IO in Java 的 PPT 中描述了 Reactor 编程模型的思想,大部分 NIO 框架和一些中间件的 NIO 编程都与它一样或是它的变体。本文结合 PPT 按照自己的理解整理而来,最终编写了一个简单的 NIO 回显服务。 Reactor 之所以高效是 阅读全文
posted @ 2019-04-17 18:30 小创 阅读(1799) 评论(0) 推荐(0) 编辑