Sự khác biệt giữa servlet và dịch vụ web


88

Sự khác biệt giữa 2 cái này là gì? Tôi tìm thấy vài kết quả trên google không có gì kết luận.

Đây là một câu hỏi tiếp theo:

Giả sử tôi tạo ứng dụng web Spring mvc chú thích một vài lớp với chú thích @Controller và tạo một thứ gì đó sẽ chuyển thành công một số thông tin từ front end -> back end và ngược lại và có lẽ một số cơ sở dữ liệu có thể tham gia vào phía sau.

Bạn gọi cái đó là gì? Dịch vụ web còn lại hoặc servlet hoặc thứ gì khác?


6
Một lời khuyên: nếu bạn không biết servlet là gì, bạn có thể gặp khó khăn với Spring mvc (có chú thích). Một giải pháp đơn giản hơn (vani servlet + jdbc) có thể sẽ giúp bạn học những kiến ​​thức cơ bản nhanh hơn.
biziclop

1
Nếu một servlet chỉ có một hành vi có ý nghĩa và servlet đó được ánh xạ tới một URL rõ ràng, tôi không hiểu lý do gì (1) Các tham số GET hoặc POST không thể được gửi đến Servlet (2) Phản hồi của Servlet có thể trả về một tải XML với bộ kiểu MIME thích hợp (3) mà điều này không tương đương với Dịch vụ Web theo nghĩa học thuật?
8bitjunkie

@GandalfStormCrow Với servlet, dữ liệu thực tế đang được truyền không phải là dữ liệu mà là một tài liệu html. tài liệu html thích hợp hơn cho các yêu cầu như 1) lấy tài liệu 2) hiển thị tài liệu , từ con người sang máy tính. Tuy nhiên, nhu cầu là giao tiếp ứng dụng-ứng dụng theo cách độc lập với máy. Vì vậy, dịch vụ web nói về việc truyền dữ liệu của dữ liệu bằng xml qua http.
trao đổi quá mức

Câu trả lời:


90

Một dịch vụ web là một dịch vụ cung cấp phương pháp dịch vụ cho khách hàng của mình bằng cách sử dụng các mô hình lập trình REST hoặc giao thức SOAP để liên lạc. Có một số cách để triển khai một dịch vụ web. Cách đơn giản nhất để viết một dịch vụ web là viết một lớp và chú thích nó bằng @WebService@WebMethodchú thích từ javax.jws, sau đó khởi chạy nó từ một main-method với:

Endpoint.publish("http://localhost:8089/myservice", new MyWebService());

Kết quả là bạn có thể xem WSDL tại URL đã đăng ký và nếu bạn có SoapUI hoặc bất kỳ ứng dụng khách SOAP nào khác, bạn cũng có thể thử nghiệm và sử dụng dịch vụ web của mình.

Mặt khác, một servlet được sử dụng để vận chuyển các yêu cầu và phản hồi HTTP . Nó có thể được sử dụng để viết một ứng dụng web với JSP và HTML, hoặc để phục vụ các phản hồi XML và JSON (như trong một dịch vụ RESTful) và tất nhiên cũng để nhận và trả lại các thông điệp SOAP. Bạn có thể coi nó như một lớp bên dưới các dịch vụ web . Các Servlet có tiêu chuẩn riêng của chúng, hiện là Đặc điểm kỹ thuật Java Servlet Phiên bản 4.0

Một cách tiếp cận thực tế và toàn diện hơn là viết một dịch vụ web với một khuôn khổ và xuất bản nó trên một máy chủ ứng dụng hoặc vùng chứa servlet như Tomcat hoặc JBoss. Trong trường hợp này, bạn sẽ sử dụng Servlet để xử lý việc truyền tải các yêu cầu HTTP truyền các thông điệp SOAP hoặc REST của bạn.

Ví dụ, để viết một dịch vụ web với công nghệ servlet, bạn có thể sử dụng JAX-WS (ví dụ: cho SOAP). Để viết các dịch vụ RESTful, bạn có thể sử dụng JAX-RS (với triển khai tham chiếu là Jersey ), hoặc cách khác, bạn có thể sử dụng Spring WebMVC , nhưng theo tôi biết đó không phải là mục đích chính của khung này và Jersey đáng kể là dễ sử dụng hơn.

