Разница между сервлетом и веб-службой

88

В чем разница между этими двумя? Я нашел несколько результатов в Google, ничего убедительного.

Вот следующий вопрос:

Скажем, я создаю веб-приложение spring mvc, аннотирую пару классов с помощью аннотации @Controller и создаю что-то, что будет успешно передавать некоторую информацию из внешнего интерфейса -> внутреннего интерфейса и наоборот, и, возможно, некоторая база данных может быть задействована на стороне сервера.

Как бы вы это назвали? Отдых веб-службы или сервлета или чего-то еще?

Гэндальф ШтормВорона
источник
6
Небольшой совет: если вы не знаете, что такое сервлет, вы, вероятно, столкнетесь с проблемой spring mvc (с аннотациями). Более простое решение (vanilla servlet + jdbc), вероятно, поможет вам быстрее изучить основы.
biziclop
1
Если сервлет имеет только одно значимое поведение и этот сервлет сопоставлен с явным URL-адресом, я не вижу причин, по которым (1) параметры GET или POST не могут быть отправлены сервлету (2) Ответ сервлета может состоять в том, чтобы вернуть загрузку XML с соответствующим набором типов MIME (3), что не равносильно веб-службе в академическом смысле?
8bitjunkie 08
@GandalfStormCrow С сервлетом фактические данные, которые передаются, - это не данные, а документ html. html-документ больше подходит для таких запросов, как 1) получение документа 2) отображение документа от человека к компьютеру. Но необходимо было общение между приложениями независимо от машины. Итак, веб-сервис говорит о передаче данных с использованием xml через http.
overxchange

Ответы:

90

Веб - сервис это услуга , которая предоставляет методы обслуживания для своих клиентов , используя либо парадигму программирования 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 (эталонной реализацией является Джерси ), либо, в качестве альтернативы, вы можете использовать Spring WebMVC , но, насколько мне известно, это не основная цель этой структуры, и Джерси значительно проще в использовании.

Что касается второго вопроса: @Controllerаннотация представляет собой аннотацию стереотипа, специфичную для Spring, которая сообщает Spring что-то о том, что должен делать ваш bean-компонент. Какой именно метод контроллера вернет, зависит от фактической реализации ваших методов, вы можете настроить Spring для возврата простого текста, HTML, JSON, XML, двоичных данных или чего угодно.

Примечание сбоку: класс, который аннотирован, @Controllerеще не является сервлетом, это просто bean-компонент. Как вы используете сервлеты, в основном зависит от используемой вами платформы. Например, когда вы используете Spring, задание сервлета выполняется Springs, DispatcherServletкоторый, в свою очередь, перенаправляет запросы правильным bean-компонентам. Если вы используете Tomcat, вы можете напрямую писать свои собственные сервлеты, просто создав подклассы javax.servlet.http.HttpServletкласса и перезаписав необходимые методы, например, doGetкоторые отвечают на HTTP-запросы GET из вашего браузера.

Lanoxx
источник
3
"либо REST, либо SOAP в качестве протокола" ... Но REST - это не протокол !!
Не ошибка
3
Строго говоря, это не так, это парадигма программирования. Я исправил свою формулировку, чтобы отразить это.
lanoxx
@lanoxx Цель веб-службы - помочь легко интегрировать одно корпоративное приложение с другим, предполагая, что этим новым приложениям необходимо взаимодействовать друг с другом. Интеграция корпоративных приложений .
overxchange
43

Вы описываете веб-приложение , в котором человек использует браузер для взаимодействия с программной системой.

Веб - сервис является для систем программного обеспечения для связи друг с другом , используя HTTP и XML или JSON, без каких - либо людей , участвующих.

Сервлет является Java-специфическим способом написания программного обеспечения , который отвечает на HTTP - запросы. Spring MVC абстрагируется от многих деталей реализации, чтобы упростить написание веб-приложений, но использует скрытые сервлеты.

