從零手寫實現 apache Tomcat-01-入門介紹

老马啸西风發表於2024-04-29

創作緣由

平時使用 tomcat 等 web 伺服器不可謂不多,但是一直一知半解。

於是想著自己實現一個簡單版本,學習一下 tomcat 的精髓。

怎麼實現一個 tomcat 呢?

Tomcat就像是一個用Java語言搭起來的大舞臺,專門用來演出那些用Java編寫的網頁劇。想要玩得轉Tomcat,你最好對Java語言有所瞭解。

搭建Tomcat的過程,就像是搭積木。首先,你得用Java寫一個啟動類,這個類就是整個伺服器的大腦。然後,用Java的ServerSocket這個工具來監聽網路上的敲門聲,也就是連線請求。一旦有人來敲門,伺服器就得看看人家想要啥,然後根據需求給出回應。

接下來,我們要讓伺服器學會處理網頁請求。這就需要一個叫做Servlet的小傢伙,它是一個介面,你需要寫一個類來實現這個介面。這個類得有幾個特定的動作,比如準備(init())、服務(service())和收工(destroy())。在服務動作裡,Servlet得判斷人家是用什麼方式來請求的,比如是GET還是POST,然後做出相應的反應。

伺服器還得能處理那些不需要伺服器現場製作的靜態檔案,比如圖片、網頁模板或者CSS樣式表。這些檔案就像是現成的道具,直接從硬碟裡拿出來給人家就行。

當然,對於那些需要伺服器現場製作的動態網頁,比如JSP,伺服器就得根據請求的資訊,現場編個網頁,然後發回去。

此外,伺服器還得能處理基本的網頁請求,比如GET和POST,並且能讀懂人家的請求資訊,知道人家想訪問哪個頁面,還帶了什麼額外的資訊。

控制伺服器的開關也很重要。你得寫個方法來控制伺服器的啟動和停止。啟動時,要準備好要用的東西,比如確定用哪個埠號,設定好執行緒池。關閉時,要確保資源都收拾乾淨,網路連線也都斷開。

最後,你可以透過編寫幾個簡單的Servlet和一些靜態檔案,然後在瀏覽器裡測試你的伺服器。確保伺服器能夠正確處理各種請求,並且返回正確的結果。

雖然這只是Tomcat的入門階段,但要打造一個完整的Tomcat,還有很多東西要考慮,比如怎麼讓多個請求同時處理(多執行緒)、怎麼高效管理資料庫連線(連線池)、怎麼記住每個訪客的身份(會話管理)、怎麼保護伺服器不受壞蛋的攻擊(安全問題)等等。

咱們可以一步步來,先搞定這些基本的,再慢慢增加新的功能。

從零手寫例子

專案簡介

 /\_/\  
( o.o ) 
 > ^ <

mini-cat 是簡易版本的 tomcat 實現。別稱【嗅虎】(心有猛虎,輕嗅薔薇。)

開源地址:https://github.com/houbb/minicat

特性

  • 簡單的啟動實現/netty 支援

  • servlet 支援

  • 靜態網頁支援

  • filter/listener 支援

  • wars 支援

快速開始

maven 依賴

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>minicat</artifactId>
    <version>0.7.0</version>
</dependency>

啟動測試

執行測試類 MiniCatBootstrapMain#main

MiniCatBootstrap bootstrap = new MiniCatBootstrap();
bootstrap.start();

啟動日誌:

[INFO] [2024-04-03 11:09:15.178] [main] [c.g.h.m.s.s.WebXmlServletManager.register] - [MiniCat] register servlet, url=/my, servlet=com.github.houbb.minicat.support.servlet.MyMiniCatHttpServlet
[INFO] [2024-04-03 11:09:15.180] [Thread-0] [c.g.h.m.b.MiniCatBootstrap.startSync] - [MiniCat] start listen on port 8080
[INFO] [2024-04-03 11:09:15.180] [Thread-0] [c.g.h.m.b.MiniCatBootstrap.startSync] - [MiniCat] visit url http://127.0.0.1:8080

頁面訪問:http://127.0.0.1:8080

響應:

http://127.0.0.1:8080

測試

servlet: http://127.0.0.1:8080/my

html: http://127.0.0.1:8080/index.html

開源地址

開源地址:https://github.com/houbb/minicat

開源不易,歡迎 fork+star~~~ 鼓勵一下作者

系列文章

點選 {閱讀原文},獲得更好的閱讀體驗

手寫實現系列

從零手寫實現 apache Tomcat-01-入門介紹

從零手寫實現 apache Tomcat-02-web.xml 入門詳細介紹

從零手寫實現 tomcat-03-基本的 socket 實現

從零手寫實現 tomcat-04-請求和響應的抽象

從零手寫實現 tomcat-05-servlet 處理支援

從零手寫實現 tomcat-06-servlet bio/thread/nio/netty 池化處理

從零手寫實現 tomcat-07-war 如何解析處理三方的 war 包?

從零手寫實現 tomcat-08-tomcat 如何與 springboot 整合?

從零手寫實現 tomcat-09-servlet 處理類

從零手寫實現 tomcat-10-static resource 靜態資原始檔

從零手寫實現 tomcat-11-filter 過濾器

從零手寫實現 tomcat-12-listener 監聽器

tomcat11 系列文章

如果你對 tomcat 不是很熟,可以閱讀下面的系列。

目前的最新版本, tomcat11:

web server apache tomcat11-01-官方文件入門介紹

web server apache tomcat11-02-setup 啟動

web server apache tomcat11-03-deploy 如何部署

web server apache tomcat11-04-manager 如何管理?

web server apache tomcat11-06-Host Manager App -- Text Interface

web server apache tomcat11-07-Realm Configuration

web server apache tomcat11-08-JNDI Resources

web server apache tomcat11-09-JNDI Datasource

web server apache tomcat11-10-Class Loader

web server apache tomcat11-11-Jasper 2 JSP Engine

web server apache tomcat11-12-SSL/TLS Configuration

web server apache tomcat11-13-SSI

web server apache tomcat11-14-CGI

web server apache tomcat11-15-proxy

web server apache tomcat11-16-mbean

web server apache tomcat11-17-default-servlet

web server apache tomcat11-18-clusting 叢集

web server apache tomcat11-19-load balance 負載均衡

web server apache tomcat11-20-connectors 聯結器

web server apache tomcat11-21-monitor and management 監控與管理

web server apache tomcat11-22-logging 日誌

web server apache tomcat11-23-APR

web server apache tomcat11-24-Virtual Hosting and Tomcat

web server apache tomcat11-25-Advanced IO and Tomcat

web server apache tomcat11-26-maven jars

web server apache tomcat11-27-Security Considerations

web server apache tomcat11-28-Windows Service

web server apache tomcat11-29-Windows Authentication

web server apache tomcat11-30-The Tomcat JDBC Connection Pool

web server apache tomcat11-31-websocket

web server apache tomcat11-32-rewrite

web server apache tomcat11-33-CDI

web server apache tomcat11-34-Ahead of Time compilation support

相關文章