2011-10-21 29 views
5

Trong API Servlet của Java, cách duy nhất để có được ServletContext là thông qua một phiên bản của HttpSession (Javadoc).Tại sao tôi cần một HttpSession để lấy ServletContext?

Nếu tôi không muốn tạo phiên và chỉ cần ngữ cảnh servlet thì sao? Nói cách khác, tại sao không có phương pháp getServletContext() trong lớp HttpServletRequest?

EDIT

Tôi biết tôi có thể nhận được ServletContext từ servlet chính nó, vì nó nhận được nó trong quá trình khởi của nó. Tuy nhiên, tôi không thể lấy nó từ một HttpServletRequest một mình, mặc dù nó được liên kết với một servlet. Vì vậy, nếu tôi có một yêu cầu, nhưng không có tham chiếu đến bất kỳ servlet?

Trả lời

8

getServletContext() là một phần của GenericServlet là lớp cha mẹ cho HttpServlet để bạn có thể gọi nó trong triển khai servlet của mình.

Edit:

HttpServletRequest thừa hưởng getServletContext() từ ServletRequest từ servlet 3.0, vì vậy nó có vẻ như bạn sẽ phải vượt qua một bối cảnh cùng với các đối tượng request và response nếu bạn phải sử dụng một phiên bản trước 3.0.

+0

Đó không phải là câu hỏi. –

+0

@Laurent, xem chỉnh sửa. – rsp

+1

+1: Hình như Servlet 3 cuối cùng đã khắc phục sự không thống nhất này. –

3

Chỉ là mỗi tổ chức làm việc với các yêu cầu (máy chủ, bộ lọc trang) có riêng của mình getServletContext (hoặc init())

+0

+1, tuy nhiên, không phải lúc nào cũng như vậy. Đôi khi bạn chỉ có một yêu cầu, và cách duy nhất để bối cảnh servlet là thông qua phiên. –

+0

@LaurentPireyn ví dụ: khi bạn đã vượt qua yêu cầu trong các lớp khác, nếu không thì không biết về API Servlets? Có thể, nhưng trong trường hợp này, chúng ta kết thúc với việc mất các câu hỏi: cho dù nhận được 'ServletContext' là một ý tưởng hay ngay từ đầu; không nên chúng ta chỉ đẩy bối cảnh vào các thuộc tính; chúng ta không nên tổ chức lại logic của mình; vv ... – alf

+0

Tôi đang chuyển sang chế độ "nho chua", xin lỗi. Dù sao, vấn đề thực sự là gì? Lý do tôi tin là giữ số phương pháp hợp lý: tôi ngạc nhiên hơn rằng 'getServletContext' đã làm nó thành' HttpSession'. – alf

1

lớp servlet của bạn có một phương pháp getServletContext(), bạn không cần phải đi đến các yêu cầu .

Điều này có ý nghĩa, chính servlet có ngữ cảnh do vùng chứa cung cấp, điều này độc lập với bất kỳ yêu cầu cụ thể nào.

+0

Đó không phải là câu hỏi. –

+0

@Laurent câu hỏi ban đầu không có thông tin bổ sung mà chỉ yêu cầu có sẵn. – djna

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