サーブレットとWebサービスの違い


88

これら2つの違いは何ですか?Googleでの結果はほとんどありませんでした。

これはフォローアップの質問です:

いくつかのクラスに@Controllerアノテーションを付けたSpring MVC Webアプリを作成し、フロントエンドからバックエンドに情報を正常に転送できるものを作成するとします。バックエンド側にデータベースが含まれている可能性があります。

なんていうの?Webサービス、サーブレット、または他の何かを休止しますか?


6
アドバイス:サーブレットが何であるかがわからない場合、(注釈付きの)Spring MVCで苦労する可能性があります。より単純なソリューション(vanilla servlet + jdbc)は、基本をより早く学ぶのに役立つでしょう。
biziclop

1
サーブレットに意味のある動作が1つだけあり、そのサーブレットが明示的なURLにマップされている場合、(1)GETまたはPOSTパラメータをサーブレットに送信できなかった理由はわかりません(2)サーブレットの応答は、適切なMIMEタイプセット(3)を持つXMLは、これが学術的な意味でのWebサービスと同等ではないということですか。
8bitjunkie 2014年

@GandalfStormCrowサーブレットでは、渡される実際のデータはデータではなくhtmlドキュメントです。HTMLドキュメントは、1)ドキュメントを取得する 2)人間からコンピュータへのドキュメントを表示するなどのリクエストに適しています。しかし、必要なのは、マシンに依存しない方法でのアプリ間通信でした。したがって、Webサービスは、httpを介したxmlを使用したデータのデータ転送について話します。
17

回答:


90

Webサービスは RESTプログラミングパラダイム又は通信のためのSOAPプロトコルのいずれかを使用して、クライアントにサービス方法を提供するサービスです。Webサービスを実装する方法はいくつかあります。Webサービスを作成する最も簡単な方法は、クラス@WebService@WebMethod作成しjavax.jws、それにとの注釈を付けてから、次のように- mainメソッドから起動することです。

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

その結果、登録されたURLでWSDLを表示でき、SoapUIまたはその他のSOAPクライアントがある場合は、Webサービスをテストして使用することもできます。

サーブレット一方は、輸送に使用されたHTTP要求と応答。これは、JSPとHTMLを使用してWebアプリケーションを記述したり、XMLおよびJSON応答(RESTfulサービスの場合と同様)を提供したり、SOAPメッセージを送受信したりするために使用できます。これは、Webサービスの下の1つのレイヤーと考えることができます。サーブレットには、現在Javaサーブレット仕様バージョン4.0である独自の標準があります。

より包括的で実用的なアプローチは、フレームワークを使用してWebサービスを作成し、それをアプリケーションサーバーまたはTomcatやJBossなどのサーブレットコンテナーに公開することです。この場合、サーブレットを使用して、SOAPまたはRESTメッセージを送信するHTTPリクエストのトランスポートを処理します。

サーブレットテクノロジを使用してWebサービスを作成するには、たとえばJAX-WS(SOAPなど)を使用できます。RESTfulサービスを作成するには、JAX-RS(参照実装はJersey)を使用するSpring WebMVCを使用できますが、私が知る限り、これはこのフレームワークの主な目的ではなく、Jerseyはかなり使いやすい。

2番目の質問について:@Controllerアノテーションは、Spring固有のステレオタイプアノテーションであり、Beanが行うことになっていることについてSpringに通知します。コントローラーのメソッドが正確に何を返すかは、メソッドの実際の実装によって異なります。プレーンテキスト、HTML、JSON、XML、バイナリデータなど、必要なものを返すようにSpringを構成できます。

ちなみに、注釈が付けられたクラス@Controllerはまだサーブレットではなく、単なるBeanです。サーブレットの使用方法は、主に使用するフレームワークに依存します。たとえば、Springを使用する場合、サーブレットジョブはSpringによって実行され、SpringはDispatcherServlet要求を正しいBeanに転送します。Tomcatを使用している場合は、javax.servlet.http.HttpServletクラスをサブクラス化doGetし、ブラウザからのHTTP GETリクエストに応答するなどの必要なメソッドを上書きするだけで、独自のサーブレットを直接作成できます。


3
「プロトコルとしてのRESTまたはSOAP」...しかし、RESTはプロトコルではありません!!
バグではない

3
それを強く言えば、それはプログラミングのパラダイムです。私はそれを反映するように私の処方を修正しました。
lanoxx

@lanoxx Webサービスの目標は、1つのエンタープライズアプリケーションを他のエンタープライズアプリケーションと簡単に統合できるようにすることです。エンタープライズアプリケーション統合
オーバーエクスチェンジ'30

