
Tomcat
文章平均质量分 94
小创编程
微信公众号:「小创编程」,所有幸运和巧合的事,要么是上天注定,要么是自己偷偷的在努力。
展开
-
Tomcat 中的 Session 和 Cookie
HTTP 是一种无状态通信协议,每个请求之间相互独立,服务器不能识别曾经来过的请求。而对于 Web 应用,它的活动都是依赖某个状态的,比如用户登录,此时使用 HTTP 就需要它在一次登录请求后,有为后续请求提供已登录信息的能力。本文首发于公众号顿悟源码.解决办法就是使用 Cookie,它由服务器返回给浏览器,浏览器缓存并在每次请求时将 cookie 数据提交到服务器。Cookies 在请求中以明...原创 2019-05-25 11:42:28 · 350 阅读 · 0 评论 -
Tomcat 类加载器的实现
Tomcat 内部定义了多个 ClassLoader,以便应用和容器访问不同存储库中的类和资源,同时达到应用间类隔离的目的。本文首发于公众号:顿悟源码。1. Java 类加载机制类加载就是把编译生成的 class 文件,加载到 JVM 内存中(永久代/元空间)。类加载器之所以能实现类隔离,是因为两个类相等的前提是它们由同一个类加载器加载,否则必定不相等。JVM 在加载时,采用的是一种双亲委...原创 2019-05-25 11:41:43 · 144 阅读 · 0 评论 -
Tomcat 容器的安全认证和鉴权
大量的 Web 应用都有安全相关的需求,正因如此,Servlet 规范建议容器要有满足这些需求的机制和基础设施,所以容器要对以下安全特性予以支持:身份验证:验证授权用户的用户名和密码资源访问控制:限制某些资源只允许部分用户访问数据完整性:能够证明数据在传输过程中未被第三方修改机密性或数据隐私:传输加密(SSL),确保信息只能被信任用户访问本文就以上问题,对 Tomcat 容器提供的认...原创 2019-05-25 11:41:06 · 502 阅读 · 0 评论 -
Tomcat 类加载器的实现
Tomcat 内部定义了多个 ClassLoader,以便应用和容器访问不同存储库中的类和资源,同时达到应用间类隔离的目的。本文首发于公众号:顿悟源码。1. Java 类加载机制类加载就是把编译生成的 class 文件,加载到 JVM 内存中(永久代/元空间)。类加载器之所以能实现类隔离,是因为两个类相等的前提是它们由同一个类加载器加载,否则必定不相等。JVM 在加载时,采用的是一种双亲委...原创 2019-05-09 18:25:14 · 272 阅读 · 0 评论 -
Tomcat 对静态资源的处理
Tomcat 中的请求都是由 Servlet 处理,静态资源也不例外。在默认的 web.xml 中,配置了一个 DefaultServlet 用于处理静态资源,它支持缓存和断点续传。DefaultServlet 的基本处理过程如下:查找资源是否存在缓存检查是否满足可选 If 头域指定的条件设置响应头域,如 Content-Type、Content-Length、ETag、Last-Mod...原创 2019-05-07 10:25:06 · 1900 阅读 · 0 评论 -
Tomcat 路由请求的实现 Mapper
在分析 Tomcat 实现之前,首先看一下 Servlet 规范是如何规定容器怎么把请求映射到一个 servlet。本文首发于(微信公众号:顿悟源码),交流QQ群:6739861581. 使用 URL 路径收到客户端请求后,容器根据请求 URL 的上下文名称匹配 Web 应用程序,然后根据去除上下文路径和路径参数的路径,按以下规则顺序匹配,并且只使用第一个匹配的 Servlet,后续不再尝试匹...原创 2019-05-06 09:37:46 · 381 阅读 · 0 评论 -
Tomcat 配置文件解析工具 digester
Digester 是一个依据 xml 配置文件动态构建 Java 对象树的工具,基于 SAX 解析器进行封装,它为 SAX 事件的处理提供了更高级和友好的接口,让开发更专注于要执行的处理,隐藏了 XML 元素详细的层次结构信息。1. 对象堆栈为了便于实现,内部使用堆栈存储创建的对象。当满足元素匹配模式时,按预设的处理规则操作栈中对象。典型的创建对象处理逻辑是,触发创建新对象的规则,在遇到特定...原创 2019-05-05 12:27:24 · 345 阅读 · 0 评论 -
Tomcat 容器的设计和实现
Tomcat 容器是对 Servlet 规范的实现,也称为 Servlet 引擎。在分析 Tomcat 容器的设计和实现之前,首先简单了解一下 Servlet 规范,弄清楚 Tomcat 究竟要实现什么?1. Servlet 规范简述Servlet 是什么?javadoc 中已经明确说明:Servlet 是在 Web 服务器中运行的 Java 程序,通常用于接收并响应来自 Web 客户端的...原创 2019-05-05 12:26:39 · 329 阅读 · 0 评论 -
Tomcat 对 HTTP 协议的实现(下)
在《Tomcat 对 HTTP 协议的实现(上)》一文中,对请求的解析进行了分析,接下来对 Tomcat 生成响应的设计和实现继续分析。本文首发于(微信公众号:顿悟源码)一般 Servlet 生成响应的代码是这样的:protected void service(HttpServletRequest req, HttpServletResponse resp) throws Ser...原创 2019-05-05 12:25:58 · 329 阅读 · 0 评论 -
Tomcat 对 HTTP 协议的实现(上)
协议,直白的说就是存在一堆字节,按照协议指定的规则解析就能得出这堆字节的意义。HTTP 解析分为两个部分:解析请求头和请求体。请求头解析的难点在于它没有固定长度的头部,也不像其他协议那样提供数据包长度字段,判断是否读取到一个完整的头部的唯一依据就是遇到一个仅包括回车换行符的空行,好在在找寻这个空行的过程中能够完成请求行和头域的分析。请求体的解析就是按照头域的传输编码和内容编码进行解码。那么 T...原创 2019-05-05 12:25:11 · 489 阅读 · 0 评论 -
Tomcat NIO 模型的实现
Tomcat 对 BIO 和 NIO 两种模型都进行了实现,其中 BIO 的实现理解起来比较简单,而 NIO 的实现就比较复杂了,并且它跟常用的 Reactor 模型也略有不同,具体设计如下:可以看出多了一个 BlockPoller 的设计,这是因为在 Servlet 规范中 ServletInputStream 和 ServletOutputStream 是阻塞的,所以请求体和响应体的读取和...原创 2019-05-05 12:22:12 · 847 阅读 · 0 评论 -
Tomcat 启动初始化和停止
Tomcat 通过 server.xml 配置文件装配一系列组件,并且为组件设计生命周期接口,在容器启停时,协调控制组件的启动、初始化和停止。容器通常使用脚本启动,脚本主要是检查 Java 环境、设置 JVM 参数,调用 Bootstrap.start 启动。Bootstrap 是 Catalina 的引导加载类,它构造了一个 commonLoader 类加载器,加载 ${catalina.b...原创 2018-08-05 11:30:14 · 1198 阅读 · 0 评论 -
模拟实现 Tomcat 的核心模块:NIO,HTTP,容器和集群
如果你想看 Tomcat 源码但又无从入手,不妨从这个项目开始,代码量不多,但包含了 Tomcat 的核心处理流程,并且源码中有相当丰富的注释。相信通过此项目你能了解:NIO 基本编程、HTTP 协议的本质、基本的单元测试Tomcat 应用部署、自定义类加载器的实现、Servlet 的管理和加载运行以及静态资源的处理和缓存等Maven 生成可执行 jar,生成 javadoc,使用 ass...原创 2019-09-15 09:13:42 · 221 阅读 · 0 评论