Tomcat
如何设计一个web容器
思路比具体实现更重要。 学习把重点放在顶层设计。
学习一项技术,需要了解其完整的体系。看完一本书或者一个教程,获取完整的基础知识。
web容器提供两种服务,
- 静态资源的访问 (三个组件,request、HttpServer、Response)
直接通过访问根路径 + 静态资源名称访问 - servlet的访问
在访问根路径上加上servlet路径来做区分,将这类的请求委托给ServletProcessor来处理。
Servlet
为了java实现动态可交互网页,web编程的一套标准。
核心功能:
- 创建并填充Request对象,URI、参数、Method、请求头Header,请求体body等信息
- 创建response对象
- 执行业务逻辑,将结果通过Response的输出流传到客户端。
Servlet没有main方法,所以执行需要一个容器,容器为了支持Servlet的功能而存在。 Tomcat就是一个Servlet容器的实现。
Tomcat整体架构
组件角度:
- Server:服务器,启动和停止系统。一切包含在Server中。
- Service:服务,Server可以运行多个服务。
- Container: 容器,servlet容器。 engine(引擎)、host(主机)、context(上下文)、wraper(包装器)都继承自Container接口,所以它们都是容器。
- Connecter:连接器,service和container连接起来。把客户端的请求转发到Container(容器)。
一次完整的请求角度
客户端的请求http://localhost:8080/test/index.jsp,
- 发送到本地端口,被侦听的Connector获取,然后
- Connector将请求交给它所在的Service的engine来处理,等待Engine来回应;
- engine获取请求,匹配到所有虚拟主机Host,交给host匹配到路径为/Test的Context去处理,
- Path=/test的Context获取请求index.jsp,Mapping table中对应寻找servlet。
- Context匹配到对应的JspServlet,构造HttpServletRequest和HttpServletResponse对象,作为参数调用JspServlet的doGet和doPost方法。
- Context将执行完的HttpServletResponse返回给host
- host将HttpServletResponse对象返回给Engine
- Engine将HttpServletResponse对象返回给Connector
- Connector把HttpServletResponse对象返回给客户browser
- Post title:Tomcat
- Post author:郭旭升
- Create time:2023-01-14 21:42:06
- Post link:2023/01/14/Tomcat/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
Comments