Về câu hỏi thứ hai: Các @Controllerchú thích là một mùa xuân cụ khuôn mẫu chú thích mà nói với mùa xuân điều gì đó về những gì đậu của bạn có nghĩa vụ phải làm. Chính xác thì phương thức của bộ điều khiển sẽ trả về là gì tùy thuộc vào việc triển khai thực tế các phương thức của bạn, bạn có thể định cấu hình Spring để trả về văn bản thuần túy, HTML, JSON, XML, dữ liệu nhị phân hoặc những gì bạn muốn.

Một lưu ý bên cạnh, một lớp được chú thích @Controllerchưa phải là một servlet, nó chỉ đơn giản là một bean. Cách bạn sử dụng các servlet chủ yếu phụ thuộc vào Framework mà bạn sử dụng. Ví dụ, khi bạn sử dụng Spring, công việc của servlet được thực hiện bởi Springs DispatcherServlet, công việc này sẽ chuyển tiếp các yêu cầu đến đúng bean. Nếu bạn sử dụng Tomcat, thì bạn có thể trực tiếp viết các servlet của riêng mình bằng cách phân lớp con đơn giản javax.servlet.http.HttpServletvà ghi đè lên các phương thức cần thiết, chẳng hạn như các phương thức doGetphản hồi các yêu cầu HTTP GET từ trình duyệt của bạn.


3
"REST hoặc SOAP làm giao thức của nó" ... Nhưng REST không phải là một giao thức !!
Không phải lỗi.

3
Nói một cách mạnh mẽ thì không phải, nó là một mô hình lập trình. Tôi đã sửa lại công thức của mình để phản ánh điều đó.
lanoxx

@lanoxx Mục tiêu của dịch vụ Web là giúp tích hợp một ứng dụng doanh nghiệp với ứng dụng khác một cách dễ dàng, giả sử những ứng dụng đó mới cần giao tiếp với nhau. Tích hợp ứng dụng doanh nghiệp .
trao đổi quá mức

Trên Java Servlet đặc điểm kỹ thuật (nay là 4.0) liên kết là chết, bây giờ có thể được tìm thấy trên một trang home / github mới tại javaee.github.io/servlet-spec/DOWNLOADS.html
Manohar Reddy Poreddy

43

Những gì bạn đang mô tả là một ứng dụng web , trong đó con người sử dụng trình duyệt để tương tác với hệ thống phần mềm.

Một dịch vụ web là một cách cho các hệ thống phần mềm để giao tiếp với nhau sử dụng HTTP và XML hoặc JSON, mà không cần bất kỳ con người có liên quan.

Một servlet là một cách Java-cụ thể của văn bản phần mềm đáp ứng các yêu cầu HTTP. Spring MVC tóm tắt rất nhiều chi tiết triển khai để giúp việc viết các ứng dụng web dễ dàng hơn, nhưng sử dụng các servlet dưới vỏ bọc.


kiểu lập trình ứng dụng web cũng có thể được sử dụng để các hệ thống phần mềm giao tiếp với nhau, nhưng tôi cho rằng đó không phải là cách lập trình có cấu trúc và không phải là tiêu chuẩn được sử dụng trong ngành CNTT.
Mohamed Iqzas

10

Ý kiến ​​của tôi là Dịch vụ Web định nghĩa mức độ trừu tượng cao hơn, chẳng hạn như một số chức năng dành riêng cho doanh nghiệp. Trong khi Servlet chỉ là một thành phần thực thi phần mềm chịu trách nhiệm vận chuyển dữ liệu.

Việc triển khai Dịch vụ Web thường dựa vào servlet để nhận dữ liệu. Tuy nhiên, nó cũng có thể sử dụng lớp tùy chỉnh của nó để xử lý dữ liệu giao thức.

@Controller có lẽ liên quan nhiều đến Dịch vụ Web hơn là servlet, một lần nữa, là một cách để thực hiện truyền tải.


1
@Controllerlà một phần của khuôn khổ Spring Web MVC (đó là C), vì vậy nó chắc chắn không phải là một thứ dịch vụ web, nhưng cũng không liên quan chặt chẽ đến các servlet.
biziclop

