В чем разница между этими двумя? Я нашел несколько результатов в Google, ничего убедительного.
Вот следующий вопрос:
Скажем, я создаю веб-приложение spring mvc, аннотирую пару классов с помощью аннотации @Controller и создаю что-то, что будет успешно передавать некоторую информацию из внешнего интерфейса в> серверную часть и наоборот, и, возможно, некоторая база данных может быть задействована на задней стороне.
Как бы вы это назвали? Отдых веб-службы или сервлета или что-то еще?
Небольшой совет: если вы не знаете, что такое сервлет, вы, вероятно, столкнетесь с проблемой Spring mvc (с аннотациями). Более простое решение (vanilla servlet + jdbc), вероятно, поможет вам быстрее изучить основы. biziclop 09.05.2011
Если сервлет имеет только одно значимое поведение и этот сервлет сопоставлен с явным URL-адресом, я не вижу причин, по которым (1) параметры GET или POST не могут быть отправлены сервлету (2) Ответ сервлета может заключаться в возврате нагрузки XML с соответствующим набором типов MIME (3), что не равносильно веб-службе в академическом смысле? 8bitjunkie 08.01.2014
@GandalfStormCrow С сервлетом фактические данные, которые передаются, являются не данными, а HTML-документом. html документ больше подходит для таких запросов, как 1) получить документ 2) отобразить документ, от человека к компьютеру. Но нужна была связь между приложениями, не зависящая от машины. Итак, веб-сервис говорит о передаче данных с использованием xml поверх http. overexchange 30.12.2017
Веб-служба - это служба, которая предоставляет методы обслуживания своим клиентам, используя для связи парадигму программирования REST или протокол SOAP. Есть несколько способов реализовать веб-службу. Самый простой способ написать веб-службу - это написать класс и аннотировать его аннотациями @WebService и @WebMethod из javax.jws, а затем запустить его из main-метода с помощью:
Endpoint.publish("http://localhost:8089/myservice", new MyWebService());
В результате вы можете просматривать WSDL по зарегистрированному URL-адресу, и если у вас есть SoapUI или любой другой клиент SOAP, вы также можете протестировать и использовать свою веб-службу.
С другой стороны, сервлет используется для передачи запросов и ответов HTTP. Его можно использовать для написания веб-приложения с JSP и HTML или для обслуживания ответов XML и JSON (как в службе RESTful) и, конечно, также для получения и возврата сообщений SOAP. Вы можете думать об этом как о уровне ниже веб-служб. Сервлеты имеют свой собственный стандарт, который в настоящее время является версией спецификации сервлетов Java. 4.0
Более комплексный и практичный подход - написать веб-службу с фреймворком и опубликовать ее на сервере приложений или в контейнере сервлетов, таком как Tomcat или JBoss. В этом случае вы должны использовать сервлет для обработки транспорта HTTP-запросов, которые передают ваши сообщения SOAP или REST.
Чтобы написать веб-службу с технологией сервлетов, вы можете, например, использовать JAX-WS (например, для SOAP). Чтобы писать службы RESTful, вы можете использовать JAX-RS (эталонная реализация - Jersey), или вы можете использовать Spring WebMVC, но, насколько мне известно, это не основная цель этой структуры, и Джерси значительно проще в использовании.
Относительно второго вопроса: аннотация @Controller - это стереотипная аннотация Spring, которая сообщает Spring что-то о том, что должен делать ваш bean-компонент. Какой именно метод контроллера вернет, зависит от фактической реализации ваших методов, вы можете настроить Spring для возврата простого текста, HTML, JSON, XML, двоичных данных или чего угодно.
Примечание сбоку: класс, помеченный знаком @Controller, еще не является сервлетом, это просто bean-компонент. Как вы используете сервлеты, в основном зависит от используемой вами платформы. Например, когда вы используете Spring, задание сервлета выполняется Springs DispatcherServlet, который, в свою очередь, перенаправляет запросы к правильным bean-компонентам. Если вы используете Tomcat, вы можете напрямую писать свои собственные сервлеты, просто создав подкласс класса javax.servlet.http.HttpServlet и перезаписав необходимые методы, такие как doGet, который отвечает на HTTP-запросы GET из вашего браузера.
Ответ 2 · рейтинг 43 · artbristol
Вы описываете веб-приложение, в котором человек использует браузер для взаимодействия с программной системой.
Веб-сервис - это способ для программных систем взаимодействовать друг с другом с помощью HTTP, XML или JSON без участия людей.
Сервлет - это специфичный для Java способ написания программного обеспечения, которое отвечает на HTTP-запросы. Spring MVC абстрагируется от многих деталей реализации, чтобы упростить написание веб-приложений, но использует скрытые сервлеты.
Ответ 3 · рейтинг 10 · Alex Gitelman
Я считаю, что веб-служба определяет абстракцию более высокого уровня, такую как некоторые специфические бизнес-функции. В то время как сервлет - это всего лишь компонент программной реализации, отвечающий за транспортировку данных.
Реализация веб-службы обычно полагается на сервлет для получения данных. Однако он также может использовать свой собственный уровень работы с данными протокола.
@Controller, вероятно, больше связан с веб-службой, чем сервлет, который, опять же, является способом реализации транспорта.
Ответ 4 · рейтинг 3 · Chinni
Наиболее очевидное различие между сервлетом и веб-службой заключается в следующем: вы получаете доступ к сервлету через HTTP, а доступ к веб-службе через SOAP (простой протокол доступа к объектам). Но на самом деле вы не можете напрямую вызвать сервлет, вы можете только открыть URL-соединение и указать какой-либо параметр сервлету, если вызывающий находится вне вашего приложения. И нельзя ограничивать, какие параметры может ставить звонилка. Вызывающий также не знает, какие параметры может получать ваш сервлет. Итак, вам лучше использовать веб-службу для предоставления API другим приложениям, файл WSDL вашей веб-службы может предоставить вызывающей стороне достаточно информации для вызова вашей веб-службы.
Ответ 5 · рейтинг 2 · Guillaume
Сервлет - это обработчик HTTP-запросов. Вы можете делать все, что хотите, со своими входящими запросами. Сервлет запускается на JVM.
Веб-служба привязана к более или менее жесткому протоколу: интерфейс (API) определяется доступными методами, их аргументами и возвращаемыми значениями для службы.
Этот интерфейс предоставляется с использованием механизмов протокола. Эти протоколы не зависят от хоста, на котором будет запущена служба: вы можете определить ту же веб-службу, используя PHP, Java, C # или свой собственный язык. Вам нужно только иметь часть кода, способную понимать запросы протокола и давать ответы, читаемые клиентом.
Например, SOAP - это протокол веб-службы: определение в Википедии:
SOAP, первоначально определенный как протокол простого доступа к объектам, представляет собой спецификацию протокола для обмена структурированной информацией при реализации веб-служб в компьютерных сетях.
Ответ 6 · рейтинг 2 · dgm
Веб-сервисы работают на более высоком уровне, чем сервлеты. Сервлеты - это простой API, который предоставляет возможности для написания компонентов на стороне сервера.
Например, RESTfull - это веб-служба, которая наряду с сервлетом содержит множество других "функций". Для развертывания мы можем определить web.xml как -
Веб-служба использует класс ServletContainer, который снова является классом сервлета, который обрабатывает запрос чистым и структурированным способом. REST расшифровывается как REpresentational STateless Protocol. Здесь запрос не будет хранить никаких данных.
Веб-служба REST поддерживает методы HTTP.
GET - обычно для получения данных.
POST - чтобы вставить новый объект.
PUT - для обновления существующего объекта.
DELETE - удалить объект.
Мы можем сопоставить любое количество URL-адресов с классом веб-службы, который может иметь любой тип HTTP-методов.
С другой стороны, для каждого сервлета может быть выполнено только одно сопоставление URL-адресов. Хотя конечное требование может быть достигнуто с помощью условий параметров запроса, но использование сервлетов в настоящее время не обеспечивает чистого пути.
В веб-сервисе мы можем определить URL-путь на уровне класса, а также на уровне метода, что позволяет нам кодировать более структурированным образом.