Dịch vụ() phương pháp thuộc về GenericServlet và có thể bị quá tải để hỗ trợ bất kỳ loại giao thức như vậy như Http, Ftp, v.v.
Sau đó, bạn có servlet chuyên biệt để xử lý HttpProtocol, chúng tôi gọi nó là HttpServlet. HttpServlet cũng cung cấp việc thực hiện mặc định cho các phương thức service() và doGet() và doPost().
Tại sao chúng ta không nên ghi đè lên phương thức dịch vụ()?
Vì thực tiễn không tốt để ghi đè phương thức dịch vụ. Nếu chúng ta gọi bất kỳ phương thức doxxx nào thì nội bộ nó sẽ gọi phương thức dịch vụ của HttpServlet. Vì vậy, bạn không cần phải gọi nó một cách rõ ràng.
tự thực hiện dịch vụ():
dịch vụ (ServletRequest, ServletResponse) ->
-> gọi
-> dịch vụ (HttpServletRequest req, HttpServletResponse res)
-> gọi
-> doGet/doPost (HttpServletRequest req, HttpServletRespo res NSE)
Đây là cách bạn có thể ghi đè lên các dịch vụ trong trường hợp bạn muốn: Mã
protected void service(HttpServletRequest req, HttpServletResponse resp) {
String method = req.getMethod();
if (method.equals(METHOD_GET)) {
doGet(req, resp);
} else if (method.equals(METHOD_HEAD)) {
doHead(req, resp);
} else if (method.equals(METHOD_POST)) {
doPost(req, resp);
} else if (method.equals(METHOD_PUT)) {
doPut(req, resp);
} else if (method.equals(METHOD_DELETE)) {
doDelete(req, resp);
} else if (method.equals(METHOD_OPTIONS)) {
doOptions(req,resp);
} else if (method.equals(METHOD_TRACE)) {
doTrace(req,resp);
} else {
resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
}}
thực hiện do Tomasz Nurkiewicz từ SO cộng đồng chỉ Overriding Service Method
tôi sẽ không ngạc nhiên nếu cuốn sách chỉ đang cố gắng trình bày các ví dụ về các cách khác nhau để sử dụng một servlet, trái với việc nói "bạn NÊN làm điều này, hoặc làm điều đó." Bởi vì thực sự, nếu bạn đang phát triển một ứng dụng nghiêm túc, cuối cùng bạn sẽ muốn nghiên cứu và thực hiện một khung công tác MVC (như Struts, Spring hoặc Wicket) thay vì thực hiện những thứ ở cấp servlet. (Chỉ là một gợi ý để đọc trong tương lai.) – Marvo