| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> tomcat学习记录 -> 正文阅读 |
|
[Java知识库]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周期执行
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 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 22:37:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |