いつ JSP を使用し、いつサーブレットを使用しますか?[重複]

StackOverflow https://stackoverflow.com/questions/101579

  •  01-07-2019
  •  | 
  •  

質問

この質問にはすでに答えがあります:

支払いを処理するために顧客を別のサイトに送信するアプリケーションがあります。顧客の外部にある他のサイトは、当社のサーバー上のページを呼び出して、支払いのステータスを知らせます。呼び出されたページは、支払いアプリケーションによって指定されたパラメータをチェックし、トランザクションが認識されているかどうかを確認します。次に、データベースを更新してステータスを反映します。これはすべて、顧客との対話なしで行われます。

ファイルをコンパイルしてパッケージ化し、構成ファイルにエントリを追加するよりも、ファイルをファイル システムにドロップする方が簡単であるため、私は個人的にこの機能を JSP として実装することを選択しました。

ページの機能を考慮すると、サーブレットが推奨されるオプションであると推測されます。質問は次のとおりです。

  • 私の推測は正しいでしょうか?
  • JSP 上でサーブレットを使用する本当の理由はありますか?
  • それらの理由は何ですか?
  • 役に立ちましたか?

    解決

    JSP は、初めて実行されるときにサーブレットにコンパイルされます。つまり、それらの間に実際の実行時間の違いはありません。

    ただし、ほとんどの場合、コントローラーにはサーブレットを使用し、ビューには JSP を使用するという伝統があります。コントローラーは単なる Java クラスであるため、すべての IDE から完全なツール サポート (コード補完など) を得ることができます。これにより、JSP と比較して品質が向上し、開発時間が短縮されます。一部のより高度な IDE (IntelliJ IDEA が思い浮かびます) は優れた JSP サポートを備えており、その引数は時代遅れになっています。

    独自のフレームワークを作成している場合、または単純な JSP を使用して作成している場合は、引き続き JSP を使用してください。パフォーマンスに違いはなく、JSP の方が書きやすいと感じる場合は、ぜひ続行してください。

    他のヒント

    JSP:ユーザーにデータを提示するため。ここにはビジネス ロジックが存在すべきではなく、もちろんデータベース アクセスも存在すべきではありません。

    サーブレット:フォームまたは特定の URL からの入力を処理するため。通常、プログラミングをわかりやすくするために、サーブレットの上に Struts/Spring などのライブラリを使用します。いずれにしても、サーブレットは受信したデータを検証し、それをバックエンドのビジネス層実装 (テスト ケースをコーディングできる) に渡す必要があります。次に、結果の値をリクエストまたはセッションに置き、JSP を呼び出してそれらを表示する必要があります。

    モデル:Web サイトが処理する構造化データを保持するデータ モデル。サーブレットは引数を受け取り、それをモデルに入れてから、ビジネス層を呼び出すことができます。その後、モデルはバックエンド DAO (または Hibernate) とインターフェイスしてデータベースにアクセスできます。

    重要なプロジェクトはすべて MVC 構造を実装する必要があります。もちろん、些細な機能としては過剰です。あなたの場合、ステータスなどを更新するためにDAOを呼び出すサーブレット、または必要なものを実装します。

    JSP はプレゼンテーション層、ビジネス ロジック用のサーブレット、およびバックエンド (通常はデータベース層) コードで使用する必要があります。

    あなたが説明しているように JSP を使用できない理由はわかりませんが (とにかくコンテナによってサーブレットにコンパイルされます)、その通りです。推奨される方法は、最初からサーブレットにすることです。 。

    JSP はサーブレットを作成するためのショートカットです。実際、これらはコンパイル前にサーブレット Java コードに変換されます。(名前は覚えていませんが、Tomcat のサブディレクトリで確認できます)。

    サーブレットと JSP のどちらかを選択するには、次のような単純なルールを使用します。ページに Java コードよりも HTML コードが多く含まれている場合は、JSP を使用します。それ以外の場合は、サーブレットを作成します。一般に、これは大まかに次のように訳されます。コンテンツのプレゼンテーションには JSP を使用し、制御や検証などにはサーブレットを使用します。

    また、プレーンな Java クラス構文を使用するため、サーブレット内のコードを整理して構造化するのも簡単です。JSP はよりモノリシックになる傾向がありますが、内部にメソッドを作成することは可能です。

    非常に単純なルールが 2 つあります。

    1. Java コード (ビジネス ロジック) を記述したい場合は、必ず Java クラス (つまり、サーブレット) で実行してください。
    2. HTML/CSS/JS コード (ビュー/テンプレート ロジック) を記述したい場合は、JSP で実行してください。

    関連する質問:

    JSP は本質的に、サーブレット コンテナによって自動的にサーブレットにコンパイルされるマークアップであるため、コンパイル ステップは両方のインスタンスで発生します。このため、JSP をサポートするサーブレット コンテナには、JRE のみが必要ではなく、完全な JDK が利用可能である必要があります。

    したがって、JSP を使用する主な理由は、ページのレンダリングに必要なコードの量を減らすことです。ページをレンダリングする必要がない場合は、サーブレットの方が適しています。

    これが今日一般的な答えではないことは承知していますが、次のとおりです。アプリを最初から設計するときは、常に JSP を使用します。ロジックが自明でない場合は、JSP から呼び出す単調な作業を実行する通常の Java クラスを作成します。サーブレットは純粋な Java クラスとして保守しやすいため、サーブレットを使用する必要があるという議論は、私にはまったく理解できませんでした。JSP は純粋な Java クラスを簡単に呼び出すことができ、もちろん通常の Java クラスは他のサーブレットと同様に保守可能です。大量の println を記述する必要がなく、すべてのマークアップをインラインに配置できるため、JSP でページをフォーマットする方が簡単です。しかし、JSP の最大の利点は、JSP をディレクトリにドロップするだけで直接アクセスできることです。URL とクラス ファイル間の関係を設定する必要はありません。セキュリティは、すべての JSP にセキュリティ チェックを開始させることで簡単に処理できます。セキュリティ チェックは単一の呼び出しステートメントにすることができるため、ディスパッチ層にセキュリティを組み込む必要はありません。

    サーブレットを使用する唯一の理由は、URL とその結果の実行クラスの間で複雑なマッピングが必要な場合です。たとえば、URL を調べて、セッション状態などに応じて多くのクラスの 1 つを呼び出したい場合などです。私個人としては、これをやりたいと思ったことは一度もありませんし、実際にそうしているアプリは、変更を始める前に実際にどのようなコードが実行されているかを把握する必要があるため、保守が困難になる傾向があります。

    現在、ほとんどの Java アプリケーションは MVC パターンに基づいて構築されています...コントローラー側 (サーブレット) では、ビジネス ロジックを実装します。通常、サーブレット コントローラーはリクエストを JSP に転送し、JSP が実際の HTML レスポンス (MVC のビュー) を生成します。目標は、懸念事項を分離することです...そのテーマに関して何千冊もの本が書かれています。

    MVC アーキテクチャでは、サーブレットはコントローラーとして使用され、JSP はビューとして使用されます。しかし、どちらも技術的には同じです。JSP は、コンパイル時 (JDeveloper など)、または初めてアクセスしたとき (Tomcat など) にサーブレットに変換されます。したがって、本当の違いは使いやすさにあります。サーブレットを使用して HTML ページをレンダリングするのはかなり難しいと思います。しかし常識とは反対に、かなり複雑なロジックであっても、実際には (おそらく準備されたヘルパー クラスの助けを借りて) JSP 内でコーディングするのが非常に簡単であることがわかります。PHPの人はいつもこれをやっています。そして、スパゲッティ コードを作成するという落とし穴にはまってしまいます。それで、あなたの問題に対する私の解決策は次のとおりです。JSP でコーディングする方が簡単で、あまり多くのコードを必要としない場合は、自由に JSP でコーディングしてください。それ以外の場合は、サーブレットを使用します。

    JSP とサーブレットの違いに関する上記のすべての点に同意しますが、追加の考慮事項がいくつかあります。あなたが書く:

    支払いを処理するために顧客を別のサイトに送信するアプリケーションがあります。他のサイトは、顧客の外で、サーバー上のページを呼び出して、支払いのステータスが何であるかをお知らせします。呼び出されたページは、支払いアプリケーションによって与えられたパラメーターをチェックし、トランザクションが当社に知られているかどうかを確認するためにチェックします。次に、データベースを更新してステータスを反映します。これはすべて、顧客とのやり取りなしに行われます。

    あなたのアプリケーションは別のアプリケーションの支払いサービスを利用しています。他のアプリケーションの支払いサービスが変更されると、JSP ページが破損するため、ソリューションは脆弱です。または、アプリケーションの支払いポリシーを変更したい場合は、ページを変更する必要があります。簡単に言うと、アプリケーションは Web サービス経由でアプリケーションの支払いサービスを利用する必要があるということです。サーブレットも JSP ページも、消費ロジックを配置する場所としては適切ではありません。

    第 2 に、これらの方針に沿って、過去数年間のサーブレット/JSP ページの使用のほとんどは、Spring や Struts などのフレームワークのコンテキスト内に置かれてきました。Spring は、サーバー ページから Web サービス ゲートウェイ ロジック、DAO まで、必要なもののフルスタックを提供するので、Spring をお勧めします。Spring の基本を理解したい場合は、次をお勧めします。 春の動き. 。Java (または C#) などの言語で書かれたエンタープライズ アーキテクチャを階層化する方法をよりよく理解する必要がある場合は、Fowler のドキュメントをお勧めします。 エンタープライズ アプリケーション アーキテクチャのパターン.

    はい、これはサーブレットである必要があります。JSP の方が開発が簡単ですが、サーブレットの方が保守が簡単です。6 か月以内にランダムなバグを修正しなければならず、それがどのように機能したかを思い出そうとすることを想像してみてください。

    Java サーブレットでは、HTML タグが Java コーディングに埋め込まれます。JSP では、Java コーディングは HTML タグに埋め込まれます。

    大きな問題に対する大きなアプリケーションの場合、Java コーディング内にさらに多くの HTML タグを埋め込むと読みにくくなるため、サーブレットは読み取り、理解、デバッグなどが複雑になります。そのため、jsp を使用します。jsp では、理解やデバッグなどが簡単です。

    よろしくお願いします、sivakumar.J

    それはあなた次第だと思いますか?JSPはHTML内のJavaであり、サーブレットは内部でHTMLを実行できるJavaであるため

    うーん...サーブレットにサブミットして別の JSP に転送すると、ファイル拡張子が表示されず、それが何のページであるかを確認できないため、サーブレットは JSP よりも安全です。

    しかし、JSP の利点は、コードを簡単に作成できることです。

    ライセンス: CC-BY-SA帰属
    所属していません StackOverflow
    scroll top