Struts1 では、Action クラスが抽象基本クラスを継承する必要があります。 Struts1 に関する一般的な問題は、インターフェイスではなく抽象クラスを使用したプログラミングです。
• Struts 2 Action クラスは、Action インターフェイスまたはその他のインターフェイスを実装して、オプションのカスタマイズされたサービスを可能にします。 Struts2 は、一般的に使用されるインターフェイスを実装するための ActionSupport 基本クラスを提供します。 Action インターフェースは必要ありません。実行識別子を持つ POJO オブジェクトは、Struts2 の Action オブジェクトとして使用できます。
スレッドモード:
• Struts1 アクションはシングルトン モードであり、アクションの 1 つのインスタンスだけがすべてのリクエストを処理するため、スレッドセーフである必要があります。シングルトン戦略では Struts1 Action でできることが制限されるため、開発中は特別な注意を払う必要があります。アクション リソースはスレッドセーフであるか、同期されている必要があります。
• Struts2 Action オブジェクトはリクエストごとにインスタンスを生成するため、スレッドの安全性の問題はありません。 (実際、サーブレット コンテナはリクエストごとに多くの破棄可能なオブジェクトを生成しますが、パフォーマンスや LJ リサイクルの問題は引き起こしません)
サーブレットの依存関係:
• Struts1 アクションは、アクションの呼び出し時に HttpServletRequest と HttpServletResponse が実行メソッドに渡されるため、サーブレット API に依存します。
• Struts 2 アクションはコンテナに依存しないため、コンテナとは独立してアクションをテストできます。 Struts2 アクションは、必要に応じて元のリクエストとレスポンスに引き続きアクセスできます。ただし、他の要素により、HttpServetRequest および HttpServletResponse に直接アクセスする必要性が軽減または排除されます。
テスト容易性:
• Struts 1 アクションのテストに関する大きな問題は、execute メソッドがサーブレット API を公開していることです (テストがコンテナに依存することになります)。サードパーティの拡張機能である Struts TestCase は、(テスト用の) Struts1 モック オブジェクトのセットを提供します。
Struts 2 アクションは、初期化、プロパティの設定、およびメソッドの呼び出しによってテストできます。また、「依存関係の挿入」のサポートにより、テストが容易になります。
キャプチャ入力:
• Struts1 は、ActionForm オブジェクトを使用して入力をキャプチャします。すべての ActionForm は基本クラスを継承する必要があります。他の JavaBeans は ActionForms として使用できないため、開発者は入力を取得するために冗長クラスを作成することがよくあります。動的 Bean (DynaBeans) は、従来の ActionForms を作成する代わりに使用できますが、開発者は既存の JavaBeans を再記述 (作成) する可能性があります (それでも冗長な JavaBeans が生成されます)。
• Struts 2 は、Action プロパティを入力プロパティとして直接使用するため、2 番目の入力オブジェクトは必要ありません。入力プロパティは、独自の (サブ) プロパティを持つリッチ オブジェクト タイプである場合があります。アクションのプロパティには、Web ページの taglib を通じてアクセスできます。 Struts2 は ActionForm モードもサポートしています。ビジネス オブジェクトを含む豊富なオブジェクト タイプを入出力オブジェクトとして使用できます。この ModelDriven 機能により、taglib による POJO 入力オブジェクトへの参照が簡素化されます。
表現言語:
• Struts1 は JSTL を統合するため、JSTL EL を使用します。この EL には基本的なオブジェクト グラフ トラバーサルがありますが、コレクションとインデックス付きプロパティのサポートは弱いです。
• Struts2 は JSTL を使用できますが、より強力で柔軟な表現言語である「Object Graph Notation Language」(OGNL) もサポートしています。
値をページ (ビュー) にバインドします。
• Struts 1 は、標準の JSP メカニズムを使用して、オブジェクトをページにバインドしてアクセスします。
Struts 2 は、「ValueStack」テクノロジーを使用して、taglib がページ (ビュー) をオブジェクトにバインドせずに値にアクセスできるようにします。 ValueStack 戦略では、名前は同じでタイプが異なる一連のプロパティを通じてページ (ビュー) を再利用できます。
型変換:
• Struts 1 ActionForm プロパティは通常、String 型です。 Struts1 は型変換に Commons-Beanutils を使用します。クラスごとに 1 つのコンバーター。インスタンスごとに構成できません。
• Struts2 は型変換に OGNL を使用します。基本的で一般的に使用されるオブジェクトのコンバーターを提供します。
チェック:
• Struts 1 は、ActionForm の validate メソッドでの手動検証、または Commons Validator の拡張機能による検証をサポートしています。同じクラスでも異なる検証内容を持つことができますが、サブオブジェクトの検証はできません。
• Struts2 は、validate メソッドと XWork 検証フレームワークによる検証をサポートしています。 XWork 検証フレームワークは、属性クラス タイプに定義された検証とコンテンツ検証を使用して、チェーン検証サブプロパティをサポートします。
アクション実行制御:
• Struts1 はモジュールごとに個別のリクエスト プロセッサ (ライフ サイクル) をサポートしますが、モジュール内のすべてのアクションは同じライフ サイクルを共有する必要があります。
• Struts2 は、インターセプター スタックを通じてアクションごとに異なるライフサイクルの作成をサポートします。スタックは必要に応じてさまざまなアクションで使用できます
この記事は CSDN ブログからのものです。転載する場合は出典を明記してください: http://blog.csdn.net/Ryan_lz/archive/2009/12/29/5101758.aspx