これら2つの違いは何ですか?Googleでの結果はほとんどありませんでした。
これはフォローアップの質問です:
いくつかのクラスに@Controllerアノテーションを付けたSpring MVC Webアプリを作成し、フロントエンドからバックエンドに情報を正常に転送できるものを作成するとします。バックエンド側にデータベースが含まれている可能性があります。
なんていうの?Webサービス、サーブレット、または他の何かを休止しますか?
これら2つの違いは何ですか?Googleでの結果はほとんどありませんでした。
これはフォローアップの質問です:
いくつかのクラスに@Controllerアノテーションを付けたSpring MVC Webアプリを作成し、フロントエンドからバックエンドに情報を正常に転送できるものを作成するとします。バックエンド側にデータベースが含まれている可能性があります。
なんていうの?Webサービス、サーブレット、または他の何かを休止しますか?
回答:
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リクエストに応答するなどの必要なメソッドを上書きするだけで、独自のサーブレットを直接作成できます。
あなたが説明しているのは、人間がブラウザを使用してソフトウェアシステムと対話するWebアプリケーションです。
Webサービスは、ソフトウェアシステムが関与どんな人間なしで、HTTPとXMLやJSONを使用して相互に通信するための方法です。
サーブレットは、 HTTPリクエストに応答することをソフトウェアを書くのJava固有の方法です。Spring MVCは、Webアプリケーションの作成を容易にするために、実装の詳細の多くを抽象化しますが、内部ではサーブレットを使用します。
私の考えでは、Webサービスは、ビジネス固有の機能など、より高いレベルの抽象化を定義していると思います。サーブレットは、データの転送を担当するソフトウェア実装コンポーネントにすぎません。
Webサービスの実装は、通常、データの受信をサーブレットに依存します。ただし、プロトコルデータを処理するカスタムレイヤーを使用することもできます。
@Controllerは、おそらくトランスポートを実装する方法であるサーブレットよりもWebサービスに関連している可能性があります。
@Controller
は、Spring Web MVCフレームワーク(Cです)の一部であるため、Webサービスではありませんが、サーブレットと密接に関連しています。
サーブレットとWebサービスの最も明らかな違いは、次のとおりです。SOAP(Simple Object Access Protocol)を介してWebサービスにアクセスしながら、HTTPを介してサーブレットにアクセスします。ただし、実際には、サーブレットを直接呼び出すことはできません。呼び出し元がアプリケーションの外にいる場合は、URL接続を開いてサーブレットにパラメータを設定することしかできません。また、発信者が設定できるパラメータを制限することはできません。呼び出し元は、サーブレットが受け取ることができるパラメータも知りません。したがって、Webサービスを使用して他のアプリケーションにAPIを提供する方がよいでしょう。WebサービスのWSDLファイルは、Webサービスを呼び出すための十分な情報を呼び出し元に提供できます。
サーブレットは、HTTPクエリハンドラです。着信クエリを使用して、必要な操作を実行できます。JVM上で実行されるサーブレット。
Webサービスは多かれ少なかれ厳密なプロトコルに関連付けられています。インターフェース(API)は、サービスの使用可能なメソッドとその引数および戻り値で定義されます。
このインターフェイスは、プロトコルメカニズムを使用して公開されます。これらのプロトコルは、サービスを実行するホストに依存しません。PHP、Java、C#、または独自の言語を使用して同じWebサービスを定義できます。プロトコルのクエリを理解し、クライアントが読み取り可能な回答を生成できるコードが必要です。
たとえば、SOAPはWebサービスプロトコルです:ウィキペディアの定義:
SOAPはもともとSimple Object Access Protocolとして定義されていましたが、コンピュータネットワークでのWebサービスの実装において構造化された情報を交換するためのプロトコル仕様です。
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>
これはサーブレットに他なりません
Webサービスは、サーブレットクラスであるServletContainerクラスを使用します。このクラスは、リクエストをクリーンで構造化された方法で処理します。RESTはREpresentational STateless Protocolの略です。ここでは、リクエストはデータを保存しません。
REST WebサービスはHTTPメソッドをサポートします
任意のタイプのHTTPメソッドを持つことができるWebサービスクラスに任意の数のURLをマッピングできます。
一方、サーブレットごとに実行できるURLマッピングは1つだけです。最後の要件はリクエストパラメータの条件を使用して達成できますが、現在サーブレットを使用してもクリーンな方法は提供されません。
Webサービスでは、クラスレベルとメソッドレベルでURLパスを定義できるため、より構造化された方法でコーディングできます。