Tôi đồng ý, bản thân @Controller không phải là một dịch vụ web. Nhưng cá nhân tôi có xu hướng sử dụng @Controller thường xuyên như một điểm cuối cho các dịch vụ REST. Tôi nghi ngờ rằng đó là cách sử dụng Spring MVC ít phổ biến hơn.
Alex Gitelman

3

Sự khác biệt rõ ràng nhất giữa Servlet và Web Service là: Bạn truy cập vào servlet thông qua HTTP trong khi truy cập Dịch vụ Web thông qua SOAP (Giao thức truy cập đối tượng đơn giản). Tuy nhiên, trên thực tế, bạn không thể gọi trực tiếp một servlet, bạn chỉ có thể mở kết nối URL và đặt một số tham số vào servlet nếu người gọi ra khỏi ứng dụng của bạn. Và bạn không thể hạn chế những thông số mà người gọi có thể đặt. Người gọi cũng không biết servlet của bạn có thể nhận những tham số nào. Vì vậy, bạn nên sử dụng dịch vụ web để cung cấp API cho các ứng dụng khác, tệp WSDL của dịch vụ web của bạn có thể cung cấp cho người gọi đủ thông tin để gọi dịch vụ web của bạn.


2

Servlet là một trình xử lý truy vấn HTTP. Bạn có thể làm những gì bạn muốn với các truy vấn đến của mình. Một servlet chạy trên JVM.

Một dịch vụ web được gắn với một giao thức ít nhiều cứng nhắc: Một giao diện (API) được xác định với các phương thức có sẵn và các đối số của chúng và các giá trị trả về cho dịch vụ.

Giao diện này được hiển thị bằng cách sử dụng các cơ chế giao thức. Các giao thức này là bất khả tri về máy chủ sẽ chạy dịch vụ: bạn có thể xác định cùng một dịch vụ web bằng PHP, Java, C # hoặc ngôn ngữ của riêng bạn. Bạn chỉ cần có một đoạn mã có thể hiểu được các truy vấn cho giao thức và có thể tạo ra các câu trả lời mà khách hàng có thể đọc được.

Ví dụ SOAP là một giao thức dịch vụ web: Wikipedia định nghĩa:

SOAP, ban đầu được định nghĩa là Giao thức Truy cập Đối tượng Đơn giản, là một đặc tả giao thức để trao đổi thông tin có cấu trúc trong việc triển khai các Dịch vụ Web trong mạng máy tính.


2

Các dịch vụ web hoạt động ở cấp độ cao hơn các dịch vụ. Servlet là API đơn giản và cung cấp khả năng ghi các thành phần phía máy chủ.

Ví dụ RESTfull là một Dịch vụ Web chứa nhiều "chức năng" khác cùng với servlet. Để triển khai, chúng tôi có thể định nghĩa web.xml là:

<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>jersey.rest.test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>

không phải là cái gì ngoài một servlet


2

Dịch vụ Web sử dụng lớp ServletContainer mà lại là một lớp Servlet, lớp này xử lý yêu cầu theo cách rõ ràng và có cấu trúc. REST là viết tắt của REpresentational STateless Protocol. Ở đây yêu cầu sẽ không lưu trữ bất kỳ dữ liệu nào.

Dịch vụ Web REST hỗ trợ các phương thức HTTP

  1. GET - Thường để tìm nạp dữ liệu.
  2. ĐĂNG - Để chèn Đối tượng mới.
  3. PUT - Để cập nhật Đối tượng hiện có.
  4. XÓA -Để xóa đối tượng.

Chúng tôi có thể ánh xạ bất kỳ số lượng URL nào tới lớp Dịch vụ Web có thể có bất kỳ loại phương thức HTTP nào.

Mặt khác, có thể chỉ có 1 ánh xạ URL có thể được thực hiện cho mỗi servlet. Mặc dù yêu cầu cuối có thể đạt được với sự trợ giúp của các điều kiện tham số yêu cầu, nhưng việc sử dụng servlet ngày nay sẽ không cung cấp một cách rõ ràng.

Trong webservice, chúng ta có thể xác định đường dẫn URL ở cấp Lớp cũng như cấp Phương thức , cho phép chúng ta viết mã theo cách có cấu trúc hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.