如何一个servlet实例数由servlet容器装载之后产生的?是不是只有一个?
Servlet的不坚持Singleton pattern。 Servlet类有其已经违反了Singleton模式的公共构造函数。 servlet的创作是在默认情况下只Just Create One pattern。从技术上讲,容器可以创建许多人,因为它需要。特别是如果该servlet发生落实(不建议使用)SingleThreadedModel
接口,使容器可以为了提高性能创建这些Servlet实例池。
但是,这是事实,同一个实例可以在多个请求之间共享。这就是为什么它没有分配任何请求/会话范围的数据作为servlet的一个实例变量是非常重要的。它将多个请求之间共享。
Servlet的在其自身附着于顺便Template Method pattern。这是不相关的创作,它只是一种行为模式。
只有一个单Servlet实例每整个应用程序(懒洋洋地默认情况下)创建的,所以它必须是线程安全的(注意servlet的字段)。然而请求和响应的对象的每个请求产生,因此是线程安全的。
在另一方面,HTTPSession
是每个用户会话(废话......),所以如果同一用户访问与两个同时请求的应用程序,考虑在会话同步。正如你所看到的,servlet的线程模型是有点复杂...
是的,多线程一个实例。