2012-07-17 58 views
17

Tôi đã tìm kiếm sự khác biệt chính xác giữa javax.servlet.http.HttpServlet , javax.servlet.GenericServletjavax.Servlet không thể tìm thấy sự khác biệt.Sự khác nhau giữa GenericServlet, HttpServlet và Servlet là gì?

"chính xác sự khác biệt" có nghĩa là

  1. Cách sử dụng
  2. Lý do đằng sau sự tồn tại javax.servlet.GenericServlet
+4

Điều đó vừa được trả lời trong javadocs của họ. Bạn đã đọc nó chưa? [Servlet] (http://docs.oracle.com/javaee/6/api/javax/servlet/Servlet.html), [GenericServlet] (http://docs.oracle.com/javaee/6/api/javax /servlet/GenericServlet.html) và [HttpServlet] (http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServlet.html) – BalusC

Trả lời

22

"Sự khác biệt chính xác" có nghĩa là gì? API liệt kê các sự khác biệt chính xác của .

Servlet is an interface defining what a servlet must implement.

GenericServlet is just that, a generic, protocol-independent servlet.

HttpServlet is a servlet tied specifically to the HTTP protocol.

Bạn có yêu cầu khi bạn muốn sử dụng bất kỳ của những?

Nói chung, bạn sẽ mở rộng HttpServlet để triển khai lớp web của ứng dụng.

Bạn có thể triển khai Servlet nếu bạn đang viết vùng chứa của riêng mình hoặc tự xử lý mọi thứ. Bạn có thể mở rộng GenericServlet để xử lý một giao thức khác, nhưng bạn có thể không.

+0

+1 cho 'Bạn có thể triển khai Servlet nếu bạn' viết lại thùng chứa của chính bạn hoặc xử lý mọi thứ của chính mình' – UnKnown

11

javax.servlet

Servlet là một công nghệ web server-side. Như tên của nó, nó phục vụ một yêu cầu của khách hàng và nhận được một phản hồi từ máy chủ. Bạn phải thực hiện javax.Servlet (Interface) để xử lý một servlet.

javax.servlet.GenericServlet

Chữ ký:

public abstract class GenericServlet extends java.lang.Object implements Servlet, ServletConfig, java.io.Serializable 
  1. GenericServlet định nghĩa một giao thức độc lập servlet generic.
  2. GenericServlet cung cấp kế hoạch chi tiết và giúp viết servlet dễ dàng hơn.
  3. GenericServlet cung cấp các phiên bản đơn giản của các phương pháp vòng đời init và phá hủy và các phương thức trong giao diện ServletConfig.
  4. GenericServlet triển khai phương thức đăng nhập, được khai báo trong giao diện ServletContext.
  5. Để viết một servlet chung, nó đủ để ghi đè phương thức dịch vụ trừu tượng .

javax.servlet.http.HttpServlet

Chữ ký:

public abstract class HttpServlet extends GenericServlet implements java.io.Serializable 
  1. HttpServlet định nghĩa một servlet cụ thể giao thức HTTP.
  2. HttpServlet cung cấp bản thiết kế cho Http servlet và làm cho việc viết dễ dàng hơn.
  3. HttpServlet mở rộng GenericServlet và do đó kế thừa các thuộc tính GenericServlet.
+2

Câu trả lời này được lấy từ http://javapapers.com/servlet/difference-between-httpservlet-and-genericservlet/ –

+0

câu trả lời hay nhất cho tôi –

9

javax.servlet.Servlet là giao diện, nó xác định các phương pháp cho tất cả các triển khai - đó là những gì giao diện thường làm.

javax.servlet.GenericServlet là giao thức độc lập. Nó là trừu tượng, vì vậy nó không được trực tiếp khởi tạo. Đó là lớp có thể sử dụng để mở rộng nếu bạn một ngày nào đó phải viết servlet cho giao thức khác với HTTP.

javax.servlet.http.HttpServlet là lớp trừu tượng được mở rộng nếu bạn muốn giao tiếp qua giao thức HTTP. Nhiều khả năng bạn chỉ phải quan tâm đến điều này.

Thông tin chính xác hơn mà bạn có thể tìm thấy phía sau các liên kết.

2

HttpServlet là cụ thể cho các giao thức HTTP và do đó nó cung cấp các phương pháp để động từ HTTP: doGet, doPost, vv, và một phiên bản của service phương pháp chung chung mà sẽ đưa đối tượng request và response HTTP cụ thể. Đây là một loại đặc biệt của Servlet mà thực sự là một giao diện khá tối thiểu.

GenericServlet là cách triển khai cơ bản, giao thức trung lập của giao diện Servlet. Thông thường bạn sẽ tìm thấy các triển khai cơ bản tương tự của các giao diện trong một API; trong trường hợp này, GenericServlet thêm một chút chức năng vào các API Servlet: getServletName, getServletInfo và truyền thông cho các tham số init servlet. HttpServlet lợi ích từ những bổ sung này bằng cách mở rộng GenericServlet.

Nói chung tất cả mọi người mã hóa chống API này đang sử dụng HttpServlet để thực hiện các dịch vụ web HTTP, nhưng người ta cũng có thể mở rộng hoặc sử dụng GenericServlet để thực hiện chức năng máy chủ/dịch vụ sử dụng một giao thức tùy chỉnh, hoặc một giao thức còn tồn tại, ví dụ, FTP.

1

->GenericServlet có thể xử lý nhiều yêu cầu của khách hàng từ một biểu mẫu duy nhất. Trong khi đó, HttpServlet có thể xử lý nhiều khách hàng yêu cầu từ nhiều biểu mẫu HTML.

->GenericServlet là không quốc tịch và HttpServlet là trạng thái có trạng thái.

3

Servlet: -

  1. Các Servlets chạy như một sợi trong một web-container thay vì trong một quá trình hệ điều hành riêng biệt.
  2. Chỉ một đối tượng được tạo lần đầu khi có yêu cầu đầu tiên, yêu cầu khác chia sẻ cùng một đối tượng.
  3. Servlet là nền tảng độc lập.
  4. Servlet nhanh.

GenericServlet: -

  1. chung cho tất cả các giao thức.
  2. Triển khai Giao diện Servlet.
  3. Sử dụng phương thức Dịch vụ.

HttpServlet: -

  1. Chỉ cho HTTP Protocol.
  2. Thừa kế lớp GenericServlet.
  3. Sử dụng phương thức doPost, doGet thay vì phương thức dịch vụ.
7

-> Một tính năng phổ biến là cả hai Lớp này là Lớp trừu tượng.

-> GenericServlet là một lớp siêu của lớp HttpServlet.

-> Sự khác biệt chính là, HttpServlet là giao thức phụ thuộc trong khi GenericServlet là giao thức độc lập. Vì vậy, GenericServlet có thể xử lý tất cả các loại giao thức, nhưng HttpServlet chỉ xử lý các giao thức HTTP cụ thể.

-> GenericServlet thuộc về gói javax.servlet. HttpServlet thuộc về gói javax.servlet.http

-> GenericServlet là lớp trừu tượng mở rộng Object và triển khai các giao diện Servlet, ServletConfig và java.io.Serializable. HttpServlet là một lớp trừu tượng mở rộng GenericServlet và triển khai thực hiện giao diện java.io.Serializable.

-> GenericServlet chỉ hỗ trợ phương thức service() không chứa phương thức doGet() và doPost(). Hỗ trợ HttpServlet cũng sử dụng phương thức doGet(), doPost(), doHead() (HTTP 1.0) cộng với phương thức doPut(), doOptions(), doDelete(), doTrace() (HTTP 1.1).

0

Tất cả các lớp, giao diện và phương thức có trong gói javax.servlet là giao thức độc lập (chung cho tất cả các giao thức).

Ngược lại, tất cả các lớp, giao diện, và các phương pháp hiện diện trong gói javax.servlet.http là giao thức phụ thuộc (cụ thể cho các giao thức HTTP)

2

Servlet là một giao diện, trong đó có năm phương pháp trừu tượng được sử dụng để servlet chúng tôi có để cung cấp một thực hiện cho tất cả năm phương pháp này, đó là một nhức đầu. Để tránh sự phức tạp này, chúng ta có GenericServlet và HttpServlet cho cấp độ tiếp theo.

GenericServlet là giao thức độc lập, có nghĩa là nó có thể chấp nhận bất kỳ yêu cầu giao thức nào. GenericServlet có thể chuyển tiếp và bao gồm yêu cầu nhưng chúng tôi không thể chuyển hướng yêu cầu. Quản lý phiên với cookie và HttpSession không thể thực hiện trong GenericServlet. Trong GenericServlet, không thể xác định logic riêng biệt để nhận và gửi yêu cầu.

HttpServlet phụ thuộc vào giao thức. nó có nghĩa là, nó chỉ chấp nhận yêu cầu giao thức HTTP. HttpServlet có thể chuyển tiếp và bao gồm và chuyển hướng một yêu cầu. Quản lý phiên với cookie và HttpSession có thể thực hiện trong HttpServlet. Trong HttpServlet có thể xác định logic riêng biệt để nhận và gửi yêu cầu.

+0

Tôi thích câu trả lời của bạn. Cũng giống như câu trả lời của tôi. –

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