单个 servlet 如何处理来自客户端的多个请求
2022-09-01 09:24:32
单个 Servlet 如何处理以用户请求形式出现的多个客户端请求?基于单例设计模式,我知道我们创建了一个 servlet 的单个实例,但是单个 servlet 如何处理数百万个请求 。对其中涉及的线程也感到困惑。
此外,任何浏览器规范或设置在这里是否都很方便,可以发送请求或生成为请求发送的线程。
它是对所有框架都一样的,还是有所不同,例如支柱v / s弹簧?
单个 Servlet 如何处理以用户请求形式出现的多个客户端请求?基于单例设计模式,我知道我们创建了一个 servlet 的单个实例,但是单个 servlet 如何处理数百万个请求 。对其中涉及的线程也感到困惑。
此外,任何浏览器规范或设置在这里是否都很方便,可以发送请求或生成为请求发送的线程。
它是对所有框架都一样的,还是有所不同,例如支柱v / s弹簧?
每个请求都在单独的线程中处理。这并不意味着Tomcat为每个请求创建一个新线程。有一个线程池来处理请求。此外,每个 Servlet 都有一个实例,这是默认情况。(更多信息)。你的 servlet 应该是无状态的,即它应该是无状态的。Thread Safe
如果你的 servlet 实现了接口,那么每个线程都使用单独的 servlet 实例。SingleThreadModel
已弃用,不要使用它。SingleThreadModel
我把这个答案作为社区维基。
Struts/Spring框架实际上是写在Servlet规范之上的,所以不管你在下面使用什么,它都使用Servlets。
你是对的,只创建了一个 Servlet 实例,但该实例在多个线程之间共享。出于这个原因,你永远不应该在Servlet中共享可变状态。
例如,您已将以下 servlet 映射到http://localhost/myservlet
class MySerlvet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) {
// Get Logic
}
}
Web 服务器在其代码中将具有类似(不一定相同)的内容。
MyServlet m = new MyServlet(); // This will be created once
// for each request for http://localhost/myservlet
executorService.submit(new RequestProcessingThread(m));