web-dev-qa-db-ja.com

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

これら2つの違いは何ですか? google nothingの決定的な結果はほとんど見つかりませんでした。

フォローアップの質問は次のとおりです。

いくつかのクラスに@Controllerアノテーションを付けたSpring MVC Webアプリを作成し、フロントエンドからバックエンドへ、またはその逆に情報を正常に転送するものを作成するとします。

それを何と呼びますか? Webサービスやサーブレットなどを休めますか?

84

webサービスは、RESTプログラミングパラダイムまたはSOAPプロトコルを使用してクライアントにサービスメソッドを提供するサービスです。 Webサービスを実装するには、いくつかの方法があります。 Webサービスを記述する最も簡単な方法は、クラスを記述し、@WebServiceからの@WebMethodおよびjavax.jwsアノテーションを付けてから、mainから起動することです。 -method with:

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

その結果、登録済みURLで[〜#〜] wsdl [〜#〜]を表示でき、SoapUIまたは他のSOAPがある場合また、Webサービスをテストして使用することもできます。

一方、servletは、[〜#〜] http [〜#〜]リクエストおよび共振の転送に使用されます。 JSPおよびHTMLを使用してWebアプリケーションを作成したり、XMLおよびJSON応答(RESTfulサービスのように)を提供したり、もちろんSOAPメッセージを受信して​​返すためにも使用できます。 Webサービスの下の1層と考えることができます。サーブレットには独自の標準があり、現在は Javaサーブレット仕様バージョン4.

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

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

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

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

83
lanoxx

あなたが説明しているのはweb applicationで、人間がブラウザを使用してソフトウェアシステムとやり取りします。

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

servletは、HTTP要求に応答するソフトウェアを記述するJava固有の方法です。 Spring MVCは、Webアプリケーションの記述を容易にするために実装の詳細の多くを抽象化しますが、裏ではサーブレットを使用します。

41
artbristol

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

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

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

10
Alex Gitelman

サーブレットとWebサービスの最も明らかな違いは、HTTPを介してサーブレットにアクセスする一方で、SOAP(Simple Object Access Protocol)を介してWebサービスにアクセスします。しかし、実際には、サーブレットを直接呼び出すことはできません、呼び出し元がアプリケーションの外にある場合にのみURL接続を開き、サーブレットにパラメーターを配置できますが、呼び出し元が配置できるパラメーターを制限することはできません。 Webサービスを使用して他のアプリケーションにAPIを提供することをお勧めします。WebサービスのWSDLファイルは、呼び出し元にWebサービスを呼び出すのに十分な情報を提供できます。

3
Chinni

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
dgm

サーブレットはHTTPクエリハンドラです。受信したクエリで必要な処理を実行できます。 JVMで実行されるサーブレット。

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

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

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

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

2
Guillaume

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

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

  1. [〜#〜] get [〜#〜]-通常、データを取得します。
  2. [〜#〜] post [〜#〜]-新しいオブジェクトを挿入します。
  3. [〜#〜] put [〜#〜]-既存のオブジェクトを更新します。
  4. [〜#〜] delete [〜#〜]-オブジェクトを削除します。

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

一方、各サーブレットに対して実行できるURLマッピングは1つだけです。終了要件は要求パラメーター条件の助けを借りて達成することができますが、最近サーブレットを使用することはきれいな方法を提供しません。

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

2
Kranti123