Różnica między serwletem a usługą sieciową


88

Jaka jest różnica między tymi dwoma? Znalazłem kilka wyników w google nic rozstrzygającego.

Oto pytanie uzupełniające:

Powiedzmy, że tworzę wiosenną aplikację internetową MVC, opisując kilka klas z adnotacją @Controller i tworzę coś, co z powodzeniem przeniesie niektóre informacje z interfejsu -> zaplecza i na odwrót, a być może część bazy danych może być zaangażowana po stronie zaplecza.

Jak byś to nazwał? Odpocząć usługa sieciowa, serwlet czy coś innego?


6
Jedna rada: jeśli nie wiesz, co to jest serwlet, prawdopodobnie będziesz miał problemy z wiosennym MVC (z adnotacjami). Prostsze rozwiązanie (serwlet waniliowy + jdbc) prawdopodobnie pomoże ci szybciej nauczyć się podstaw.
biziclop

1
Jeśli serwlet ma tylko jedno znaczące zachowanie i ten aplet jest odwzorowany na wyraźny adres URL, nie widzę powodu, dla którego (1) parametry GET lub POST nie mogły zostać przesłane do serwletu (2) Odpowiedzią serwletu może być zwrócenie obciążenia XML z odpowiednim typem MIME ustawionym (3), że nie jest to równoznaczne z usługą sieciową w sensie akademickim?
8bitjunkie

@GandalfStormCrow W przypadku serwletu rzeczywiste przekazywane dane nie są danymi, lecz dokumentem HTML. Dokument html jest bardziej odpowiedni dla żądań takich jak 1) uzyskanie dokumentu 2) wyświetlenie dokumentu , od człowieka do komputera. Jednak potrzebą była komunikacja aplikacja-aplikacja w sposób niezależny od maszyny. Tak więc usługa sieciowa mówi o przesyłaniu danych przy użyciu XML przez http.
nadmierna zmiana

Odpowiedzi:


90

Serwis internetowy to usługa, która dostarcza metody usług dla swoich klientów przy użyciu paradygmat programowania REST lub protokołu SOAP do komunikacji. Istnieje kilka sposobów implementacji usługi sieciowej. Najprostszym sposobem napisania usługi internetowej byłoby napisanie klasy i dodanie do niej adnotacji @WebServicei @WebMethodadnotacji z javax.jws, a następnie uruchomienie jej z main-method z:

Endpoint.publish("http://localhost:8089/myservice", new MyWebService());

W rezultacie możesz przeglądać WSDL pod zarejestrowanym adresem URL, a jeśli masz SoapUI lub innego klienta SOAP, możesz również przetestować i używać swojej usługi sieciowej.

Z drugiej strony serwlet jest używany do transportu żądań i odpowiedzi HTTP . Może być używany do pisania aplikacji internetowych z JSP i HTML lub do obsługi odpowiedzi XML i JSON (jak w usłudze RESTful) i oczywiście także do odbierania i zwracania wiadomości SOAP. Możesz myśleć o tym jako o jednej warstwie poniżej usług internetowych . Serwlety mają swój własny standard, którym jest obecnie specyfikacja serwletów Java w wersji 4.0

Bardziej kompleksowym i praktycznym podejściem jest napisanie usługi internetowej z frameworkiem i opublikowanie jej na serwerze aplikacji lub w kontenerze serwletów, takim jak Tomcat lub JBoss. W tym przypadku użyłbyś serwletu do obsługi transportu żądań HTTP, które przesyłają twoje komunikaty SOAP lub REST.

Aby napisać serwis WWW z technologią serwletów, możesz na przykład użyć JAX-WS (np. Dla SOAP). Aby napisać usługi RESTful, możesz użyć JAX-RS (z implementacją referencyjną to Jersey ) lub alternatywnie możesz użyć Spring WebMVC , ale o ile wiem, nie jest to głównym celem tego frameworka, a Jersey jest znacznie łatwiejszy w użyciu.

Odnośnie drugiego pytania: @ControllerAdnotacja jest adnotacją stereotypową specyficzną dla Springa, która mówi Springowi coś o tym, co ma robić twoja fasola. To, co dokładnie metoda kontrolera zwróci, zależy od faktycznej implementacji twoich metod, możesz skonfigurować Spring tak, aby zwracał zwykły tekst, HTML, JSON, XML, dane binarne lub cokolwiek chcesz.

Uwaga z boku, klasa, do której dodano adnotację, @Controllernie jest jeszcze serwletem, to po prostu ziarno. Sposób korzystania z serwletów zależy głównie od używanej struktury. Na przykład, gdy używasz Springa, zadanie serwletu jest wykonywane przez Springs, DispatcherServletktóre z kolei przekazuje żądania do odpowiednich komponentów bean. Jeśli używasz Tomcata, możesz bezpośrednio pisać własne serwlety, po prostu tworząc podklasy javax.servlet.http.HttpServletklasy i nadpisując niezbędne metody, takie jak te, doGetktóre odpowiadają na żądania HTTP GET z przeglądarki.


3
„REST lub SOAP jako jego protokół” ... Ale REST nie jest protokołem !!
To nie jest błąd

3
Zdecydowanie nie, jest to paradygmat programowania. Poprawiłem moje sformułowanie, aby to odzwierciedlić.
lanoxx

@lanoxx Celem usługi internetowej jest ułatwienie integracji jednej aplikacji korporacyjnej z drugą, przy założeniu, że te aplikacje od niedawna będą musiały ze sobą rozmawiać. Integracja aplikacji korporacyjnych .
nadmierna zmiana


