В чем разница между этими двумя? Я нашел несколько результатов в Google, ничего убедительного.
Вот следующий вопрос:
Скажем, я создаю веб-приложение spring mvc, аннотирую пару классов с помощью аннотации @Controller и создаю что-то, что будет успешно передавать некоторую информацию из внешнего интерфейса -> внутреннего интерфейса и наоборот, и, возможно, некоторая база данных может быть задействована на стороне сервера.
Как бы вы это назвали? Отдых веб-службы или сервлета или чего-то еще?
java
web-services
spring
rest
terminology
Гэндальф ШтормВорона
источник
источник
Ответы:
Веб - сервис это услуга , которая предоставляет методы обслуживания для своих клиентов , используя либо парадигму программирования 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 из вашего браузера.источник
Вы описываете веб-приложение , в котором человек использует браузер для взаимодействия с программной системой.
Веб - сервис является для систем программного обеспечения для связи друг с другом , используя HTTP и XML или JSON, без каких - либо людей , участвующих.
Сервлет является Java-специфическим способом написания программного обеспечения , который отвечает на HTTP - запросы. Spring MVC абстрагируется от многих деталей реализации, чтобы упростить написание веб-приложений, но использует скрытые сервлеты.
источник
Я считаю, что веб-служба определяет абстракцию более высокого уровня, такую как некоторые бизнес-функции. В то время как сервлет - это просто компонент программной реализации, отвечающий за транспортировку данных.
Реализация веб-службы обычно полагается на сервлет для получения данных. Однако он также может использовать свой собственный уровень работы с данными протокола.
@Controller, вероятно, больше связан с веб-службой, чем сервлет, который, опять же, является способом реализации транспорта.
источник
@Controller
является частью среды Spring Web MVC (это C), так что это определенно не веб-сервис, но и не тесно связан с сервлетами.Наиболее очевидное различие между сервлетом и веб-службой заключается в следующем: вы обращаетесь к сервлету через HTTP, а доступ к веб-службе через SOAP (простой протокол доступа к объектам). Но на самом деле вы не можете напрямую вызвать сервлет, вы можете только открыть URL-соединение и передать какой-либо параметр сервлету, если вызывающий находится вне вашего приложения. И нельзя ограничивать, какие параметры может ставить звонилка. Вызывающий также не знает, какие параметры может получать ваш сервлет. Итак, вам лучше использовать веб-службу для предоставления API другим приложениям, файл WSDL вашей веб-службы может предоставить вызывающему объекту достаточно информации для вызова вашей веб-службы.
источник
Сервлет - это обработчик HTTP-запросов. Вы можете делать все, что хотите, со своими входящими запросами. Сервлет запускается на JVM.
Веб-служба связана с более или менее жестким протоколом: интерфейс (API) определяется доступными методами, их аргументами и возвращаемыми значениями для службы.
Этот интерфейс предоставляется с использованием механизмов протокола. Эти протоколы не зависят от хоста, на котором будет запущена служба: вы можете определить ту же веб-службу, используя PHP, Java, C # или свой собственный язык. Вам нужно только иметь фрагмент кода, способный понимать запросы протокола и выдавать ответы, читаемые клиентом.
Например, SOAP - это протокол веб-службы: определение в Википедии:
источник
Веб-службы работают на более высоком уровне, чем сервлеты. Сервлеты - это простой 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>
что не что иное, как сервлет
источник
Веб-служба использует класс ServletContainer, который снова является классом сервлета, который обрабатывает запрос чистым и структурированным способом. REST расшифровывается как REpresentational STateless Protocol. Здесь запрос не будет хранить никаких данных.
Веб-служба REST поддерживает методы HTTP.
Мы можем сопоставить любое количество URL-адресов с классом веб-службы, который может иметь любой тип HTTP-методов.
С другой стороны, для каждого сервлета может быть выполнено только одно отображение URL. Хотя конечное требование может быть достигнуто с помощью условий параметров запроса, но использование сервлетов в настоящее время не обеспечивает чистого пути.
В веб-сервисе мы можем определить путь URL-адреса на уровне класса, а также на уровне метода , что позволяет нам кодировать более структурированным способом.
источник