原创 Tomcat 容器的安全認證和鑑權

大量的 Web 應用都有安全相關的需求,正因如此,Servlet 規範建議容器要有滿足這些需求的機制和基礎設施,所以容器要對以下安全特性予以支持: 身份驗證:驗證授權用戶的用戶名和密碼 資源訪問控制:限制某些資源只允許部分用戶訪問 數據完

原创 Tomcat 中的 Session 和 Cookie

HTTP 是一種無狀態通信協議,每個請求之間相互獨立,服務器不能識別曾經來過的請求。而對於 Web 應用,它的活動都是依賴某個狀態的,比如用戶登錄,此時使用 HTTP 就需要它在一次登錄請求後,有爲後續請求提供已登錄信息的能力。本文首發於公

原创 Tomcat 類加載器的實現

Tomcat 內部定義了多個 ClassLoader,以便應用和容器訪問不同存儲庫中的類和資源,同時達到應用間類隔離的目的。本文首發於公衆號:頓悟源碼。 1. Java 類加載機制 類加載就是把編譯生成的 class 文件,加載到 JVM

原创 Tomcat 對靜態資源的處理

Tomcat 中的請求都是由 Servlet 處理,靜態資源也不例外。在默認的 web.xml 中,配置了一個 DefaultServlet 用於處理靜態資源,它支持緩存和斷點續傳。 DefaultServlet 的基本處理過程如下: 查

原创 Tomcat 路由請求的實現 Mapper

在分析 Tomcat 實現之前,首先看一下 Servlet 規範是如何規定容器怎麼把請求映射到一個 servlet。本文首發於(微信公衆號:頓悟源碼) 1. 使用 URL 路徑 收到客戶端請求後,容器根據請求 URL 的上下文名稱匹配 We

原创 Tomcat 配置文件解析工具 Digester

Digester 是一個依據 xml 配置文件動態構建 Java 對象樹的工具,基於 SAX 解析器進行封裝,它爲 SAX 事件的處理提供了更高級和友好的接口,讓開發更專注於要執行的處理,隱藏了 XML 元素詳細的層次結構信息。 1. 對象

原创 Tomcat 容器的設計和實現

Tomcat 容器是對 Servlet 規範的實現,也稱爲 Servlet 引擎。在分析 Tomcat 容器的設計和實現之前,首先簡單瞭解一下 Servlet 規範,弄清楚 Tomcat 究竟要實現什麼? 1. Servlet 規範簡述 S

原创 ArrayList 和 LinkedList 源碼分析

List 表示的就是線性表,是具有相同特性的數據元素的有限序列。它主要有兩種存儲結構,順序存儲和鏈式存儲,分別對應着 ArrayList 和 LinkedList 的實現,接下來以 jdk7 代碼爲例,對這兩種實現的核心源碼進行分析。 1.

原创 Tomcat 對 HTTP 協議的實現(上)

協議,直白的說就是存在一堆字節,按照協議指定的規則解析就能得出這堆字節的意義。HTTP 解析分爲兩個部分:解析請求頭和請求體。 請求頭解析的難點在於它沒有固定長度的頭部,也不像其他協議那樣提供數據包長度字段,判斷是否讀取到一個完整的頭部的唯

原创 Tomcat 對 HTTP 協議的實現(下)

在《Tomcat 對 HTTP 協議的實現(上)》一文中,對請求的解析進行了分析,接下來對 Tomcat 生成響應的設計和實現繼續分析。本文首發於(微信公衆號:頓悟源碼) 一般 Servlet 生成響應的代碼是這樣的: protected

原创 Tomcat NIO 模型的實現

Tomcat 對 BIO 和 NIO 兩種模型都進行了實現,其中 BIO 的實現理解起來比較簡單,而 NIO 的實現就比較複雜了,並且它跟常用的 Reactor 模型也略有不同,具體設計如下: 可以看出多了一個 BlockPoller 的

原创 IO 和 NIO 的思考

輸入輸出是操作系統不可或缺的一部分,大致分爲兩類:面向磁盤和麪向網絡。在 Java 中有3種 I/O 類型:BIO、NIO 和 AIO,分別是同步阻塞、同步非阻塞和異步非阻塞 I/O,這裏着重描述 BIO 和 NIO 的區別和常用的編程模型

原创 Reactor 典型的 NIO 編程模型

Doug Lea 在 Scalable IO in Java 的 PPT 中描述了 Reactor 編程模型的思想,大部分 NIO 框架和一些中間件的 NIO 編程都與它一樣或是它的變體。本文結合 PPT 按照自己的理解整理而來,最終編寫了

原创 數據庫同步的一些想法

數據同步的關鍵在於捕獲數據變化,提取數據,網絡傳輸至接收落地。一般的,數據庫內部機制以集羣的方式,通過複製進行同步,當然也有的提供更高級的服務。下面以 Oracle 和 MySQL 爲例,說明數據庫內部有哪些機制可以發現數據變化。 捕獲數據

原创 Tomcat 容器設計和 servlet 處理

在 Tomcat 對 NIO 和 HTTP 協議的實現 一文中描述了對 TCP 連接和解析 HTTP 請求的處理,接下來會進一步封裝請求交給 Catalina 容器處理以生成響應。在此之前首先了解一下 web 應用程序部署後在容器裏的體現。