2012-09-20 23 views
16

Mỗi yêu cầu HTTP có truy cập cùng một đối tượng servlet nhưng trong một chủ đề khác không? hoặc nó tạo ra một chủ đề mới và Servlet Instance mới?Mỗi yêu cầu có truy cập cùng một đối tượng servlet không?

+0

Tại sao không khởi tạo servlet theo yêu cầu? –

+0

bản sao có thể có của [Các servlet hoạt động như thế nào? Khởi tạo, biến phiên và đa luồng] (http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading) – BalusC

Trả lời

12

Vùng chứa sẽ sử dụng cùng một cá thể servlet nếu servlet của bạn không triển khai SingleThreadModel. Nếu không, không có sự đảm bảo rằng cùng một đối tượng Servlet bị trúng. Thùng chứa là miễn phí để tạo ra nhiều trường hợp servlet nếu nó xem xét cần thiết. Nhưng các yêu cầu đến trên các chủ đề khác nhau, không nhất thiết phải được tạo mới (như Sanjay đã đề cập).

Từ đặc tả Servlet 3.0:

Đối với một servlet không được lưu trữ trong một môi trường phân phối (mặc định), container servlet phải sử dụng duy nhất một trường hợp mỗi khai servlet. Tuy nhiên, đối với servlet triển khai giao diện SingleThreadModel, thùng chứa servlet có thể khởi tạo nhiều trường hợp để xử lý yêu cầu tải nặng và yêu cầu tuần tự cho một trường hợp cụ thể.

...

chung container Web xử lý yêu cầu đồng thời với servlet cùng bởi thực hiện đồng thời của phương pháp dịch vụ trên chủ đề khác nhau.

7

Mỗi yêu cầu HTTP tạo một chuỗi mới nhưng truy cập cùng một phiên bản của Servlet.

EDIT: Trong trường hợp một nút máy chủ, bạn sẽ có cùng một cá thể Servlet trên nút đó. Trong trường hợp cân bằng tải/nhiều máy chủ, bạn thường sẽ có một cá thể trên mỗi máy ảo Java.

+6

Tôi chắc chắn nó không thực sự * tạo * một chuỗi mới luôn; giống như chọn một chủ đề miễn phí từ nhóm chủ đề hiện có. –

+1

@ SanjayT.Sharma Bạn nói đúng, nó thường được thực hiện theo cách này (vì lý do hiệu suất), nhưng đây là chi tiết thực hiện của máy chủ ứng dụng/thùng chứa servlet và mã của bạn không nên phụ thuộc vào đó –

Các vấn đề liên quan