这是《 Head First Servlets and JSP》一书的摘录。我不明白的是为什么为什么init()
方法仅在线程A
中运行,而之后的service()
方法却在不同的线程B
中运行。 >
这是否意味着从浏览器到servlet的每个请求都有两个线程?还是init()
在容器可能创建的所有servlet实例中通用?那是错误的,因为它不是静态方法?
答案 0 :(得分:5)
该servlet仅由init()
初始化一次,但是对于每个新请求,都会从池中创建或分配一个新线程,以在适当的方法上调用该 servlet 实例。
对于每个新请求和线程,HttpRequest
和HttpResponse
对象将是新的,但servlet实例不是 。
答案 1 :(得分:1)
此描述适用于单个servlet实例。直观地,您可以将其视为在其他线程中处理请求而不阻塞主线程。如果请求是耗时的,则没有必要冻结应用程序来为其提供服务,因此每个请求都会导致派生。