总结:服务器批量处理http请求的大致流程

一·客户端发起请求:可以多个请求同时发送

1.用户通过浏览器访问一个URL,该URL与某个Servlet相关联。
2.浏览器构造一个HTTP请求,请求中包含特定的URL、头部信息、参数等;并将它发送到Web服务器。

二·Web服务器解析请求(如:Nginx):可以多个请求同时解析

1.Web服务器主要作用:请求分发、反向代理、负载均衡器、HTTP缓存服务器,支持静态文件服务,一般不会处理动态请求。

动态请求:比如前端调用某API接口,需要后端服务器运算处理完,再响应给前端报文
静态请求:比如前端调用某API接口,后端直接将某个资源读取返回,不用任何运算。

注意:web服务器、servlet容器两者一般都可以称为服务器,如何区分就看具体实际情况了

2.每个服务器都会存在一个,监听指定端口的死循环socket线程,除非服务器关机,这个线程才会停止循环
3.该socket线程每接收到一个http请求,就会从服务器的线程池里面获取一个空闲线程来处理该请求
4.这个新线程接着就会解析请求中的URL路径和参数,然后根据URL映射规则,决定返回哪个静态资源,或者将该http请求继续转发给哪个Servlet容器(如Tomcat、Jetty等)来处理。

三·Servlet容器接收请求(如:tomcat):可以多个请求同时处理

1.Servlet容器主要作用:动态请求的运算处理
2.每个服务器都会存在一个,监听指定端口的死循环socket线程,除非服务器关机,这个线程才会停止循环
3.该socket线程每接收到一个http请求,就会从服务器的线程池里面获取一个空闲线程来处理该请求
4.这个新线程接着就会解析请求中的URL路径和参数,然后根据URL映射规则,找到对应的Servlet对象;并根据请求信息创建HttpServletRequest对象和HttpServletResponse对象,再传递到Servlet对象的service方法里面,然后继续执行service方法

注意:
(1)如果多个URL映射的是同一个servlet程序处理,那么servlet容器会给每个请求分配一个线程进行单独处理;
(2)servlet容器传递给各个线程的servlet对象都是同一个;
(3)servlet容器给每个线程中的同一个servlet对象之service方法,传递的两个参数HttpServletRequest对象和HttpServletResponse对象都是不一样的,这两个对象都是根据http请求报文即时生成的。
(4)这样虽然节省了服务器资源,但这也是造成可能存在高并发的核心原因
(5)因此servlet类中的成员变量要慎重使用,如果存在频繁修改的变量,就尽量不要设置为成员属性,而是设置为方法内的局部变量

四·Servlet初始化(如果需要):

1.如果Servlet实例还没有初始化,容器会调用init()方法进行初始化。这个方法在Servlet的生命周期中只会执行一次。

五·调用Servlet的service()方法:

1.Servlet容器调用Servlet的service()方法,并传递ServletRequest和ServletResponse对象作为参数。

六·选择适当的HTTP方法处理:

1.在service()方法内,Servlet根据HTTP请求的方法(GET、POST等)选择调用适当的doGet()、doPost()等方法。

七·Servlet处理请求:

1.在doGet()、doPost()等方法中,开发者编写具体的业务逻辑来处理请求。这可能涉及到读取参数、执行业务逻辑、访问数据库等。

八·生成响应:

1.Servlet生成一个ServletResponse对象,其中包含要返回给客户端的数据,比如HTML内容。

九·Servlet容器发送响应:

1.Servlet容器将ServletResponse对象传递给Web服务器,然后服务器通过网络将响应发送回客户端。

十一·Servlet销毁(如果需要):

1.如果Servlet容器检测到应用程序正在关闭或者Servlet的生命周期已经结束,它会调用Servlet的destroy()方法,释放资源。

十二·线程返回到线程池(如果使用):

1.处理请求的线程返回到线程池,等待下一个请求。

相关推荐

  1. 总结服务器批量处理http请求大致流程

    2023-12-10 08:42:02       50 阅读
  2. 处理HTTP请求服务器

    2023-12-10 08:42:02       25 阅读
  3. tomcat处理Http请求流程步骤

    2023-12-10 08:42:02       44 阅读
  4. tomcat是如何处理Http请求流程

    2023-12-10 08:42:02       61 阅读
  5. go HTTP请求处理

    2023-12-10 08:42:02       22 阅读
  6. Go中HTTP请求处理概述

    2023-12-10 08:42:02       32 阅读
  7. 简单分析SpringMVC处理请求流程

    2023-12-10 08:42:02       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-10 08:42:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-10 08:42:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-10 08:42:02       82 阅读
  4. Python语言-面向对象

    2023-12-10 08:42:02       91 阅读

热门阅读

  1. 【Docker管理工具】Rancher容器管理平台的基本使用

    2023-12-10 08:42:02       59 阅读
  2. IBM Qiskit量子机器学习速成(五)

    2023-12-10 08:42:02       53 阅读
  3. CMMI认证有什么意义

    2023-12-10 08:42:02       61 阅读
  4. WPF(Windows Presentation Foundation) 的 Menu控件

    2023-12-10 08:42:02       50 阅读
  5. 深入探讨MySQL数据库的InnoDB存储引擎架构

    2023-12-10 08:42:02       69 阅读
  6. SpringMVC-Servlet

    2023-12-10 08:42:02       62 阅读
  7. ESP32网络编程-OTA方式升级固件(基于Arduino IDE)

    2023-12-10 08:42:02       56 阅读