2011-10-19 53 views
2

我知道像jboss這樣的web容器有一個參數來提及要創建的servlet的線程數,這是容器可以創建的線程的最大數量在servlet的Single實例上。Servlet線程池vs Servlet實例池 - 通過web容器

但是我的問題是,有沒有一種方法可以指定要創建的servlet實例的數量?如果是,那麼目的是什麼?對這種需求的需求可能是處理請求,比如說在一個實例上運行的一個或多個線程以某種方式損壞該servlet數據或銷燬()它 - 冗餘目的。

回答

4

編輯:小心!從Servlet規範2.4起,不推薦使用接口 javax.servlet.SingleThreadModel,而不直接替換。

關於容器是否應該創建同一個servlet的多個實例,或者總是隻有一個實例,該規範尚不清楚。


從Servlet規範2.4 http://download.oracle.com/otndocs/jcp/servlet-2.4-fr-spec-oth-JSpec/

實例

該servlet聲明其是如第一章所述的含有該servlet, theWeb應用程序的部署描述符的一部分的SRV.2.2數 SRV.13「部署描述符」控制servlet容器 如何提供servlet的實例。對於不在 分佈式環境中託管的servlet(缺省值),servlet容器必須每個servlet聲明僅使用 一個實例。但是,對於實現SingleThreadModel接口的servlet ,servlet容器 可能會實例化多個實例來處理沉重的請求負載,並將請求序列化到特定實例。

在一個 的servlet被派往標誌着 部署描述符爲分佈式應用程序的一部分的情況下,一個容器可以有每Java虛擬機(JVMTM)servlet的聲明只有一個 實例。但是,如果可分發應用程序中的servlet實現了SingleThreadModel接口,那麼容器可以在容器的每個JVM中實例化該servlet的多個 實例。

您可以在文檔中找到關於單線程模型的詳細信息

+0

我通過規範這一主題去。關於創建了多少實例,情況現在更加清晰。本質上,在非單線程,非SingleThreadedModel環境中將只有一個實例。謝謝。 – SoltanG