2012-09-20 17 views
16

Her bir HTTP isteği aynı sunucu nesnesine ancak farklı bir iş parçacığına erişiyor mu? veya yeni bir iş parçacığı ve yeni bir Servlet Örneği oluşturuyor mu?Her biri aynı sunucu nesnesine erişim ister mi?

+0

Neden istek üzerine bir sunucu uygulamıyorsunuz? –

+0

olası kopyası [Servlet nasıl çalışır? Örnekleme, oturum değişkenleri ve çoklu okuma] (http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading) – BalusC

cevap

12

Kaplet, sunucu uygulamanız SingleThreadModel uygulanmazsa aynı sunucu örneğini kullanır. Aksi takdirde, aynı Servlet nesnesinin vurulduğunu garanti etmez. Kapsayıcı, gerekli gördüğü takdirde daha fazla sunucu örneği oluşturmakta serbesttir. Ancak istekler, mutlaka yeni oluşturulan (Sanjay'in bahsettiği gibi) değil, farklı konulara dayandırılıyor. Servlet 3.0 tarifhamesinden

: bir dağıtılmış bir ortamda (varsayılan) bulunan bir sunucu uygulaması için

, sunucu uygulaması kap sunucu uygulaması beyanı başına yalnızca bir örneği kullanmak gerekir. Ancak, SingleThreadModel arabirimini uygulayan bir sunucu için, sunucu kabı bir ağır istek yükünü işlemek ve belirli bir örneğe isteklerini serileştirmek için birden çok örneği başlatır.

...

Genellikle Web konteyner farklı parçacığı üzerinde hizmet yönteminin eşzamanlı yürütülmesi ile aynı servlet'dir eşzamanlı isteklerini işler.

7

Her HTTP isteği yeni bir iş parçacığı oluşturur, ancak aynı Servlet örneğine erişir.

DÜZENLEME: Bir sunucu düğümü durumunda, o düğümde aynı Servlet örneğine sahip olursunuz. Yük dengeleme/birçok sunucu durumunda genellikle Java VM başına bir örneğiniz olacaktır.

+6

Gerçekten emin değilim * her zaman yeni bir iş parçacığı yaratın; Daha fazla mevcut bir iş parçacığı havuzundan ücretsiz bir iş parçacığı alır. –

+1

@ SanjayT.Sharma Haklısınız, genellikle bu şekilde yapılır (performans nedenleriyle), ancak bu uygulama sunucusunun/servlet konteynerinin uygulama detayıdır ve kodunuz buna bağlı olmamalıdır. –

İlgili konular