2013-05-25 41 views

Trả lời

22

destroy() là một phương thức vòng đời được gọi bởi vùng chứa Servlet khi dỡ một phiên bản cụ thể của Servlet. Tương tự, hộp chứa sẽ gọi service() khi có khách hàng yêu cầu Servlet.

Chúng tôi có thể gọi phương thức service() từ phương thức destroy() trong Servlet không?

Câu trả lời ngắn:, như service() là một phương pháp giống như bất kỳ khác.

Câu trả lời dài: Bạn có thể, nhưng không có ý nghĩa. service() yêu cầu một thông số yêu cầu và đáp ứng thường được cung cấp bởi vùng chứa khi Servlet được gọi. Nếu bạn đang tự gọi service(), bạn sẽ cung cấp những thông số đó như thế nào? Để làm gì? Bạn sẽ sử dụng null trên cả hai? Điều gì tốt là service() cho hai tham số trống?

Chúng tôi có thể gọi phương thức destroy() từ phương thức service() trong Servlet không?

, một lần nữa, bạn có thể gọi destroy() từ bên trong service() vì nó cũng là một phương pháp giống như bất kỳ khác. Mặc dù vẫn còn lạ, điều này có thể có ý nghĩa đôi khi, như destroy() sẽ làm bất cứ điều gì logic bạn đã xác định (dọn dẹp, loại bỏ các thuộc tính, vv).


QUAN TRỌNG: Chỉ cần nhớ rằng chỉ đơn giản gọi destroy() sẽ không dỡ bỏ các dụ Servlet. Bạn không quản lý vòng đời của Servlets trong chương trình, Servlet Container thực hiện.

+0

Cảm ơn phản hồi của bạn. Nó thật sự tốt. –

+0

Câu trả lời hay - acdcjunior – MAA

2

Mục đích của destroy() không được phân bổ/miễn phí tất cả các tài nguyên được sử dụng bởi cá thể Servlet. Bằng cách gọi destroy() container deregister servlet và dịch vụ của nó.

Có bạn có thể gọi các service(request, response) như phương pháp anyohter từ destroy() nhưng nó sẽ không được thực hiện vì vậy nó vô dụng để gọi phương thức dịch vụ từ destroy() như những phương pháp dịch vụ không bao giờ được gọi là/thực hiện, yêu cầu và phản ứng sẽ được null như những đồ vật đó sẽ không được cung cấp bởi container.

public void destroy() { 
     try 
     { 
      doPost(null, null); // will not be executed 
      doGet(null, null); // will not be executed 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

Từ Java doc:

public void phá hủy()

gọi bởi container servlet để chỉ cho một servlet rằng servlet đã được đưa ra khỏi dịch vụ. Phương thức này chỉ được gọi khi tất cả các luồng trong phương thức dịch vụ của servlet đã thoát hoặc sau một khoảng thời gian chờ đã trôi qua.

Sau khi thùng chứa servlet gọi phương thức này, nó sẽ không gọi lại phương thức dịch vụ trên servlet này.

Phương pháp này cung cấp cho servlet một cơ hội để dọn sạch bất kỳ tài nguyên nào đang được giữ (ví dụ, bộ nhớ, xử lý tệp, chuỗi) và đảm bảo rằng trạng thái liên tục được đồng bộ hóa với trạng thái hiện tại của bộ nhớ trong bộ nhớ.

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