【问题标题】:how requests gets handled by dispacther servlet?调度程序 servlet 如何处理请求?
【发布时间】:2022-04-12 00:00:12
【问题描述】:

想知道在实时环境中创建了多少个 Dispatcher servlet 实例。

当有多个请求进入应用程序时,如果spring创建单例对象,一个对象如何处理多个请求?

当有这么多人访问网站时会发生什么,因为 dispatcherServlet 对象只有一个,所有请求都由同一个对象处理,会不会产生任何性能问题?

【问题讨论】:

  • 一个 servlet 来统治它们...为什么单个实例不能处理多个请求,你只需要确保它是线程安全的(即没有共享状态)。跨度>
  • 感谢您的回答,但我仍然感到困惑,当有很多人访问该网站以及由 cotainer 创建的不同线程都指向同一个 dispacherServlet 对象时,是否会有任何性能问题?...请澄清这一点
  • 没有。为什么你认为这是一个问题,只要没有状态,单个对象完全能够被多个线程使用(每个请求由不同的线程处理)。所以不,不会有任何问题(除非您添加 synchronized 方法等)。

标签: spring spring-mvc spring-webflow


【解决方案1】:

正如 M. Deinum 所说,一个 servlet 可以统治所有这些。我将尝试提供 ServletDispatcher 生命周期的非常笼统的描述。

  1. 当请求离开浏览器时,它会携带来自用户的信息。这将转到前端控制器 DispatcherServlet,它是将请求委托给其他组件的 单个 servlet

  2. DispatcherServlet 的工作是将请求发送到正确的控制器。由于一个应用程序可以有多个控制器,DispatcherServlets 可以通过咨询处理程序映射

  3. 来帮助决定将其发送到哪个控制器
  4. DispatcherServlet 将请求发送到目标控制器

  5. 控制器打包模型数据并识别显示输出的视图的名称并将其发送回 dispatcherservlet。 p>

  6. DispatcherServlet 咨询 viewResolver 并查找设置为显示数据的视图。

  7. 视图是通过使用模型数据生成输出来实现的(例如通过 JSP)。哪个被发送回客户端。

这一切都发生得非常快(毫秒),这意味着可以在很短的时间内处理数千个请求。

【讨论】:

  • 非常感谢您的精彩解释。我对流程有所了解,但如果 dispactherServlet 只有一个对象并且它会有一些内存位置,我会感到困惑。因为每个应用程序都有很多请求线程将尝试访问相同的内存位置。它是否由应用程序处理。一次可以访问多个线程吗?它不会产生任何性能问题吗?....提前致谢
  • 是否需要创建多个dispatcher servlet实例来处理多个请求?这么想吧,dispatcher servlet 是一个静态类,有一堆方法。多个请求调用这些方法会创建多个堆栈内存条目。那样安静还可以。现在放宽我们的假设,即调度程序 servlet 不是静态对象,而是单例,并且如果调度程序 servlet 没有管理任何状态,则一切都应用静态。我所说的状态是指没有成员变量来管理任何请求的任何状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 2018-10-17
  • 2015-10-04
相关资源
最近更新 更多