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
và @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.
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
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
@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