1 what
一种web服务器,运行java servlet、jsp技术,能为java web提供运行环境并通过http协议处理客户端请求。即tomcat = http服务器+ servlet容器。同类产品有jetty
- Web应用:Web应用是指通过Web浏览器访问的应用程序,它使用Web技术和标准(如HTTP、HTML、CSS、JavaScript等)来提供用户界面和与用户的交互。Web应用可以包括前端和后端组件,前端负责用户界面和展示,后端负责业务逻辑和数据处理。
- Servlet:Servlet是Java EE规范的一部分,它是一种运行在服务器端的Java程序,用于接收客户端(如Web浏览器)的请求、处理这些请求(包括访问数据库、调用业务逻辑等),并返回响应给客户端。Servlet是构建动态Web内容的核心技术之一
2 结构
连接器connector+容器container
容器就是engine、host、context、servlet/wrapper
所以架构就是service(8080端口)、connector、engine、host(http:localhost.com)、context(/mvc,一个web应用程序)、servlet/wrapper(/add,一个servlet)
3 关键组件
3.1 connector
3.1.1 Endpoint
用于:网络层通信tcp/ip,如NIO\NIO2
3.1.2 Processor
用于:应用层协议解析,如http
3.1.3 Adapter
用于:统一转换。tomcat request/response 转为servlet request/response,从而传给容器container。
- servlet request是Java Servlet API 中的一个关键接口。
- Java Servlet API是Java EE(现称为Jakarta EE)中用于开发服务器端Java应用程序的一套接口和类。Servlet是JavaWeb的三大组件之一(Servlet、Filter、Listener),它主要用于处理客户端的请求并生成响应。
3.2 设计模式
3.2.1 变动点和不变点的设计思路
不变点用抽象类、接口(如ProtocoHanlder、AbstrctProtocol),变点用具体类实现(如Http11NioProtocol、Http11Nio2Protocol)
3.2.2 适配器模式
Adapter,tomcat用CoyoteAdapter。
3.2 container
3.2.1 如何管理engine、host、context、servlet,用组合模式,让他们都实现Container
- 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。在这种模式中,客户端对单个对象和复合对象的使用具有一致性,即客户端能够以相同的方式处理单个对象和它们的组合。
说白了就是,用一个类/接口组装成树结构(有父子关系),这就是组合了,然后因为都是实现同一个接口,所以对每个部分的调用都是一样的。如下图
3.2.2 engine、host、context、servlet是顺序调用,用的是责任链模式Pipeline-Valve
pipeline是责任链,是队列,队列中的元素是valve。valve能执行处理逻辑,并转给下一个value。
valve和filter的区别:valve是tomcat的,filter是java servlet api的。valve工作再web容器级别,拦截所有应用请求,filter工作在应用级别,拦截某个web应用请求
3.2.3 engine管生命周期和分配请求
分配请求:映射mapper组件。根据url一层层找到对应的wrapper。
生命周期:负责容器创建、初始化、启动、销毁等。每个Container都继承了LifeCycle。所以也是个组合模式。
还用到了观察者模式(监听变更生命周期状态)、
组合模式(树结构即有父子关系)、
模板设计模式(写通用模板(通用逻辑),模板里面调用新方法,新方法走具体实现)
4 架构设计
- 罗列需求
- 面向对象设计类
- 找出需求中的变动点和不变点
- 变动点用抽象类,不变点用具体类实现