【问题标题】:How many instances are created for a HTTP servlet为一个 HTTP servlet 创建了多少个实例
【发布时间】:2014-04-27 22:59:43
【问题描述】:

我正在为"Java Web Services: Up and Running, 2nd Edition" 翻阅这本书,并发现了一个声明:

像 Tomcat 这样的 Web 服务器可以实例化任意多个实例 servlet 的数量,尽管数量通常很小(例如,1 到 4)。网络服务器自己做出决定。

所以这意味着如果我创建一个 servlet,那么服务器可以创建超过 1 个实例,但这与许多帖子中给出的解释相矛盾,例如,如果我查看这篇帖子:“10 clients requests for a Servlet.How many servlet instances are created”,那么它清楚地说明了那:

仅存在一个 servlet 实例(每个类加载器),并且每个 请求将在其自己的线程上提供服务

所以请帮助我理解这一点,服务器是否可以为一个 servlet 创建多个实例?

【问题讨论】:

    标签: java tomcat servlets


    【解决方案1】:

    Servlet Specification 状态

    对于不在分布式环境中托管的 servlet(默认), servlet 容器每个 servlet 只能使用一个实例 声明。 但是,对于实现 SingleThreadModel接口,servlet容器可以实例化 多个实例来处理繁重的请求负载和序列化 对特定实例的请求。

    如果 servlet 作为应用程序的一部分进行部署 在部署描述符中标记为可分发的,容器可以 每个 Java Virtual 每个 servlet 声明只有一个实例 机器(JVM)。但是,如果 servlet 在可分发 应用程序实现SingleThreadModel 接口,容器 可以在每个 JVM 中实例化该 servlet 的多个实例 容器。

    所以这取决于你的部署方式。

    正如 cmets 中所建议的,SingleThreadModel 已被弃用很长时间。

    【讨论】:

      【解决方案2】:

      默认情况下,servlet 是内部多线程的。所以只会创建一个实例,并且会被多个线程访问。

      【讨论】:

        猜你喜欢
        • 2012-05-21
        • 1970-01-01
        • 2014-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-06
        • 2017-05-02
        • 1970-01-01
        相关资源
        最近更新 更多