手写一个简化版Tomcat

素颜马尾好姑娘i 2024-01-22 06:07 190阅读 0赞

一、Tomcat工作原理

我们启动Tomcat时双击的startup.bat文件的主要作用是找到catalina.bat,并且把参数传递给它,而catalina.bat中有这样一段话:

172917_4tib_3577599.png

Bootstrap.class是整个Tomcat 的入口,我们在Tomcat源码里找到这个类,其中就有我们经常使用的main方法:

173214_Xxkq_3577599.png

这个类有两个作用 :1.初始化一个守护进程变量、加载类和相应参数。2.解析命令,并执行。

源码不过多赘述,我们在这里只需要把握整体架构,有兴趣的同学可以自己研究下源码。Tomcat的server.xml配置文件中可以对应构架图中位置,多层的表示可以配置多个:

163755_KFNs_3577599.png

即一个由 Server->Service->Engine->Host->Context 组成的结构,从里层向外层分别是:

  • Server:服务器Tomcat的顶级元素,它包含了所有东西。
  • Service:一组 Engine(引擎) 的集合,包括线程池 Executor 和连接器 Connector 的定义。
  • Engine(引擎):一个 Engine代表一个完整的 Servlet 引擎,它接收来自Connector的请求,并决定传给哪个Host来处理。
  • Container(容器):Host、Context、Engine和Wraper都继承自Container接口,它们都是容器。
  • Connector(连接器):将Service和Container连接起来,注册到一个Service,把来自客户端的请求转发到Container。
  • Host:即虚拟主机,所谓的”一个虚拟主机”可简单理解为”一个网站”。
  • Context(上下文 ): 即 Web 应用程序,一个 Context 即对于一个 Web 应用程序。Context容器直接管理Servlet的运行,Servlet会被其给包装成一个StandardWrapper类去运行。Wrapper负责管理一个Servlet的装载、初始化、执行以及资源回收,它是最底层容器。

比如现在有以下网址,根据“/”切割的链接就会定位到具体的处理逻辑上,且每个容器都有过滤功能。

200436_4vKb_3577599.png

二、梳理自己的Tomcat实现思路

本文实现效果比较简单,仅供新手参考,大神勿喷。当浏览器访问对应地址时:

202207_5Bfg_3577599.png

实现以上效果整体思路如下:

1.ServerSocket占用8080端口,用while(true)循环等待用户发请求。

2.拿到浏览器的请求,解析并返回URL地址,用I/O输入流读取本地磁盘上相应文件。

3.读取文件,不存在构建响应报文头、HTML正文内容,存在则写到浏览器端。

资源来源:https://my.oschina.net/liughDevelop/blog/1790893
代码地址:https://github.com/qq53182347/liugh-tomcat

发表评论

表情:
评论列表 (有 0 条评论,190人围观)

还没有评论,来说两句吧...

相关阅读

    相关 一个Tomcat

    作为一个java学习的起步者,对tomcat的认识还是有很多的欠缺,在无意中发现了这篇文章,便在自己的环境下尝试搭建,收获良多: 分以下几个步骤: (1)提供Socke