Sunucu uygulaması ve web hizmeti arasındaki fark


89

Bu 2 arasındaki fark nedir? Google'da kesin olmayan birkaç sonuç buldum.

İşte bir takip sorusu:

Spring mvc web uygulaması oluşturduğumu, @Controller notuyla birkaç sınıfa açıklama ekledim ve bazı bilgileri ön uçtan -> arka uçtan ve tam tersinden başarılı bir şekilde aktaracak bir şey oluşturduğumu ve belki de arka uç tarafında bazı veri tabanlarının dahil olabileceğini varsayalım.

Sen buna ne diyorsun? Rest web servisi veya servlet veya başka bir şey?


6
Bir tavsiye: bir sunucu uygulamasının ne olduğunu bilmiyorsanız, yaylı mvc ile (ek açıklamalarla) mücadele edebilirsiniz. Daha basit bir çözüm (vanilla servlet + jdbc) muhtemelen temel bilgileri daha hızlı öğrenmenize yardımcı olacaktır.
biziclop

1
Bir sunucu uygulamacığının yalnızca bir anlamlı davranışı varsa ve bu sunucu uygulaması açık bir URL ile eşlenmişse, neden (1) GET veya POST parametrelerinin Sunucuya gönderilemediğine dair hiçbir neden göremiyorum (2) Sunucu uygulamasının yanıtı bir yük döndürmek olabilir. Bunun akademik anlamda bir Web Hizmeti ile aynı olmadığını belirten uygun bir MIME türü kümesi (3) olan XML?
8bitjunkie

@GandalfStormCrow Sunucu uygulamasında, aktarılan gerçek veriler veri değil, html belgesidir. html belgesi, 1) belgeyi al 2) belgeyi insandan bilgisayara görüntüleme gibi istekler için daha uygundur . Ancak ihtiyaç, makineden bağımsız bir şekilde uygulama-uygulama iletişimiydi. Dolayısıyla, web hizmeti http üzerinden xml kullanılarak veri aktarımı hakkında konuşur.
41'de aşırı değişim

Yanıtlar:


91

Bir web hizmeti DİNLENME programlama paradigmasını veya iletişim için SOAP protokolünü kullanarak müşterilerine hizmet yöntemlerini sağlayan bir hizmettir. Bir web hizmetini uygulamanın birkaç yolu vardır. Bir web hizmeti yazmak için en basit yolu, bir sınıf ve açıklama yazmaya olacağını @WebServiceve @WebMethodgelen ek açıklamalar javax.jwsve ardından a dan başlatınmain ile kullanılan yöntem:

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

Sonuç, görüntüleyebilmenizdir. WSDL kayıtlı URL'den ve SoapUI varsa veya herhangi bir başka SOAP istemci ayrıca test etmek ve web hizmeti kullanabilirsiniz.

Öte yandan, HTTP isteklerini ve yanıtlarını taşımak için bir sunucu uygulaması kullanılır . JSP'ler ve HTML ile bir web uygulaması yazmak veya XML ve JSON yanıtları (bir RESTful hizmetinde olduğu gibi) sunmak ve tabii ki SOAP mesajlarını almak ve döndürmek için de kullanılabilir. Web servislerinin altında bir katman olarak düşünebilirsiniz . Servletlerin şu anda Java Servlet Specification Version 4.0 olan kendi standartları vardır.

Daha kapsamlı ve pratik bir yaklaşım, çerçeveli bir web hizmeti yazmak ve bunu Tomcat veya JBoss gibi bir uygulama sunucusunda veya servlet kapsayıcısında yayınlamaktır. Bu durumda, SOAP veya REST mesajlarınızı ileten HTTP isteklerinin taşınmasını işlemek için bir Servlet kullanırsınız.

