2011-05-08 50 views
74

Sự khác biệt giữa 2 dịch vụ 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.Sự khác biệt giữa servlet và dịch vụ web

Đây là một theo dõi câu hỏi:

Nói rằng tôi tạo Spring MVC ứng dụng web vài chú thích của các lớp học với @Controller chú thích và tạo ra cái gì đó sẽ chuyển thành công một số thông tin từ kết thúc trước -> trở lại cuối cùng và ngược lại và có lẽ một số cơ sở dữ liệu có thể được tham gia vào mặt sau.

Bạn sẽ gọi điều đó là gì? Phần còn lại dịch vụ web hoặc servlet hay cái gì khác?

+6

Lời khuyên: nếu bạn không biết servlet là gì, bạn có khả năng đấu tranh với mvc mùa xuân (có chú thích). Một giải pháp đơn giản hơn (vanilla servlet + jdbc) có thể sẽ giúp bạn tìm hiểu những điều cơ bản nhanh hơn. – biziclop

+1

Nếu 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 thấy lý do tại sao (1) các tham số GET hoặc POST không thể gửi tới Servlet (2) Phản hồi của Servlet có thể trả về tải của XML với một bộ kiểu MIME thích hợp (3) rằng điều này không tương đương với một Dịch vụ Web theo nghĩa hàn lâm? – 8bitjunkie

+0

@GandalfStormCrow Với servlet dữ liệu thực tế đang được chuyển không phải là dữ liệu mà là một tài liệu html. tài liệu html phù hợp hơn với 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à ứng dụng truyền thông ứng dụng một cách độc lập 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 cách sử dụng xml trên http. – overexchange

Trả lời

10

Việc tôi thực hiện nó sẽ là Dịch vụ web định nghĩa trừu tượng mức cao hơn như một số chức năng cụ thể của doanh nghiệp. Trong khi Servlet chỉ là một thành phần thực hiện phần mềm chịu trách nhiệm cho việc vận chuyển dữ liệu.

Triển khai Dịch vụ web thường sẽ 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ó đối phó với dữ liệu giao thức.

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

+1

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

+0

Tôi đồng ý, @Controller là không có cách nào một dịch vụ web của chính nó. Nhưng cá nhân tôi có xu hướng sử dụng @Controller thường như là một điểm kết thúc cho các dịch vụ REST. Tôi nghi ngờ rằng nó là một cách sử dụng ít phổ biến hơn của Spring MVC. –

34

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

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

A servlet là cách viết riêng cho Java để đáp ứng các yêu cầu HTTP. Spring MVC tóm tắt rất nhiều chi tiết thực hiện để làm cho 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 các nắp.

+0

Ngắn, ngọt và chính xác. – lux

+0

phong cách ứng dụng web của lập trình cũng có thể được sử dụng cho 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. –

2

Một servlet là 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 gửi đến của bạn. Một servlet chạy trên JVM.

Dịch vụ web được gắn với giao thức cứng nhắc hơn hoặc ít hơn: Giao diện (API) được xác định với các phương thức có sẵn và đối số của chúng cũng như giá trị trả lại 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à không thuyết phục về máy chủ sẽ chạy dịch vụ: bạn có thể định nghĩa cùng một dịch vụ web bằng cách sử dụ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 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 xác định là đơn giản Object Access Protocol, là một giao thức đặc điểm kỹ thuật để trao đổi thông tin có cấu trúc trong việc thực hiện của Web Dịch vụ trong các mạng máy tính .

72

A dịch vụ web là dịch vụ cung cấp phương thức dịch vụ cho khách hàng sử dụng 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 dịch vụ web.Cách đơn giản nhất để viết một dịch vụ web sẽ được để viết một lớp và chú thích nó với @WebService@WebMethod chú thích từ javax.jws, và sau đó khởi động nó từ một -method main 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 SOAP nào khác, bạn cũng có thể kiểm tra và sử dụng dịch vụ web của mình.

Mặt khác, servlet được sử dụng để chuyển các yêu cầu HTTP và yêu cầu lại. Nó có thể được sử dụng để viết một ứng dụng web với các 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ả về các thông báo SOAP. Bạn có thể coi đó là một lớp bên dưới dịch vụ web. Servlets có tiêu chuẩn riêng của mình, hiện tại là Java Servlet Specification Version 3.1

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

Để viết một dịch vụ web bằng 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 việc thực hiện tham chiếu là Jersey), hoặc bạn có thể sử dụng Spring WebMVC, nhưng afaik không phải là mục đích chính của khung này và Jersey là đáng kể dễ sử dụng hơn.

Về câu hỏi thứ hai: Các @Controller chú thích là một Xuân cụ chú thích định kiến ​​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 phương thức của bộ điều khiển sẽ trả về phụ thuộc vào việc thực hiện các phương thức của bạn, bạn có thể cấu hình Spring để trả về văn bản thuần tuý, HTML, JSON, XML, dữ liệu nhị phân hoặc những gì bạn muốn.

Một ghi chú ở bên cạnh, một lớp được chú thích với @Controller chưa phải là một servlet, nó đơn giản là một bean. Cách bạn sử dụng servlet phụ thuộc chủ yếu vào Framework mà bạn sử dụng. Ví dụ, khi bạn sử dụng Spring, công việc servlet được thực hiện bởi Springs DispatcherServlet để chuyển tiếp các yêu cầu tới đú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 đơn giản phân lớp lớp javax.servlet.http.HttpServlet và ghi đè các phương thức cần thiết như doGet phản hồi các yêu cầu HTTP GET từ trình duyệt của bạn.

+2

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

+2

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

+0

@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ử các ứng dụng đó mới, cần phải nói chuyện với nhau. [Tích hợp ứng dụng doanh nghiệp] (https://en.wikipedia.org/wiki/Enterprise_application_integration). – overexchange

2

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

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

<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> 

đó là không nhưng một servlet

2

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 qua HTTP trong khi dịch vụ truy cập Web qua SOAP (Object đơn giản Giao thức truy cập). Nhưng, 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ố cho servlet nếu người gọi ra khỏi đơn đăng ký của bạn. Và bạn không thể hạn chế những thông số người gọi có thể đặt. Người gọi không biết những thông số nào servlet của bạn cũng có thể nhận được . 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

Dịch vụ web sử dụng lớp ServletContainer mà lại là lớp Servlet, xử lý yêu cầu theo cách gọn gà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 của hỗ trợ phương thức HTTP

  1. GET - Thông thường để lấy dữ liệu.
  2. POST - Để chèn đối tượng mới.
  3. PUT - Để cập nhật đối tượng hiện có.
  4. DELETE -Để xóa đối tượng.

Chúng tôi có thể ánh xạ bất kỳ số lượng URL nào đến 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, chỉ có thể thực hiện 1 ánh xạ URL cho mỗi servlet. Mặc dù yêu cầu cuối cùng 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 cách thức sạch sẽ.

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

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