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?
java
web-services
spring
rest
terminology
Gandalf StormCrow
źródło
źródło
Odpowiedzi:
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
@WebService
i@WebMethod
adnotacji zjavax.jws
, a następnie uruchomienie jej zmain
-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:
@Controller
Adnotacja 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ę,
@Controller
nie 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,DispatcherServlet
któ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 podklasyjavax.servlet.http.HttpServlet
klasy i nadpisując niezbędne metody, takie jak te,doGet
które odpowiadają na żądania HTTP GET z przeglądarki.źródło
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.
źródło
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.
źródło
@Controller
jest 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.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.
źródło
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:
źródło
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
źródło
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
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.
źródło