Різниця між сервлетом і веб-сервісом


88

Яка різниця між цими 2? Я знайшов кілька результатів у Google, нічого не остаточного.

Ось наступне запитання:

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

Як би ви це назвали? Залишити веб-сервіс, сервлет чи щось інше?


6
Порада: якщо ви не знаєте, що таке сервлет, ви, швидше за все, будете боротися з пружинним mvc (з анотаціями). Більш просте рішення (ванільний сервлет + jdbc), ймовірно, допоможе швидше вивчити основи.
biziclop

1
Якщо сервлет має лише одну значущу поведінку, і цей сервлет зіставляється з явною URL-адресою, я не бачу причини, чому (1) параметри GET або POST не можуть бути надіслані в сервлет (2) Відповідь сервлета може бути повернення завантаження XML із відповідним типом MIME (3), що це не рівнозначно веб-службі в академічному розумінні?
8bitjunkie

@GandalfStormCrow З сервлетом фактичні дані, які передаються, не є даними, а HTML-документом. html-документ більше підходить для таких запитів, як 1) отримати документ 2) відобразити документ , від людини до комп'ютера. Але необхідність полягала в спілкуванні додатків у додатку машинно незалежним способом. Отже, веб-служба розповідає про передачу даних за допомогою xml через http.
переобмін

Відповіді:


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, щоб повертати звичайний текст, HTML, JSON, XML, двійкові дані або те, що ви хочете.

Примітка збоку, клас, до якого додано примітки, @Controllerще не є сервлетом, це просто квасоля. Те, як ви використовуєте сервлети, в основному залежить від того, що ви використовуєте. Наприклад, коли ви використовуєте Spring, завдання сервлета виконується Springs, DispatcherServletяке, в свою чергу, пересилає запити до правильних компонентів. Якщо ви використовуєте Tomcat, ви можете безпосередньо писати власні сервлети, просто підкласуючи javax.servlet.http.HttpServletклас і перезаписуючи необхідні методи, такі як doGetвідповідь на запити HTTP GET з вашого браузера.


3
"або REST, або SOAP як його протокол" ... Але REST - це не протокол !!
Не помилка

3
Точно кажучи, це не так, це парадигма програмування. Я виправив своє формулювання, щоб це відобразити.
lanoxx

@lanoxx Мета веб-служби полягає в тому, щоб допомогти легко інтегрувати один корпоративний додаток з іншим, припускаючи, що ці додатки знову потребують спілкування між собою. Інтеграція корпоративних додатків .
переобмін

Вище специфікації Java Servlet (зараз 4.0) мертве, тепер його можна знайти на новій домашній сторінці / github за адресою javaee.github.io/servlet-spec/DOWNLOADS.html
Манохар Редді Поредді

43

Те, що ви описуєте, - це веб-додаток , де людина використовує браузер для взаємодії з програмною системою.

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

Сервлет є Java-специфічним способом написання програмного забезпечення , який відповідає на HTTP - запити. Spring MVC абстрагує багато деталей реалізації, щоб полегшити написання веб-додатків, але використовує сервлети під обкладинками.


Стиль програмування веб-додатків також може бути використаний для програмних систем для взаємодії між собою, але я припускаю, що це не структурований спосіб програмування і не є стандартом, що використовується в ІТ-галузі.
Мохамед Ікзас,

10

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

Впровадження веб-сервісу, як правило, покладається на сервлет для отримання даних. Однак він також може використовувати власний рівень роботи з даними протоколу.

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

що не що інше, як сервлет


2

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

Веб-служба REST підтримує методи HTTP

  1. GET - Зазвичай для отримання даних.
  2. POST - Щоб вставити новий об'єкт.
  3. PUT - Оновити існуючий Об’єкт.
  4. ВИДАЛИТИ - Щоб видалити Об’єкт.

Ми можемо зіставити будь-яку кількість URL-адрес із класом Web Service, який може мати будь-який тип методів HTTP.

З іншого боку, для кожного сервлета може бути зроблено лише 1 відображення URL-адреси. Хоча кінцевої вимоги можна досягти за допомогою параметрів запиту, але використання сервлета в наш час не забезпечить чистого способу.

У веб-сервісі ми можемо визначити шлях URL на рівні класу , а також на рівні методу , що дозволяє нам структурувати код.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.