3

私のWebアプリケーションでは、データベースへの接続、ユーザー情報、テンプレート処理など、すべての「ページ」に特定の必要なものが必要です。最近まで、すべてを初期化する抽象サーブレットがありました上記のdoGetordoPostメソッドで、抽象メソッドdoLocalLogic(HttpServletRequest req, HttpServletResponse res)を定義し、メソッドから呼び出しますdoGet/doPost。拡張クラスはすべて、データベース接続、ユーザー情報などを利用できます。残念ながら、これは悪い習慣であることが判明しました。

私が今考えているのは、それをすべて行う抽象クラスを作成することです。サーブレットのすべてのロジックはこのクラスの子に移動され、サーブレットはそれらの子のインスタンスを作成するだけです。

ただし、これにより、アプリのページごとに 1 つ以上のクラスが作成されます。さらに、新しいサーブレットを作成するときは、抽象サーブレットを作成する場合のように、オーバーライドする必要がある抽象メソッドの形式に何の手がかりもありません。

それを行うより良い方法はありますか?

4

2 に答える 2

2

まず第一に、doLocalLogic()このローカルロジックをフィールドではなくパラメーターを介して渡す限り、アプローチは悪くないと主張します(スレッドはリクエスト/スレッド間で共有されます):

public void doLocalLogic(
  Connection connection,
  UserInformation user,
  //...
  HttpServletRequest req,
  HttpServletResponse res
)

唯一の問題は、サーブレットで必要ない場合でも、大量のデータを準備することです。そして、それはスケーラブルではありません。

本当に必要なのは、より堅牢なフレームワークです。まず、サーブレット API への直接のコーディングを避けるために、おそらく Web フレームワークが必要です。次に、依存関係を管理するために Spring のような IC が必要です。それらを熱心に作成して渡す代わりに、各サービスは必要な依存関係を要求するだけです。

于 2012-11-17T19:04:15.657 に答える
1

spring-mvc のようなフレームワークを使用することをお勧めします。フレームワークを使用すると、Web アプリケーションにMVC
を実装できます。 これにより、リクエスト フロー全体でアプリケーション コンテキストを渡すことができます。また、 異なるページ間で渡すこともできます。 もちろん、ほとんどのロジックをサーブレット クラスから分離できます。



于 2012-11-17T19:11:53.717 に答える