web-dev-qa-db-ja.com

サーブレットまたは@Controllerを使用する場合

いくつかのことを解決する必要があります。私はこれに対する答えを探していましたが、私の特定の質問に対する良い答えを見つけることができないようです(たとえば、この質問は答えをつついていました: サーブレットとWebサービスの違い )。

私の理解では、「MVC指向」のWebアプリケーションに「リクエスト処理」、別名「コントローラ」を実装する方法はいくつかあります。そのうちの2つは次のとおりです。

  1. A Java特定Servlet(つまり、Eclipseで、たとえば、[新規]-> [サーブレット]をクリックして作成したもの)、 「コントローラ」として使用されます。これはHttpServletを拡張し、doGetdoPostなどのメソッドを使用します。
  2. 注釈付きのSpring MVC@Controllerクラス(はい、DispatcherServletを使用)。これで@RequestMethodGET/POSTなど.

さて、私の質問に...

  • どちらを使用するのですか?
  • ある方法を他の方法よりも使用する一般的な利点はありますか? (一般的に、ある方法が他の方法よりも一般的に推奨されていますか?)

[EDIT]:キーワードを強調

26
Roger

あなたが言語を学ぶことに興味がある学生なら、私は今のところサーブレットを使います。サーブレットだけを使用してWebアプリを作成することもできますが、実際には、JSPも確認する必要があります。

JSPは、HTMLとスクリプト要素を混在させることができるサーブレットを記述する便利な方法です(ただし、Javaタグとel式を優先して、jsp内のコードを避けることをお勧めします)。サーブレットとしてコンパイルされることをカバーしていますが、面倒な印刷ステートメントをたくさん使用する必要がありません。

サーブレットとJSPについて少なくとも基本的な知識を持っていることが重要です。 Spring MVCは、サーブレットの上に構築された多くのフレームワークの1つであり、Webアプリケーションの作成作業を少し簡単にしようとします。基本的に、すべてのリクエストは フロントコントローラー として機能するDispatcherServletにマッピングされます。

その後、DispatcherServletは、注釈が着信要求と一致するコントローラーを呼び出します。これは、これらのマッピングをweb.xmlで自分で作成する必要があるよりも簡単です(サーブレット3.0ではサーブレットに注釈を付けることができます)。しかし、フォームフィールドのオブジェクトへのマッピング、jsr303アノテーションによるそのオブジェクトの検証、xmlまたはjsonへの入力と出力のマッピングなど、使用できる他の多くの利点も得られます。さらに、コアスプリングと緊密に統合されているため、簡単に配線できます。コントローラが呼び出すサービス。

サーブレットの上に構築された多数の競合するフレームワークがあることは注目に値します。 Spring MVCは最も人気のあるMVCの1つであるため、調査することをお勧めします。

21
Ben Thurley

サーブレットとSpring MVCコントローラーを使用して同じことを行うことができますが、Javaアプリケーションの異なるレベルで動作します

サーブレットはJ2EEフレームワークの一部であり、すべてのJavaアプリケーションサーバー(Tomcat、Jettyなど))は、サーブレットを実行するために構築されています。サーブレットは、J2EEスタックの「低レベル」レイヤーです。アプリケーションを実行するためにservlet.jarは必要ありません。アプリケーションサーバーにあらかじめパッケージ化されているためです。

Spring MVCコントローラは、物事を簡単にするためにサーブレット上に構築されたライブラリです。 Spring MVCは、フォームパラメーターからコントローラーメソッドパラメーターへのマッピング、バイナリフォーム送信の処理が容易になる(つまり、フォームがファイルをアップロードできる場合)などの組み込み機能を提供します。 Spring MVCコントローラーを実行するには、必要なjarをアプリケーションにパッケージ化する必要があります

「低レベル」にする必要がある場合は、サーブレットを使用する必要があります。例としては、パフォーマンス上の理由が考えられます。 Spring MVCは優れたパフォーマンスを発揮しますが、オーバーヘッドがあり、アプリケーションサーバーから可能な限りすべてを絞り出す必要がある場合(そして、dbなどの他のレイヤーをすでに調整している場合)は、サーブレットを使用します。 J2EE Web仕様の基礎を理解したい場合(つまり、教育目的で)、サーブレットを選択できます。

他のすべてのケースでは、Webフレームワークを選択できます/選択する必要があります。 Spring MVCはその1つです。 Spring MVCを使用すると、ホイール(つまり、バイナリフォーム管理、フォームパラメーターからBeanへの変換、パラメーターの検証など)を作り直す必要はありません。 Spring MVCのもう1つの利点は、1つのクラスでさまざまなURLやメソッドからの入力を簡単に管理できることです。サーブレットで同じことを行うことは可能ですが、コードはより複雑で読みにくくなります。私の意見では、Spring MVCはRESTサービスの構築と単純なアプリケーション(単純なフォームを持つWebアプリケーション)の管理に適していると思います。 Ajaxを使用した非常に複雑なフォーム、ネストされたフォーム、およびセッション状態とページ状態の両方を備えたアプリケーションを管理する必要がある場合、私のアドバイスは、コンポーネントベースのフレームワーク(たとえば Apache wicket など)に切り替えることです。

13
Giovanni

JSFとJSP、およびSpring MVCはサーブレット上に構築されています。直接HTMLを記述しなければならないため、サーブレットが動作するのが非常に「ナイス」ではないという問題。

Mordern Webテクノロジーを使用できる場合は、データベースからhttpに画像を書き込むなど、直接のhttp出力が必要な位置でサーブレットを使用します。

DipatcherservletまたはFacesServletと連携するSpringMVCまたはJSFを使用する方が、より高速で楽しいです。彼らはあなたのファイルを解析し、それをサーブレットを通して送ります。

5
Lukas Eichler