artbristol
источник
Стиль программирования веб-приложений также может использоваться для программных систем для связи друг с другом, но я предполагаю, что это не структурированный способ программирования и не стандарт, используемый в ИТ-индустрии.
Мохамед Икзас
10

Я считаю, что веб-служба определяет абстракцию более высокого уровня, такую ​​как некоторые бизнес-функции. В то время как сервлет - это просто компонент программной реализации, отвечающий за транспортировку данных.

Реализация веб-службы обычно полагается на сервлет для получения данных. Однако он также может использовать свой собственный уровень работы с данными протокола.

@Controller, вероятно, больше связан с веб-службой, чем сервлет, который, опять же, является способом реализации транспорта.

Алексей Гительман
источник
1
@Controllerявляется частью среды Spring Web MVC (это C), так что это определенно не веб-сервис, но и не тесно связан с сервлетами.
biziclop
Я согласен, @Controller никоим образом не является веб-службой. Но лично я часто использую @Controller в качестве конечной точки для служб REST. Я подозреваю, что это менее популярное использование Spring MVC.
Алекс Гительман
3

Наиболее очевидное различие между сервлетом и веб-службой заключается в следующем: вы обращаетесь к сервлету через HTTP, а доступ к веб-службе через SOAP (простой протокол доступа к объектам). Но на самом деле вы не можете напрямую вызвать сервлет, вы можете только открыть URL-соединение и передать какой-либо параметр сервлету, если вызывающий находится вне вашего приложения. И нельзя ограничивать, какие параметры может ставить звонилка. Вызывающий также не знает, какие параметры может получать ваш сервлет. Итак, вам лучше использовать веб-службу для предоставления API другим приложениям, файл WSDL вашей веб-службы может предоставить вызывающему объекту достаточно информации для вызова вашей веб-службы.

Чинни
источник
2

Сервлет - это обработчик HTTP-запросов. Вы можете делать все, что хотите, со своими входящими запросами. Сервлет запускается на JVM.

Веб-служба связана с более или менее жестким протоколом: интерфейс (API) определяется доступными методами, их аргументами и возвращаемыми значениями для службы.

Этот интерфейс предоставляется с использованием механизмов протокола. Эти протоколы не зависят от хоста, на котором будет запущена служба: вы можете определить ту же веб-службу, используя PHP, Java, C # или свой собственный язык. Вам нужно только иметь фрагмент кода, способный понимать запросы протокола и выдавать ответы, читаемые клиентом.

Например, SOAP - это протокол веб-службы: определение в Википедии:

SOAP, первоначально определенный как протокол простого доступа к объектам, представляет собой спецификацию протокола для обмена структурированной информацией при реализации веб-служб в компьютерных сетях.

Гийом
источник
2

Веб-службы работают на более высоком уровне, чем сервлеты. Сервлеты - это простой API, который предоставляет возможности для написания компонентов на стороне сервера.

Например, RESTfull - это веб-служба, которая наряду с сервлетом содержит множество других «функций». Для развертывания мы можем определить web.xml как -

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

что не что иное, как сервлет

dgm
источник
2

Веб-служба использует класс ServletContainer, который снова является классом сервлета, который обрабатывает запрос чистым и структурированным способом. REST расшифровывается как REpresentational STateless Protocol. Здесь запрос не будет хранить никаких данных.

Веб-служба REST поддерживает методы HTTP.

  1. GET - обычно для получения данных.
  2. POST - чтобы вставить новый объект.
  3. PUT - обновить существующий объект.
  4. DELETE - удалить объект.

Мы можем сопоставить любое количество URL-адресов с классом веб-службы, который может иметь любой тип HTTP-методов.

С другой стороны, для каждого сервлета может быть выполнено только одно отображение URL. Хотя конечное требование может быть достигнуто с помощью условий параметров запроса, но использование сервлетов в настоящее время не обеспечивает чистого пути.

В веб-сервисе мы можем определить путь URL-адреса на уровне класса, а также на уровне метода , что позволяет нам кодировать более структурированным способом.

Кранти123
источник