tomcat原理(手写一个tomcat容器的笔记)

接收请求返回请求的代码:tomcat原理(手写一个tomcat容器的笔记)_第1张图片
tomcat原理(手写一个tomcat容器的笔记)_第2张图片

tomcat原理(手写一个tomcat容器的笔记)_第3张图片
tomcat如何和浏览器交互?
tomcat的本质是一个web服务器。在tomcat中,首先tomcat会调用socket绑定一个端口(一般默认为8080),并调用accept的阻塞方法去监听调用该端口的请求,然后根据socket.getInputStream()去读取url里传递的数据,用socket.outputStream方法返回给浏览器。在这个读写的过程中,为了防止浏览器发送参数的格式和服务端监听参数的格式不一致,必须遵循一定的规范,于是采用了http协议。在收到请求数据以后,会开启线程池,调用多线程根据url去调用servlet,根据ip:port/project的文件名去找到对应的项目来判断执行哪些业务代码。在我们双击执行startup.bat批处理文件时,会执行一个叫做bootstrap.jar的引导启动类,在该引导启动类中,包含java的主函数main方法。

tomcat怎么知道有哪些项目?

      

当接收到请求时,可以解析到对应的url。在tomcat源码中,有个servlet.xml文件,配置了一个webapp文件夹,tomcat会读取配置文件,根据这个配置文件知道要去哪个文件夹底下加载项目(配置如上所示)。

项目加载
1、取tomcat的配置文件,知道项目部署目录

String webapp = “D:\\tomcat\\webapp”

2、tomcat项目发布的两种形式(war包、解压后的文件夹),遍历指定文件夹下面的项目,遍历文件夹,把每一个文件夹当成一个项目

3、部署项目实现过程
tomcat如何知道url与servlet的对应关系:
(1)读取项目中的web.xml文件(读取指定的位置,默认情况下面web.xml必须放在指定的WEB-INF文件夹下,否则读取不到web.xml导致配置文件不生效)

4、解析协议http请求的内容(协议),GET/URL/http/版本号(json-1.0 xml-2.0),获取serlvet的路径

5、JDK的类加载工具会去加载class文件夹底下的class

6、tomcat会构建一个httpServletRequest对象–底层socket数据和java业务系统的过渡

你可能感兴趣的:(JAVA)