手撕Tomcat

后端开发进阶:Web APP -> Web 服务器

Jerrymouse Server设计目标如下:

1、支持Servlet 6的大部分功能:

支持Servlet组件;

支持Filter组件;

支持Listener组件;

支持Sesssion(仅限Cookie模式);

不支持JSP;

不支持async模式与WebSocket;

2、可部署一个标准的Web App;

3、不支持同时部署多个Web App;

4、不支持热部署。

一、设计服务器架构

一个Tomcat Server内部可以有多个Service(服务),通常是一个Service。Service内部包含两个组件:

Connectors:代表一组Connector(连接器),至少定义一个Connector,也允许定义多个Connector,例如,HTTP和HTTPS两个Connector;

Engine:代表一个引擎,所有HTTP请求经过Connector后传递给Engine。

在一个Engine内部,可以有一个或多个Host(主机),Host可以根据域名区分,在Host内部,又可以有一个或多个Context(上下文),每个Context对应一个Web App。Context是由路径前缀区分的,如/abc、/xyz、/分别代表3个Web App,/表示的Web App在Tomcat中表示根Web App。

因此,一个HTTP请求:

http://www.example.com/abc/hello

容器+引擎

存放http/https协议的容器;引擎就是主机+服务:主机根据域名区分,服务用/作为区分

二、Servlet规范

在Java Web应用中,除了Tomcat服务器外,其实还有Jetty、GlassFish和Undertow等多种Web服务器。

一个Java Web App通常打包为.war文件,并且可以部署到Tomcat、Jetty等多种Web服务器上。为什么一个Java Web App基本上可以无修改地部署到多种Web服务器上呢?原因就在于Servlet规范。

Servlet规范是Java Servlet API的规范,用于定义Web服务器如何处理HTTP请求和响应。Servlet规范有一组接口,对于Web App来说,操作的是接口,而真正对应的实现类,则由各个Web Server实现,这样一来,Java Web App实际上编译的时候仅用到了Servlet规范定义的接口,只要每个Web服务器在实现Servlet接口时严格按照规范实现,就可以保证一个Web App可以正常运行在多种Web服务器上:

Servlet处理流程:当Servlet容器接收到用户的HTTP请求后,由容器负责把请求转换为HTTPServletRequest和HttpServletResponse对象,分别代表HTTP请求和响应,然后,经过若干个Filter组件后,到达最终的Servlet组件,由Servlet组件完成HTTP处理,将响应写入HttpServletResponse对象。

相关推荐
金銀銅鐵3 分钟前
[Java] 如何自动生成简单的 PlantUML 类图
java·后端
Edward111111117 分钟前
3月23Math类,Arrays类
java·学习
小江的记录本7 分钟前
【Spring Boot】Spring Boot 全体系知识结构化拆解(附 Spring Boot 高频面试八股文精简版)
java·spring boot·后端·spring·面试·tomcat·mybatis
Thomas.Sir11 分钟前
从底层源码深入剖析 MyBatis 工作原理
java·架构·mybatis
九天轩辕11 分钟前
Android CI/CD 编译 AIDL 报错分析与解决
android·java·ci/cd
eggwyw12 分钟前
Spring 中使用Mybatis,超详细
spring·tomcat·mybatis
码农42717 分钟前
点评项目深入改造-------日常学习笔记
java·笔记·学习·搜索引擎·全文检索
Ivanqhz18 分钟前
寄存器分配的核心函数 allocate
java·开发语言·后端·python·rust
创世宇图18 分钟前
Alibaba Cloud Linux 安装生产环境-Tomcat
linux·tomcat
爱吃烤鸡翅的酸菜鱼19 分钟前
Spring Cloud Eureka 服务注册与发现实战详解:从原理到高可用集群搭建
java·spring·spring cloud·eureka