18

このブログによると、 JSF はステートレスになります。JSF を使用することの要点は、状態の保存と復元が雑用になることではないでしょうか。JSF がステートレスになるポイントは何ですか? これが役立つ例を教えてください。

4

2 に答える 2

26

まず最初に、JSF 自体が完全に「ステートレスになる」わけではないことを明確にしたいと思います。JSF は、開発者がオンデマンドでステートレス ビュー/フォームを作成できるようにする新しい機能を追加しただけです。

状態の保存は、条件付きで ajax レンダリングされたパーツなど、動的に操作されるフォームで特に役立ちます。ajax ベースのポストバック全体でフォームの状態を記憶します。つまり、リクエスト スコープのマネージド Bean ではなく、ビュー スコープのマネージド Bean が絶対に必要なフォームです。リクエスト スコープ Bean に関連付けられた静的フォームの場合、状態はビュー ファイルに基づいてリクエストごとに簡単に再作成できるため、必ずしも保存する必要はありません。

サーバー側の状態保存管理の場合、状態保存にはサーバー メモリとセッション作成に関するコストがかかります。ViewExpiredExceptionまた、セッションの有効期限が切れている間のポストバック中に発生するという追加の欠点もあります。これらはすべて、状態保存管理をクライアント側に設定することで解決できます。しかし、これには、ネットワーク帯域幅とシリアライゼーションによるパフォーマンスの低下という点でコストがかかります。

たとえば、「公開」セクションと「制限付き」セクションをカバーする大規模な Web サイトの場合、ユーザーが実際にログインするまでセッションの作成を延期したいと考えます。ただし、公開部分に JSF ログイン フォームがある場合は、そのページにアクセスするだけでセッションが作成されます。フォーム自体に基本的に動的状態がなく、リクエスト スコープ Bean に関連付けられている場合、これは不要なコストです。

確かに、最先端のハードウェアを使用している場合、このコストは無視できますが、訪問者が比較的多い場合やハードウェアが比較的貧弱な場合は無視できません。その場合、測定は知ることです。また、常に完全にステートレスになるとは限りません。ビューやフォームを動的に操作する利点と経験を失うことになります。ただし、理論的には、非表示の入力フィールドやカスタム リクエスト パラメータをいじることで、リクエストごとに状態を維持できます。

ステートレスには、開いている XSS ホールがある場合、理論的には CSRF 攻撃を実行する方が簡単であるという追加の欠点があることに注意してください。幸いなことに、JSF2/Facelets では、XSS ホールを持つことはすでに非常に困難です。これを取得する唯一の方法は、 を使用し<h:outputText escape="false">てユーザー制御データを再表示することです。

以下も参照してください。

于 2013-02-15T15:44:03.637 に答える
8

ポイントは、維持する実際の状態がある場合にのみ状態を維持することです。

JSF の大きな問題の 1 つは、スケールアウトです。

基本的に、JSF には次の 2 つの選択肢があります。

  • 状態をサーバーに保存 - 長所: 応答時間が速い。短所: 約 2 ~ 300 人以上のユーザーを処理するには、ブート ロードのメモリが必要です。

  • クライアントに状態を保存する - 長所: メモリ制限を取り除きます。短所:コンポーネントツリーを毎回クライアントに送信する必要があるため、サーバーの帯域幅が増加します

ステートレスは、ユーザーが維持する必要のある状態がない間、JSF を使用してコンテンツを効率的に提供できるようにすることを目的としています。

必要に応じてコンポーネント ツリーを再利用できるようにするなど、さらに改良が加えられていますが、アプリのスケーリングを向上させることが目的です。

于 2013-02-15T08:58:28.130 に答える