上記のJavaサーブレット仕様(現在は4.0)のリンクは機能していません。新しいホームページ/ githubのjavaee.github.io/servlet-spec/DOWNLOADS.htmlにあります
Manohar Reddy Poreddy '

43

あなたが説明しているのは、人間がブラウザを使用してソフトウェアシステムと対話するWebアプリケーションです

Webサービスは、ソフトウェアシステムが関与どんな人間なしで、HTTPとXMLやJSONを使用して相互に通信するための方法です。

サーブレットは、 HTTPリクエストに応答することをソフトウェアを書くのJava固有の方法です。Spring MVCは、Webアプリケーションの作成を容易にするために、実装の詳細の多くを抽象化しますが、内部ではサーブレットを使用します。


Webアプリケーションスタイルのプログラミングは、ソフトウェアシステムが相互に通信するためにも使用できますが、構造化されたプログラミング方法ではなく、IT業界で使用されている標準ではないと思います。
Mohamed Iqzas 2016年

10

私の考えでは、Webサービスは、ビジネス固有の機能など、より高いレベルの抽象化を定義していると思います。サーブレットは、データの転送を担当するソフトウェア実装コンポーネントにすぎません。

Webサービスの実装は、通常、データの受信をサーブレットに依存します。ただし、プロトコルデータを処理するカスタムレイヤーを使用することもできます。

@Controllerは、おそらくトランスポートを実装する方法であるサーブレットよりもWebサービスに関連している可能性があります。


1
@Controllerは、Spring Web MVCフレームワーク(Cです)の一部であるため、Webサービスではありませんが、サーブレットと密接に関連しています。
biziclop

私は同意します、@ Controllerはそれ自体では決してWebサービスではありません。しかし個人的には、@ ControllerをRESTサービスのエンドポイントとして頻繁に使用する傾向があります。Spring MVCのあまり一般的ではない使用法ではないかと思います。
Alex Gitelman、2011年

3

サーブレットとWebサービスの最も明らかな違いは、次のとおりです。SOAP(Simple Object Access Protocol)を介してWebサービスにアクセスしながら、HTTPを介してサーブレットにアクセスします。ただし、実際には、サーブレットを直接呼び出すことはできません。呼び出し元がアプリケーションの外にいる場合は、URL接続を開いてサーブレットにパラメータを設定することしかできません。また、発信者が設定できるパラメータを制限することはできません。呼び出し元は、サーブレットが受け取ることができるパラメータも知りません。したがって、Webサービスを使用して他のアプリケーションにAPIを提供する方がよいでしょう。WebサービスのWSDLファイルは、Webサービスを呼び出すための十分な情報を呼び出し元に提供できます。


2

サーブレットは、HTTPクエリハンドラです。着信クエリを使用して、必要な操作を実行できます。JVM上で実行されるサーブレット。

Webサービスは多かれ少なかれ厳密なプロトコルに関連付けられています。インターフェース(API)は、サービスの使用可能なメソッドとその引数および戻り値で定義されます。

このインターフェイスは、プロトコルメカニズムを使用して公開されます。これらのプロトコルは、サービスを実行するホストに依存しません。PHP、Java、C#、または独自の言語を使用して同じWebサービスを定義できます。プロトコルのクエリを理解し、クライアントが読み取り可能な回答を生成できるコードが必要です。

たとえば、SOAPはWebサービスプロトコルです:ウィキペディアの定義:

SOAPはもともとSimple Object Access Protocolとして定義されていましたが、コンピュータネットワークでのWebサービスの実装において構造化された情報を交換するためのプロトコル仕様です。


2

Webサービスは、サーブレットよりも高いレベルで動作します。サーブレットはAPIであり、シンプルであり、サーバー側コンポーネントを作成する機能を提供します。

たとえばRESTfullは、サーブレットとともに他の多くの「機能」を含むWebサービスです。デプロイするには、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

Webサービスは、サーブレットクラスであるServletContainerクラスを使用します。このクラスは、リクエストをクリーンで構造化された方法で処理します。RESTはREpresentational STateless Protocolの略です。ここでは、リクエストはデータを保存しません。

REST WebサービスはHTTPメソッドをサポートします

  1. GET-通常はデータをフェッチします。
  2. POST-新しいオブジェクトを挿入します。
  3. PUT- 既存のオブジェクトを更新します。
  4. DELETE -Toは、オブジェクトを削除します。

任意のタイプのHTTPメソッドを持つことができるWebサービスクラスに任意の数のURLをマッピングできます。

一方、サーブレットごとに実行できるURLマッピングは1つだけです。最後の要件はリクエストパラメータの条件を使用して達成できますが、現在サーブレットを使用してもクリーンな方法は提供されません。

Webサービスでは、クラスレベルメソッドレベルでURLパスを定義できるため、より構造化された方法でコーディングできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.