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

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

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

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

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


person Gandalf StormCrow    schedule 08.05.2011    source источник
comment
Небольшой совет: если вы не знаете, что такое сервлет, вы, вероятно, столкнетесь с проблемой Spring mvc (с аннотациями). Более простое решение (vanilla servlet + jdbc), вероятно, поможет вам быстрее изучить основы.   -  person biziclop    schedule 09.05.2011
comment
Если сервлет имеет только одно значимое поведение и этот сервлет сопоставлен с явным URL-адресом, я не вижу причин, по которым (1) параметры GET или POST не могут быть отправлены сервлету (2) Ответ сервлета может заключаться в возврате нагрузки XML с соответствующим набором типов MIME (3), что не равносильно веб-службе в академическом смысле?   -  person 8bitjunkie    schedule 08.01.2014
comment
@GandalfStormCrow С сервлетом фактические данные, которые передаются, являются не данными, а HTML-документом. html документ больше подходит для таких запросов, как 1) получить документ 2) отобразить документ, от человека к компьютеру. Но нужна была связь между приложениями, не зависящая от машины. Итак, веб-сервис говорит о передаче данных с использованием xml поверх http.   -  person overexchange    schedule 30.12.2017


Ответы (7)


Веб-служба - это служба, которая предоставляет методы обслуживания своим клиентам, используя для связи парадигму программирования 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 из вашего браузера.

person lanoxx    schedule 13.12.2012
comment
либо REST, либо SOAP в качестве протокола ... Но REST - это не протокол !! - person Not a bug; 28.01.2015
comment
Строго говоря, это не так, это парадигма программирования. Я исправил свою формулировку, чтобы отразить это. - person lanoxx; 30.01.2015
comment
@lanoxx Цель Web-сервиса - помочь легко интегрировать одно корпоративное приложение с другим, предполагая, что этим новым приложениям необходимо взаимодействовать друг с другом. Интеграция корпоративных приложений. - person overexchange; 30.12.2017
comment
Ссылка на указанную выше спецификацию сервлета Java (теперь 4.0) мертва, теперь ее можно найти на новой домашней странице / github по адресу javaee.github.io/servlet-spec/DOWNLOADS.html - person Manohar Reddy Poreddy; 28.08.2018

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

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

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

person artbristol    schedule 09.05.2011
comment
Стиль программирования веб-приложений также может использоваться для программных систем для взаимодействия друг с другом, но я предполагаю, что это не структурированный способ программирования и не стандарт, используемый в ИТ-индустрии. - person Mohamed Iqzas; 30.05.2016

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

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

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

person Alex Gitelman    schedule 08.05.2011
comment
@Controller является частью среды Spring Web MVC (это C), так что это определенно не веб-сервис, но и не тесно связан с сервлетами. - person biziclop; 09.05.2011
comment
Я согласен, @Controller никоим образом не является веб-службой. Но лично я часто использую @Controller в качестве конечной точки для служб REST. Я подозреваю, что это менее популярное использование Spring MVC. - person Alex Gitelman; 09.05.2011

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

person Chinni    schedule 22.08.2013

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

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

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

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

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

person Guillaume    schedule 09.05.2011

Веб-сервисы работают на более высоком уровне, чем сервлеты. Сервлеты - это простой 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>

which is none but a servlet

person dgm    schedule 14.12.2012

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

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

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

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

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

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

person Kranti123    schedule 28.01.2016