tomcat学习记录

Tomcat两大组件:Connector 和 Container 

一个Container  可以对应多个 Connector  ,然后他们一起组成一个service,service只是在他们外面包了一层,把他们组装到一起,对外提供服务

Server:一个Server管理多个Service,Server可以管理Service的生命周期,控制Server的是Tomcat的startup,Server会继续调用Service的start

Service:标准实现类是StandService,它不仅实现了Service,还实现了Lifecycle接口,这样就可以控制下面组件的生命周期

Connector:负责接收浏览器过来的TCP连接请求,创建一个request和response,用于和请求端交换数据

Connector一次处理时序图:

 

Container :容器的父接口,Container容器的设计用的是责任链模式,

4个子容器分别是:Engine、Host、Context、Wrapper,他们是从上往下包含的关系

一个Wrapper通常对应一个Servlet类

一个Engine代表一个完整的Servlet引擎

Host不是必须的,但是如果是war程序,就必须要有Host容器,因为war包下的web.xml文件,需要Host容器解析

Engine:标准实现类是StandardEngine,engine没有父容器,添加的子容器也只能是Host类型的

Host:标准实现类是StandardHost,Engine的子容器,一个host代表一个虚拟主机,虚拟主机的作用就是运行多个应用,StandardHost实现了Deployer,可以通过里面的方法完成应用的部署

 Context:Context代表servlet的Context,它具备了Servlet运行的基本环境,理论上只要有context就可以运行servlet了,

主要作用:设置各种资源的属性和管理组件,启动子容器和Pipeline

Context配置文件中有个reloadable属性,为true时,war包被修改会自动加载这个应用

条件是reloadable为true,并且应用被修改,调用reload方法,reload会先stop再start,reload方法是在backgroundProcess中调用,这个方法是在ContainerBase周期性调用的,因为所以的容器都继承了ContainerBase,所以所有容器都能在backgroundProcess周期执行

<Context path="/" docBase="/usr/local/tomcat/apache-tomcat-8.5.55/webapps/ruoyi" reloadable="false"></Context>

Wrapper:代表一个Servlet,负责管理一个Servlet,包含Servlet整个生命周期

实现类是StandardWrapper,StandardWrapper还实现了一个拥有Servlet初始化信息的ServletConfig

当Servlet装载完成,开始初始化时,需要传入一个对象,StandardWrapperFacade对象,这个对象实现了ServletConfig接口,Servlet可以获取的信息都在这个对象里面,所以Servet可以通过ServletConfig获取有限的容器信息,Servlet初始化完成以后,由StandardWrapperValve去调用他的Service方法,调用Service方法之前要先调用Servlet的所有filter

 

Tomcat中的设计模式:

1.门面设计模式

假设多个子系统要相互通信,但是系统之间不能过多暴露数据,通过增加一个门面,将其他系统感兴趣的内容封装在里面

StandardWrapperFacade 就是 ServletConfig的门面

HttpRequestFacade 就是 HttpRequest的门面

2.观察者模式

通常也可以说是发布订阅模式,也就是事件监听机制

几个角色:

Subject 抽象主题,负责管理所有观察者的引用,同时定义事件操作

ConcreteSubject 具体主题,实现了抽象主题的所有接口,当自己发生变化通知观察者

Observer 观察者 监听主题发生变化的操作接口

Tomcat中的例子:    lifecycle , session管理, servlet的创建

3.命令模式     Connector就是通过命令模式调用的Container的

命令模式通常包含以下几个角色:

Client:创建一个命令

Command:命令接口

ConcreteCommand:具体命令

Invoker:请求者  

Receiver:接收者  

Connector作为抽象请求者,HttpConnector作为具体请求者,HttpProcessor作为命令,Container作为命令的抽象接收者,ContainerBase作为具体的接受者,客户端就是应用服务器Server组件。Server首先创建命令请求者HttpConnector,创建命令HttpProcessor对象,最后交给ContainerBase容器处理

4.责任链模式

就是很多对象由每个对象对下家的引用而连接形成一条链,请求在链上传递,直到链上某个对象处理该请求,或者每个对象都处理,并传给下家,

责任链的角色:

Handle:抽象处理者

ConcreteHandle:具体处理者

Container是抽象处理者,具体处理者从Engine到Host到Context到Wrapper形成一个链

这里又引入了Pipeline 和 Valve扩展了链的功能,链在传递的过程中Pipeline就是连接每个子容器的管子,里面传递的Request和Response相当于管子里的水,,而valve就是在管子上开个小口子,让你有机会接触到里面的水,做一些额外的事,为了防止水不流入下个容器,最后总有一个节点保证,所以每个容器都有一个StandardXXXValve

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值