Web容器通常会创建一个线程来处理每个请求。为了确保servlet实例一次只处理一个请求,servlet可以实现SingleThreadModel接口。如果servlet实现了这个接口,那么在servlet的服务方法中不会同时执行两个线程。一个web容器可以通过同步对servlet的单个实例的访问来实现这种保证,或者通过维护一个web组件实例池并调度来实现这个保证。每个新请求到一个免费实例。
有人可以澄清上段的粗体部分吗?
每个servlet在Web容器中只有一个实例吗?
答案 0 :(得分:2)
每个servlet在Web容器中只有一个实例吗?
不,这并非总是如此。 Web容器管理servlet的生命周期(它负责创建和管理servlet的实例)。 Java EE规范不保证servlet类只有一个实例,因此不应该以依赖于此的方式编写servlet。
正如描述所解释的那样,如果servlet实现SingleThreadModel
,Web容器可能会使servlet类的多个实例高效且并发地处理请求。
最好以不需要实现SingleThreadModel
的方式编写servlet - 以线程安全的方式编写servlet代码。