2011-03-11 6 views
5

Aşağıdaki mantığı uygulamak istiyorum: HttpServletRequeset ve HttpServletResponse'yi ana sunucu uygulamasının doService yönteminde (ana web Kapsayıcı iş parçacığı) aldığım zaman, , A, B, C üç iş parçacığı (kendi programım tarafından yönetilen iş parçacığı) işlemek için diğer servlet paralel modda, ve sonra ana servise bu servlet her yanıtı katılın ve kendi iş parçacığım (A iş parçacığı varsa) yavaş çalışırsa, ana iş parçacığı bitecek, böylece ana yanıt kullanıcı ve döndürecektir Bir iş parçacığı düzgün çalışmaya devam etmelidir, daha sonra tarayıcı tarafında AJAX kullanarak A iş parçacığının yanıtını isteyecektir.Servlet Container tarafından sağlanan ayrılmış bir HttpServletRequest ve HttpServletResponse nasıl kopyalanır?

Yani, HttpServlettRequest ve HttpServletResponse Servlet Container tarafından sağlanan klonlamak istiyor ve klonlanmış istek ve yanıt (konteyner en HttpServletTrequest ve HttpServletResponse bitmiş, klonlanmış istek ve yanıtı hala düzgün çalışması) ayrılmalıdır.

Klonlanmış istek ve yanıtın davranışı, benim kodumun görünümünden Konteyner'le aynı olmalıdır. Bu takip edilebilir ve dahil edilebilir.

Herhangi bir fikrin var mı?

Çok teşekkürler! Eğer HttpRequest ve HttpResponse nesnelere bir temsilci olarak hareket ve sürecine Runnable nesnesine ilgili bir başvuru geçmesine sınıflar oluşturmak gerekir gibi

L.J.W

+1

Yapamazsınız. Dönemi. Fonksiyonel gereksinimi nedir? Daha sonra fonksiyonel gereksinimi sağlamak için daha uygun cevaplar/öneriler sağlayabiliriz. – BalusC

cevap

3

geldi.

Yalnızca bir kez bir HttpRequest nesnesine yapılabilecek belirli işlemler vardır (giriş akış yayından okumaya kadar), temsilci sınıfının buna uygun olması gerekir.

A, B ve C konuları yine de HttpResponse nesnesinde çakışan değişiklikler yaparsa ne yapacağınızdan emin değilsiniz.

ben işleme parçacığı üzerine HttpResponse nesnesi geçmek ve kontrol servlet sınıfına

+0

Klonlanmış İstek ve yanıtın ayrılmasını istiyorum, bu yüzden referansı geçemiyorum (vb. Sarma yöntemini kullanamıyorum) –

+1

@ LJW: söylediğin şey hiç mantıklı değil. "Referansı geçemiyorum" o zaman Java kullanmamalısınız ... –

+1

@ L.J.W İsterseniz bir yanıt gönderildiğinde yanıtı kullanmak için _get_ istemezsiniz, tanımlanmamış bir davranıştır. Diğer bir deyişle, akışlar (muhtemelen) kapatıldığı için çökecektir. – extraneon

2

Sana HttpServletRequest çok isteyen düşünüyorum içinde tepkisini yerleştirmek için mantığını terk tercih ediyorum düşünüyorum. Bir istek tamamlandığında, herhangi bir kullanımda olan istek nesnesine güvenmemelisiniz. Çoğu durumda bir J2EE kapsayıcısı içinde iş parçacığı öneririm, ancak bu farklı bir sorundur. Eğer paralel isteği işlemek gerekiyorsa

Ben size istek nesneden gereken verileri ayıklamak ve iş parçacığı için bu gönderip onlar depolayabilir HttpSession haricinde cahil çoğunlukla Servlet işçi konuları yapmak tavsiye Ajax alımı için hesaplanan değerleri.

+0

İş parçacığı, sunucu ve yanıt işlemek zorundadır, diğer veri türlerini gönderemiyorum .. –

+0

@ L.J.W Başka bir deyişle, özel bir HttpRequest ve HttpResponse uygulamanız ve verilen istek ve yanıttan kopyalanan verilerle başlatmanız gerekir. Akışları çalışmaz bu şekilde kopyalamayın. – extraneon

3

İstek ve yanıt sınıfları, birden çok ileti dizisinden klonlanacak veya erişilebilecek şekilde tasarlanmamıştır. Bunu yapmaya çalışırsanız, problemlerle karşılaşmak zorundasınız. Gereksinimlerinizi yeniden düşünmenizi öneririm.

5

HTTP istek ve yanıtının kopyalanması HttpServletResponseWrapper sınıf http://docs.oracle.com/javaee/1.3/api/javax/servlet/http/HttpServletResponseWrapper.html aracılığıyla mümkündür. Sun belgelerinde https://web.archive.org/web/20120626033905/http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets8.html kullanımlarına ilişkin bir örnek bulabilirsiniz.

Bildiri, işlenmeden önce istek ve yanıt bilgilerini değiştirebilmeniz asla planlanmadığı için bu sorunun çözümü için (o sırada) Sun'ın bir geçici çözümüydü.

Sarmalayıcıyı, Http bilgilerinin bir kopyasını yapmak ve farklı bir iş parçacığına geçirmek için kullanabilirsiniz.

İlgili konular