tomcat工作原理
今天嘞,我们来粗略的谈一下tomcat的工作原理,希望有错误的地方请大家积极指出!
铺垫知识
emmm,在说之前我先说一下基本的铺垫知识吧。
- tomcat是使用java语言编写的
- 计算机依靠网卡设备和外界交互,网卡将电信号转变为物理信号(0,1),网卡在数据转化完毕之后将数据交给端口
- 一台电脑最多可以开216个端口,不会出现端口不够用的情况,因为端口开的过多,内存会首先崩掉,所以这么多端口是完全够用的,端口在物理上只有一块地址,逻辑上有很多端口
- 电脑上的程序和网络进行数据交换,必须要通过端口进行交换
- 任意
两个独立
的程序,不能同时
占用一个端口,一个独立运行的程序是一个进程,两个线程
也不能同时
占用一个端口,但是一个进程内的线程可以做到数据共享,进程之间做不到数据共享 - 端口上来了数据之后,程序通过监听端口来得到数据,程序监听是每隔一段时间看一次,称为
轮询
,发现数据之后就将数据取走。轮询通过while循环来实现 - tomcat有
接收请求
和返回请求
的作用 - Socket(套接字)用来
监听端口
,接收数据
和发送数据
,socket和网卡直接交互,数据传输的各种标记是由socket来加的,即组装协议格式
。在接收数据时,将数据进行提取,去掉各种标记 - tomcat的代码里包含了socket的实现,因为socket要不断进行轮询,所以这种线程是一直存活的,里面包含了一个死循环,在触发某个条件时,循环终止,进程也结束。
- tomcat
请求分发
功能:tomcat接收到请求信息,将请求分配到相应的servlet里面去,这种功能称为请求分发 - tomcat如何把消息传到servlet中:tomcat和网站都是用java写的,tomcat和这些网站最终会合成一个项目,tomcat中有main方法,可以调用网站中的各种方法
铺垫知识暂时想起来了这些,下面来看一下tomcat的工作原理
tomcat工作原理
- tomcat会扫描
webapp
文件里的所有Java文件,拿到所有java文件的路径,将带有@webServlet
注解信息的java文件挑选出来,挑选出来之后存到map结构
中,举个例子:假如我们写了一个名为TestDemoServlet的servlet,并且这个servlet在本地的路径是com.qcby.servlet.TestDemoServlet,那么map中就会这样存放(“TestDemoServlet”:“com.qcby.servlet.TestDemoServlet”) - tomcat中的main函数执行下述功能:
main(){
socket监听端口...(此处为轮询)
拿到网络数据,数据是字符串的形式str,str1
HttpServletRequest request = 字符串处理方法(str);
HttpServletResponse respons = 字符串处理方法(str1);
String url=request.getHearder("Request URL");//这是经过处理后的url,socket取出各种标记,
//并去掉域名,处理之后的url就是要访问的目标servlet
使用Map.get(url);拿到本地路径
通过本地路径对目标servlet进行实例化:
"com.qcby.servlet.TestDemoServlet"------>class------->newiInstance//这就要用到反射了,因为访问的servlet具有不确定性,
//所以使用反射可以动态生成各种类的实例
//TestDemoServlet ob=new TestDemoservlet();反射的效果和这句话一样
生成实例之后,利用代理执行类中的doGet和doPost方法:ss.invoke();
执行完之后,将携带的数据发送给socket,由socket组装协议格式,组装完成之后向外界发送数据
}
tomcat工作流程图
为了以防本人说不清楚,所以下面奉上本人画的流程图:
就是这样的一个过程啦!
来源:CSDN
作者:ZhaoAoc
链接:https://blog.csdn.net/qq_43677686/article/details/104089426