Servlet teknolojisine sahip bir web hizmeti yazmak için örneğin JAX-WS'yi kullanabilirsiniz (örn. SOAP için). RESTful hizmetleri yazmak için, JAX- RS'yi (referans uygulaması Jersey'dir ) veya alternatif olarak Spring WebMVC'yi kullanabilirsiniz. , ancak bildiğim kadarıyla bu çerçevenin ana amacı bu değil ve Jersey oldukça önemli. kullanımı daha kolay.

İkinci soru ile ilgili olarak: @ControllerEk açıklama bir Pınar Fasulye yapmak gerekiyordu ne hakkında Bahar şey söyler belirli klişe açıklama. Bir denetleyicinin bir yönteminin tam olarak ne döndüreceği, yöntemlerinizin gerçek uygulamasına bağlıdır; Spring'i düz metin, HTML, JSON, XML, ikili veri veya istediğiniz her şeyi döndürecek şekilde yapılandırabilirsiniz.

Yandaki bir not, üzerinde not verilen bir sınıf @Controllerhenüz bir sunucu uygulaması değil, sadece bir fasulyedir. Sunucu uygulamalarını nasıl kullandığınız, esas olarak kullandığınız Çerçeveye bağlıdır. Örneğin, Yay'ı kullandığınızda, servlet işi, DispatcherServlettalepleri doğru çekirdeklere ileten Springs tarafından yapılır . Tomcat kullanıyorsanız, o zaman javax.servlet.http.HttpServletsınıfın alt sınıflarını oluşturarak ve doGettarayıcınızdan HTTP GET isteklerine yanıt veren gibi gerekli yöntemlerin üzerine yazarak doğrudan kendi sunucu uygulamalarınızı yazabilirsiniz .


3
"Protokolü olarak REST veya SABUN" ... Ama REST bir protokol değildir !!
Hata değil

3
Kesinlikle değil, bir programlama paradigmasıdır. Formülasyonumu bunu yansıtacak şekilde düzelttim.
lanoxx

@lanoxx Web hizmetinin amacı, bir kurumsal uygulamanın diğeriyle kolayca entegre edilmesine yardımcı olmaktır, bu uygulamaların yeni bir şekilde birbirleriyle konuşması gerektiğini varsayarsak. Kurumsal uygulama entegrasyonu .
34'te aşırı değişim

Java Servlet spesifikasyonunun yukarısında (şimdi 4.0) bağlantısı yok, şimdi javaee.github.io/servlet-spec/DOWNLOADS.html
Manohar Reddy Poreddy

43

Tanımladığınız şey , bir insanın bir yazılım sistemiyle etkileşim kurmak için bir tarayıcı kullandığı bir web uygulamasıdır .

Bir web hizmeti yazılım sistemleri dahil hiçbir insanlar olmadan, HTTP ve XML veya JSON kullanarak birbirleriyle iletişim kurmak için kullanılan bir yöntemdir.

Bir servlet HTTP isteklerine yanıt vermesini yazılım yazma Java özgü bir yoldur. Spring MVC, web uygulamaları yazmayı kolaylaştırmak için birçok uygulama ayrıntısını özetler, ancak kapakların altında servletler kullanır.


Web uygulaması programlama stili, yazılım sistemlerinin birbirleriyle iletişim kurması için de kullanılabilir, ancak bunun yapılandırılmış bir programlama yöntemi olmadığını ve BT endüstrisinde kullanılan standart olmadığını varsayıyorum.
Mohamed Iqzas

10

Benim görüşüm, Web Hizmetinin bazı işletmeye özgü işlevler gibi daha yüksek düzeyde soyutlamayı tanımlaması olacaktır. Servlet sadece verilerin taşınmasından sorumlu bir yazılım uygulama bileşenidir.

Web Hizmeti uygulaması, genellikle veri almak için sunucu uygulamasına dayanır. Ancak, protokol verileriyle ilgili özel katmanını da kullanabilir.

@Controller, muhtemelen taşımayı gerçekleştirmenin bir yolu olan servlet'ten daha çok Web Hizmeti ile ilgilidir.


1
@ControllerSpring Web MVC çerçevesinin bir parçasıdır (bu C'dir), bu nedenle kesinlikle bir web hizmeti değildir, ancak sunucu uygulamalarıyla da yakından ilgili değildir.
biziclop

Kabul ediyorum, @Controller hiçbir şekilde kendi başına bir web hizmeti değildir. Ama şahsen @Controller'ı REST hizmetleri için bir uç nokta olarak sık sık kullanma eğilimindeyim. Spring MVC'nin daha az popüler bir kullanımı olduğundan şüpheleniyorum.
Alex Gitelman

3

Servlet ile Web Hizmeti arasındaki en belirgin fark şudur: Sunucu uygulamasına HTTP aracılığıyla erişirken, Web Hizmetine SOAP (Basit Nesne Erişim Protokolü) aracılığıyla erişirsiniz. Ancak, aslında, bir sunucu uygulamasını doğrudan çağıramazsınız, yalnızca URL bağlantısını açabilir ve arayan uygulamanızın dışındaysa sunucu uygulamasına bazı parametreler koyabilirsiniz. Ve arayanın hangi parametreleri koyabileceğini kısıtlayamazsınız. Arayan, sunucu uygulamasının hangi parametreleri alabileceğini de bilmez. Bu nedenle, diğer uygulamalara API sağlamak için web hizmetini kullanmanız daha iyi olur, web hizmetinizin WSDL dosyası, arayan kişiye web hizmetinizi çağırması için yeterli bilgi verebilir.


2

Sunucu uygulaması bir HTTP sorgu işleyicisidir. Gelen sorgularınız ile istediğinizi yapabilirsiniz. JVM üzerinde çalışan bir sunucu uygulaması.

Bir web hizmeti, az çok katı bir protokole bağlıdır: Bir arayüz (API), mevcut yöntemler ve bunların bağımsız değişkenleri ve hizmet için dönüş değerleri ile tanımlanır.

Bu arayüz, protokol mekanizmaları kullanılarak açığa çıkarılır. Bu protokoller, hizmeti çalıştıracak ana bilgisayar hakkında agnostiktir: Aynı web hizmetini PHP, Java, C # veya kendi dilinizi kullanarak tanımlayabilirsiniz. Yalnızca protokole yönelik sorguları anlayabilen ve istemci tarafından okunabilir yanıtlar üretebilen bir kod parçasına ihtiyacınız vardır.

Örneğin SOAP bir web hizmeti protokolüdür: Wikipedia tanımı:

Başlangıçta Basit Nesne Erişim Protokolü olarak tanımlanan SOAP, bilgisayar ağlarında Web Hizmetlerinin uygulanmasında yapılandırılmış bilgi alışverişi için bir protokol spesifikasyonudur.


2

Web hizmetleri, sunucu uygulamalarına göre daha yüksek bir düzeyde çalışır. Servletler, basit olan ve sunucu tarafı bileşenleri yazma yetenekleri sağlayan API'dir.

Örneğin RESTfull, sunucu uygulamasıyla birlikte diğer birçok "işlevselliği" içeren bir Web Hizmetidir. Dağıtmak için web.xml'yi şu şekilde tanımlayabiliriz:

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

bu bir servletten başka bir şey değildir


2

Web Hizmeti, isteği temiz ve yapılandırılmış bir şekilde ele alan yine bir Servlet sınıfı olan ServletContainer sınıfını kullanır. REST, Temsili Devletsiz Protokol anlamına gelir. Burada istek herhangi bir veriyi saklamaz.

REST Web Hizmeti, HTTP yöntemlerini destekler

  1. GET - Genellikle veri almak için.
  2. POST - Yeni Nesne eklemek için.
  3. PUT - Mevcut Nesneyi güncellemek için.
  4. SİL - Nesneyi silmek için.

Herhangi bir tür HTTP yöntemine sahip olabilen herhangi bir sayıda URL'yi Web Hizmeti sınıfına eşleyebiliriz.

Öte yandan, her bir sunucu uygulaması için yalnızca 1 URL eşlemesi yapılabilir. Nihai gereksinim, istek parametresi koşullarının yardımıyla elde edilebilir, ancak günümüzde servlet kullanmak temiz bir yol sağlamayacaktır.

Web hizmetinde, URL yolunu Sınıf düzeyinde ve Yöntem düzeyinde tanımlayabiliriz , bu da daha yapısal bir şekilde kodlamamıza olanak tanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.