首页 > 其他分享 >从零手写实现 apache Tomcat-01-入门介绍

从零手写实现 apache Tomcat-01-入门介绍

时间:2024-04-29 19:34:22浏览次数:26  
标签:web 01 tomcat Tomcat tomcat11 server apache 手写

创作缘由

平时使用 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

标签:web,01,tomcat,Tomcat,tomcat11,server,apache,手写
From: https://www.cnblogs.com/houbbBlogs/p/18166532

相关文章

  • 设计模式01 -----单例模式
    单例模式是一种常见的设计模式,用于确保类只有一个实例,并提供一个全局访问点。这种模式通常用于管理共享资源,例如数据库连接、日志文件等。单例模式的主要特点包括:单一实例:该模式确保类只有一个实例存在,无论何时何地都可以访问到这个实例。全局访问点:单例模式提供了一个全局......
  • tomcat白名单(九)end
    abouthealthcheckapi: PeriodTLSterminationmodesprintboottcptunnelhealthcheckcommentbeforeSept2023edgehttp20000/http20000 Sept2023-Apr2024passthroughhttp8081tls20000http8081 Apr2024passthroughhttp8081tls2......
  • 启发式评估(Heuristic Evaluation)--转载 [2011.12.13 sina blog]
    启发式评估(HeuristicEvaluation) -[一架好书--读书学习的收获]2008年08月07日分类: 一架好书--读书学习的收获  版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://buyantang.blogbus.com/logs/27286224.htmlUsabilityInspectionMethods,Edit......
  • 启发式评估(heuristic evaluation)方法介绍--转[2011.12.23 sina blog]
    启发式评估(heuristicevaluation)方法介绍(2008-09-0911:56:52)转载▼标签:it分类: 2互联网产品设计什么是启发式评估?启发式评估法就是使用一套简单、通用、有启发性的可用性原则来进行的可用性评估。即几个评审人员根据一些通用的可用性原则和自己的经验来发现......
  • 洛谷 P5293 [HNOI2019] 白兔之舞
    洛谷传送门所求即为:\[\begin{aligned}f_t&=\sum\limits_{m=0}^L\binom{L}{m}A^m[k\midm-t]\\&=\frac{1}{k}\sum\limits_{m=0}^L\binom{L}{m}A^m\sum\limits_{i=0}^{k-1}\omega_k^{i(m-t)}\\&=\frac{1}{k}\sum\l......
  • 虚拟机VMware tools的用途(转载)[2012.2.14 sina blog]
    虚拟机VMwaretools的用途更新虚拟机中的显卡驱动,使虚拟机中的XWindows可以运行在SVGA模式下。在客户操作系统中安装VMwareTools非常重要。如果不安装VMwareTools,虚拟机中的图形环境被限制为VGA模式图形(640x480,16色)。使用VMwareTools,SVGA驱动程序被安装,VMwareWorkstati......
  • [转载]自述WebPPD两年半的运营经历 [2012.11.9 sina blog]
    原文地址:自述WebPPD两年半的运营经历作者:尹广磊我在07年10月接触到了AxureRP,当时还是4.6英文版,学习门槛比现在的同学可是高多了。跟所有有过一定产品设计经验的人一样,我一开始是排斥这东西的。自认为过去的Visio用得不错。但是应公司要求,原型务必反映出页面间的链接关系。仅这一......
  • 2015 ACM ICPC Singapore Regional D(折半枚举+二分)
    D-AssociationofComputerMaintenance题意给定至多350个小于100的质数,对于所有质数之积k将它分解为两个数a和b使得a*b=k。输出最小的a+b,并对1e9+7取模分析首先考虑想如果想让a+b最小,即让abs(a-b)最小。随后根据限制条件k的因子数不超过1e10,容易想到将k拆分成k1和k2,此......
  • 流量特征分析-常见攻击事件 tomcat
    简介1、在web服务器上发现的可疑活动,流量分析会显示很多请求,这表明存在恶意的扫描行为,通过分析扫描的行为后提交攻击者IPflag格式:flag{ip},如:flag{127.0.0.1}2、找到攻击者IP后请通过技术手段确定其所在地址flag格式:flag{城市英文小写}3、哪一个端口提供对web服务器管......
  • P5896 [IOI2016] aliens (斜率优化 dp+wqs 二分)
    我们可以把所有点都对称到主对角线下方。然后每个点如果想被覆盖都会有一个最小的三角形,我们可以贪心的只留必须选的点。如果把剩下的点按\(x\)坐标升序排序,可以发现他们的\(y\)坐标也是升序排序的。记剩余点个数为\(n\),显然每个点都选自己的最小三角形最好。但是有可能\(......