这是“Head First Servlets and JSP”一书的摘录。我不明白为什么init()
方法单独运行在线程A
,以及service()
方法在不同的线程,B
运行之后。
这是否意味着从浏览器到servlet的每个请求都有两个线程?或者init()
对于容器可能创建的所有servlet实例是否通用?这是错误的,因为它不是静态方法?
servlet仅由init()
初始化一次,但是对于每个新请求,都会从池中创建或分配新线程,以便在适当的方法上调用该servlet实例。
HttpRequest
和HttpResponse
对象对于每个新请求和线程都是新的,而不是servlet实例。
此描述适用于单个servlet实例。直观地,您可以将其视为在其他线程中处理请求而不阻止主线程。如果请求的时间成本很高,那么冻结应用程序来提供服务是没有意义的,因此每个请求都会导致分叉。