本文已参与「新人创作礼」活动,一起开启掘金创作之路。
http请求处理过程
HTTP请求只是定义了数据的组织形式(通信格式),是一个应用层协议。数据传输依靠的是TCP/IP协议,HTTP数据内容是嵌在TCP数据包中的一段。
- 用户在浏览器操作,发起请求。
- 浏览器发起tcp连接请求,希望和服务器建立链接(socket)
- 服务器接收到请求并建立链接(三次握手)
- 连接通道建立成功之后,浏览器生成HTTP格式的数据包,发送请求数据包(请求行、请求头、请求体等)
- 服务器解析HTTP格式数据包,并处理请求
- 服务端发送响应数据包
- 客户端解析HTTP格式的响应数据包并渲染页面
- 浏览器呈现静态数据给用户
Tomcat处理请求的过程
Tomcat是一个HTTP服务器,能够接受并处理HTTP请求。
Tomcat服务器接收到请求之后,把请求交给Servlet容器进行处理,Servlet容器通过Servlet接口调用业务类进行请求处理。注意,这里服务器并不是直接将请求交给业务类,而是中间加入了Servlet容器与Servlet接口,是为了解耦。Servlet容器和Servlet接口这一套内容称为Servlet规范。
Tomcat既按照Servlet规范提供了实现,又具备了HTTP服务器的功能。
- 当用户请求某个URL资源时,HTTP服务器将其原生的Request封装为一个ServletRequest对象
- 进一步调用Servlet容器中的具体Servlet,这个过程通过URL与Servlet的映射关系进行匹配
- 如果Servlet还没有被加载,则通过反射实例化这个Servlet,并调用他的init方法进行初始化
- 接着调用Servlet的service方法处理请求,请求的处理结果使用ServletResponse进行封装
- 最终将ServletResponse对象返回给HTTP服务器,HTTP服务器再把响应转化为原生的Response发送给客户端