论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
从零手写实现 apache Tomcat-01-入门介绍
从零手写实现 apache Tomcat-01-入门介绍
东湖之滨
金牌会员
|
2024-5-18 19:04:48
|
显示全部楼层
|
阅读模式
楼主
主题
948
|
帖子
948
|
积分
2848
创作缘由
平常使用 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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
东湖之滨
金牌会员
这个人很懒什么都没写!
楼主热帖
《HarmonyOS开发 - 小凌派-RK2206开发 ...
当我们在聊「开源大数据调度系统Taier ...
VMware虚拟机安装黑群晖7.1
从0到1实现一套CICD流程之CD
ABP Framework 7.0 RC 新增功能简介 ...
大二C#实现酒店管理系统(C端展示、前 ...
MySQL视图
dotnet 6 为什么网络请求不跟随系统网 ...
RequestDispatcher具有什么功能呢? ...
Kubernetes 集群中流量暴露的几种方案 ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表