加载后,容器创建了多少个servlet实例?辛格尔顿?

时间:2011-06-09 19:41:02

标签: java servlets

加载后,servlet容器创建了多少个servlet实例? 它只有一个吗?

3 个答案:

答案 0 :(得分:9)

Servlet 遵守Singleton pattern。 Servlet类有一个公共构造函数,它已经违反了单例模式。默认情况下,servlet的创建只是Just Create One pattern。从技术上讲,容器可以根据需要创建尽可能多的容器。特别是如果servlet碰巧实现了(已弃用的)SingleThreadedModel接口,那么容器可以创建这些servlet实例的池以提高性能。

但是,确实可以在多个请求之间共享同一个实例。这就是将任何请求/会话作用域数据指定为servlet的实例变量非常重要的原因。它将在多个请求之间共享。

顺便说一下,Servlet本身遵循Template Method pattern。这与创作无关,只是一种行为模式。

另见:

答案 1 :(得分:4)

每个应用程序只创建一个单独的servlet实例(默认情况下是懒惰的),因此它必须是线程安全的(注意servlet字段)。但是,每个请求都会创建请求和响应对象,因此它们是线程安全的。

另一方面,HTTPSession是每个用户会话一个(duh ...),因此如果同一个用户使用两个同时请求访问应用程序,请考虑同步会话。如您所见,servlet线程模型有点复杂......

答案 2 :(得分:2)

是的,有一个多线程的实例。