Tomcat概念和运行原理
1.Tomcat的结构
想搞清楚Tomcat的工作原理,首先需要了解Tomcat的数据结构,如下:
1.Server 指整个Tomcat服务器,其中包含多个组件,主要负责管理和启动各个service,同时监听8005端口发过来的shut down命令,用于关闭整个服务器。
2.Service 是Tomcat封装的用于对外提供完整的基于组件的web服务,主要包括connector和container两个核心组件和多个功能组件。各个service之间的独立的,但是他们会共享同一个虚拟机资源。
3.Connector 是Tomcat与外部世界的一个连接器,监听固定的端口,接收外部请求,然后将请求传递给container,并且将container的处理结果再返回给外部。
4.Container 是一个servlet容器,内部由多层容器组成,主要用于管理servlet 的生命周期,然后调用servlet 的相关方法去处理业务逻辑。
5.Jasper 是Tomcat的JSP的解析引擎,用于将JSP文件转化成Java文件,并且编译成.class文件。
6.Naming 其实是一个命名服务,将名称和对象联系起来,使得可以用名称去访问对象。
7.Session 负责管理和创建session,session的持久化。可以自定义,并且支持session的集群。对于Tomcat而言,session是在服务器开辟的内存空间。在开发中,经常用session来存储一些临时的信息。
8.Loging 负责记录相关的日志,包含访问错误信息和一下运行信息。
9.JMX javase中的定义的一个技术规范,主要是为应用程序,设备,系统等植入管理功能的框架。通过jmx可以远程监控Tomcat的运行状况。
2.Tomcat的核心组建
Tomcat的核心组建主要包括两个:connector和container
2.1connector
1.接收客户端连接
2.加工处理客户端请求
每个Connector都将指定一个端口进行监听,分别负责对请求报文的解析和响应报文组装,解析过程生成Request对象,而组装过程涉及Response对象。
如果将Tomcat整体比作一个巨大的城堡,那么Connector组件就是城堡的城门,每个人要进入城门就必须通过城门,它为人们进出城堡提供了通道。同时,一个城堡还可能有两个或者多个城门,每个城门代表了不同的通道。
2.2container
1.所有的子容器的父接口
2.使用责任链设计模式
3.包含四个子容器:Engine、Host、Context、Wrapper
责任链模式:使多个对象都有机会去处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
Engine:用来管理多个站点,一个service最多只能由一个engine;
Host:代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点。
Context:代表一个应用程序,相当于一个war包。
Wrapper:一个封装了的servlet。
3.server处理HTTP请求
请求流程如下图:
1.用户点击网页的内容,请求被发送到主机的8080端口,会在那里监听8080端口的connector获得。
2.接下来connector会请求它所在的server的Engine来处理,并且等待Engine的回应。
3.Engine获得的请求是localhost-teckst-index.jsp,它就去匹配所有的虚拟主机,也就是Host。Engine去匹配名称为localhost的host,也就是站点,名称为localhost的站点获得请求teckst-index.jsp。
4.然后再去匹配所有的context,而host匹配的路径为teckst-Context,也就是项目。
5.然后第五步,匹配到-Context的context,它去获得的请求是Index.jsp,它就会在它的Mackie table里面去寻找对应的servlet。
6.对应的servlet就会构建两个对象,一个是appservletrequest和reponse两个对象,并且作为参数去调用jspservlet的doget或者dopost方法, 然后去执行业务逻辑,比如说数据存储。
7.然后context就会把执行完的httpservletresponse对象返回给Host。
8.Host把response对象返回给Engine。
9.Engine再返回给Connector。
10.Connector再返回给客户端。