我正在阅读"Java Web Services: Up and Running, 2nd Edition"的书,并发表了一句话:
诸如Tomcat之类的Web服务器可以实例化任意多个实例 尽管数量通常很小(例如,1到1) 4)。 Web服务器本身就做出了决定。
所以这意味着如果我创建一个servlet,那么服务器可以创建多个实例,但这与许多帖子中给出的解释相矛盾,例如,如果我签入此帖子:" 10 clients requests for a Servlet.How many servlet instances are created "然后它明确指出:
只存在一个servlet实例(每个类加载器),每个实例 请求将在自己的线程上提供
那么请帮助我理解这一点,服务器是否可以为servlet创建多个实例?
答案 0 :(得分:17)
对于未在分布式环境中托管的servlet(默认), servlet容器每个servlet只能使用一个实例 声明。但是,对于实现的servlet
SingleThreadModel
接口, servlet容器可以实例化 多个实例来处理繁重的请求加载和序列化 对特定实例的请求。在将servlet部署为应用程序的一部分的情况下 在部署描述符中标记为可分发,容器可以 每个Java Virtual每个servlet声明只有一个实例 机器(JVM)。但是,如果servlet处于可分发状态 application实现了
SingleThreadModel
接口,即容器 可以在每个JVM中实例化该servlet的多个实例 容器
所以这取决于你的部署方式。
正如评论中所建议的,SingleThreadModel
已被弃用了很长时间。
答案 1 :(得分:0)
默认情况下,servlet是内部多线程的。因此,只创建单个实例,并且将由多个线程访问。