Servlet - Vòng đời
Một vòng đời của servlet có thể được định nghĩa là toàn bộ quá trình từ khi tạo ra nó cho đến khi bị phá hủy. Sau đây là các đường dẫn theo sau bởi một servlet.
Servlet được khởi tạo bằng cách gọi init() phương pháp.
Servlet gọi service() phương pháp xử lý yêu cầu của khách hàng.
Servlet được kết thúc bằng cách gọi destroy() phương pháp.
Cuối cùng, servlet là rác được thu gom bởi bộ thu gom rác của JVM.
Bây giờ chúng ta hãy thảo luận chi tiết về các phương pháp vòng đời.
Phương thức init ()
Phương thức init chỉ được gọi một lần. Nó chỉ được gọi khi servlet được tạo và không được gọi cho bất kỳ yêu cầu nào của người dùng sau đó. Vì vậy, nó được sử dụng để khởi tạo một lần, giống như với phương thức init của applet.
Servlet thường được tạo khi người dùng lần đầu tiên gọi một URL tương ứng với servlet, nhưng bạn cũng có thể chỉ định rằng servlet được tải khi máy chủ được khởi động lần đầu tiên.
Khi người dùng gọi một servlet, một phiên bản duy nhất của mỗi servlet sẽ được tạo, với mỗi yêu cầu của người dùng dẫn đến một luồng mới được chuyển giao cho doGet hoặc doPost nếu thích hợp. Phương thức init () chỉ đơn giản là tạo hoặc tải một số dữ liệu sẽ được sử dụng trong suốt vòng đời của servlet.
Định nghĩa phương thức init trông như thế này:
public void init() throws ServletException {
// Initialization code...
}
Phương thức service ()
Phương thức service () là phương thức chính để thực hiện tác vụ thực tế. Vùng chứa servlet (tức là máy chủ web) gọi phương thức service () để xử lý các yêu cầu đến từ máy khách (trình duyệt) và viết phản hồi được định dạng trở lại máy khách.
Mỗi khi máy chủ nhận được một yêu cầu cho một servlet, máy chủ sẽ tạo ra một luồng mới và gọi dịch vụ. Phương thức service () kiểm tra loại yêu cầu HTTP (GET, POST, PUT, DELETE, v.v.) và gọi các phương thức doGet, doPost, doPut, doDelete, v.v. khi thích hợp.
Đây là chữ ký của phương pháp này -
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
}
Phương thức service () được gọi bởi vùng chứa và phương thức dịch vụ gọi các phương thức doGet, doPost, doPut, doDelete, v.v. khi thích hợp. Vì vậy, bạn không liên quan gì đến phương thức service () nhưng bạn ghi đè lên doGet () hoặc doPost () tùy thuộc vào loại yêu cầu bạn nhận được từ máy khách.
DoGet () và doPost () là các phương thức được sử dụng thường xuyên nhất trong mỗi yêu cầu dịch vụ. Đây là chữ ký của hai phương pháp này.
Phương thức doGet ()
Yêu cầu GET là kết quả từ một yêu cầu thông thường cho một URL hoặc từ một biểu mẫu HTML không có METHOD được chỉ định và nó phải được xử lý bằng phương thức doGet ().
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Servlet code
}
Phương thức doPost ()
Yêu cầu POST là kết quả từ một biểu mẫu HTML liệt kê cụ thể POST là PHƯƠNG THỨC và nó phải được xử lý bằng phương thức doPost ().
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Servlet code
}
Phương thức hủy ()
Phương thức hủy () chỉ được gọi một lần vào cuối vòng đời của một servlet. Phương pháp này cung cấp cho servlet của bạn cơ hội đóng các kết nối cơ sở dữ liệu, tạm dừng các luồng nền, ghi danh sách cookie hoặc số lần truy cập vào đĩa và thực hiện các hoạt động dọn dẹp khác như vậy.
Sau khi phương thức hủy () được gọi, đối tượng servlet được đánh dấu để thu gom rác. Định nghĩa phương thức hủy trông như thế này:
public void destroy() {
// Finalization code...
}
Sơ đồ kiến trúc
Hình dưới đây mô tả một kịch bản vòng đời của servlet điển hình.
Đầu tiên, các yêu cầu HTTP đến máy chủ được ủy quyền cho vùng chứa servlet.
Vùng chứa servlet tải servlet trước khi gọi phương thức service ().
Sau đó, thùng chứa servlet xử lý nhiều yêu cầu bằng cách tạo ra nhiều luồng, mỗi luồng thực thi phương thức service () của một phiên bản duy nhất của servlet.