43

To, co opisujesz, to aplikacja internetowa , w której człowiek używa przeglądarki do interakcji z systemem oprogramowania.

Serwis internetowy to sposób na systemy oprogramowania do komunikowania się ze sobą za pomocą protokołów HTTP i XML lub JSON, bez ludzi zaangażowanych.

Aplet jest Java specyficzny sposób pisania programu, który reaguje na żądania HTTP. Spring MVC usuwa wiele szczegółów implementacji, aby ułatwić pisanie aplikacji internetowych, ale używa serwletów pod okładkami.


Styl programowania aplikacji internetowych może być również używany w systemach oprogramowania do komunikacji między sobą, ale zakładam, że nie jest to ustrukturyzowany sposób programowania i nie jest standardem używanym w branży IT.
Mohamed Iqzas

10

Wydaje mi się, że usługa sieciowa definiuje abstrakcję wyższego poziomu, taką jak niektóre funkcje specyficzne dla biznesu. Podczas gdy Servlet to tylko komponent implementacyjny oprogramowania odpowiedzialny za transport danych.

Implementacja usługi sieci Web zwykle polegałaby na serwlecie do odbierania danych. Jednak równie dobrze może używać swojej niestandardowej warstwy obsługi danych protokołu.

@Controller jest prawdopodobnie bardziej związany z usługą sieciową niż serwlet, który jest ponownie sposobem implementacji transportu.


1
@Controllerjest częścią struktury Spring Web MVC (jest to C), więc zdecydowanie nie jest usługą sieciową, ale nie jest też ściśle związana z serwletami.
biziclop

Zgadzam się, @Controller w żaden sposób nie jest sam w sobie usługą sieciową. Ale osobiście często używam @Controller jako punktu końcowego dla usług REST. Podejrzewam, że jest to mniej popularne użycie Spring MVC.
Alex Gitelman

3

Najbardziej oczywista różnica między serwletem a usługą sieciową jest następująca: dostęp do serwletu odbywa się za pośrednictwem protokołu HTTP, a do usługi sieciowej za pośrednictwem protokołu SOAP (Simple Object Access Protocol). Ale w rzeczywistości nie możesz bezpośrednio wywołać apletu, możesz tylko otworzyć połączenie URL i umieścić jakiś parametr w serwlecie, jeśli wywołujący jest poza twoją aplikacją. I nie możesz ograniczać parametrów, które może umieścić dzwoniący. Wzywający nie wie również, jakie parametry może otrzymać twój aplet. Więc lepiej użyj usługi sieciowej, aby zapewnić API dla innych aplikacji, plik WSDL Twojej usługi internetowej może dostarczyć wywołującemu wystarczającą ilość informacji do wywołania Twojej usługi sieciowej.


2

Aplet jest programem obsługi zapytań HTTP. Możesz robić, co chcesz z przychodzącymi zapytaniami. Aplet działający w maszynie JVM.

Usługa internetowa jest powiązana z mniej lub bardziej sztywnym protokołem: interfejs (API) jest definiowany z dostępnymi metodami i ich argumentami oraz wartościami zwracanymi dla usługi.

Ten interfejs jest udostępniany za pomocą mechanizmów protokołu. Te protokoły są niezależne od hosta, na którym będzie działać usługa: możesz zdefiniować tę samą usługę sieciową za pomocą PHP, Java, C # lub własnego języka. Wystarczy mieć fragment kodu, który będzie rozumiał zapytania dotyczące protokołu i był w stanie wygenerować odpowiedzi czytelne dla klienta.

Na przykład SOAP to protokół usługi sieciowej: definicja z Wikipedii:

SOAP, pierwotnie zdefiniowany jako Simple Object Access Protocol, to specyfikacja protokołu służąca do wymiany ustrukturyzowanych informacji w implementacji usług internetowych w sieciach komputerowych.


2

Usługi WWW działają na wyższym poziomie niż serwlety. Serwlety to API, które jest proste i zapewnia możliwości pisania komponentów po stronie serwera.

Na przykład RESTfull to usługa internetowa, która zawiera wiele innych „funkcji” wraz z serwletem. Aby wdrożyć, możemy zdefiniować plik web.xml jako -

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

który jest tylko serwletem


2

Usługa sieciowa używa klasy ServletContainer, która ponownie jest klasą Servlet, która obsługuje żądanie w czysty i uporządkowany sposób. REST oznacza REpresentational STateless Protocol. Tutaj żądanie nie przechowuje żadnych danych.

Usługa sieci Web REST obsługuje metody HTTP

  1. POBIERZ - Zwykle do pobierania danych.
  2. POST - aby wstawić nowy obiekt.
  3. PUT - aby zaktualizować istniejący obiekt.
  4. DELETE -Aby usunąć obiekt.

Możemy zmapować dowolną liczbę adresów URL do klasy usługi sieci Web, która może mieć dowolny typ metod HTTP.

Z drugiej strony, dla każdego serwletu można wykonać tylko jedno mapowanie adresu URL. Chociaż wymaganie końcowe można osiągnąć za pomocą warunków parametru żądania, ale używanie serwletów obecnie nie zapewnia czystego sposobu.

W usłudze internetowej możemy zdefiniować ścieżkę URL na poziomie klasy, a także na poziomie metody , co pozwala nam kodować w bardziej uporządkowany sposób.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.