手写一个tomcat

Tomcat即是一个web容器

我认为这个容器要做的主要就是两件事:
(1)监听端口 (2)添加一个个的servlet对象
比如在开发每个web项目的时候 —> web.xml文件 —>标签 —>根据这些标签进行解析创建对象—>JVM —>内存模型—>最大的大小—>大小不够用—>垃圾回收—>GC—>CPU—>垃圾回收线程。。。。。

手写一个小型的tomcat

class Tomcat {
         //java.net     (1)监听端口 ---> source verify
         ServerSocket server = ServerSocket(8080);
         //client connect
         Socket socket = server.accpet();
         //web服务 client server 交互(io交互)
         socket.getIo();
         //servelt中已经拥有了request 和response
         //Tomcat 源码中读取每个web项目里的web.xml,解析servlet标签,创建一个个servlet对象
         //(2)添加每个web项目中的servlet
         list.add(servlet);         
}

分析源码来验证是不是这么做的

 <Connector port="8080" protocol="HTTP/1.1"
   connectionTimeout="20000"
   redirectPort="8443" />

在tomcat的server.xml里有这么一个标签,很明显他是一个监听端口的标签,我们猜测tomcat的源码是解析xml里每一个标签为一个对象。所以再源码中找有没有Connector这个类。很快,我们找到了,追踪这个类的主要过程如下:

Connector.initInternal();
protocolHandler.init();
AbstracgProtocol.init();
endPoint.init();
bind(); —>这个方法是重点,绑定?自然就是绑定端口对吧!
我们可以看到这个方法里有多中绑定方法J(java) 、IoEndpoint.bind()–>java传统io、BIO、NIO;

serverSocket = serverSocketFactory.createSocket(getPort(),getBackLog());
//用工厂模式创建socket连接;

讲解context标签

类Context.class ---->表示一个web项目吗?
ContextConfig —>用来解析web.xml吗?
我们在ContextConfig 可以看到这么一行代码 public static final String WEB_XML_LOCATION ="/WEB-INFO/web.xml"。证实了是!

if(ok){
  configureContext(web.xml);
  }
 for(ServletDef servlet : webxml.getServlets().values()){
   Wrapper wrapper = context.createWrapper();
   //Wraper 类对servlet进行了封装
    ........
 } 

context标签的使用,可以定义一个war包的路径,可以不用放在tomcat里面了!

list.add(servlet),源码是这么做的吗?

list.add(servlet);—>要去寻找 Context ContextConfig?
Tomcat源码的设计加载servlets一定是以web项目(Context)为单位的。

StandardContext.method() ---- list.add(wrappers);?

在这里插入图片描述
从上图源码可以看出,的确是这么做的!附tomcat原理架构图
在这里插入图片描述
在这里插入图片描述

tomcat架构设计相关文章

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值