2010-11-29 11 views
1

私が望むのは、現在のHttpServlerRequest + HttpServletResponse + HttpSession +にアクセスし、アプリケーションの任意のポイントからユーザーデータやユーザーの設定などの重要な情報を取得することです。現時点で私は特別なオブジェクトを作成しています。MyServletContextこれは、すべてのオブジェクトのすべてのメソッドに最初のパラメータとして渡されます。私はこのパラメータを取り除きたいが、それを行う最良の方法は何か分からない。コード内の任意の場所からHttpContext、HttpServletRequest、HttpServletResponseにアクセスする

私の考えの1つは、グローバルキャッシュを作成することです。MyServletContext現在のスレッドでハッシュされています。 MyServletContextに格納されている情報が必要な場合はいつでも、私はこのオブジェクトを見つけることができるキャッシュを呼び出します。私はこのキャッシュスレッドを安全にする必要があることを知っていて、それを行う方法を知っています。 質問は:それを行うための良い方法はありますか?

答えて

2

私はこの目的でThreadLocalを使用しました。 HttpRequestをThreadLocalに置き、コード内のどこでも使用できるHttpFilterを作成します。

2

ThreadLocalを使用してこれを実現する典型的な方法ですが、実際には良い選択肢ではありません。

どこでも全体のコンテキストを渡すことも好ましくありません。

最高のことは、必要なデータだけをパラメータとして渡すことです。したがって、サービスレイヤをWebレイヤに依存させないようにしています。それはもっとテスト可能です。

+1

実際、必要なものだけです。これはカップリングを減らし、再利用性を向上させます(それについて気にしなければ、デバッグ性) –

+0

私はその点を見ています。 HttpXXX変数はリクエスト処理の最上位レベルでのみ必要なので、簡単に渡すことはできません。しかし、私のユーザーデータとユーザーの好みはかなりの場所で必要になります。また、私は別の環境(例えば、コンソールアプリケーションのような)で私のコアオブジェクトを使用したい場合でも、私はまだこの情報が必要です。だから、どんな意味でも再利用性に影響しないようです。この目的のためにThreadLocalを使用しないのがよい理由はありますか? – Jakub

関連する問題