0

私は関数型プログラミングが本当に好きで、その不変性の概念が好きで、関数の副作用の概念もありません。

これらの概念のいくつかを Java に取り込もうとしています。

現在、リクエストを受信するサーブレットがあり、ブラウザがサーバーに Cookie を送信しなかった場合は、ユーザーへの特定のパスで Cookie を作成したいと考えています。

サーブレット内では、複数のサーブレットに共通であるため、そのロジックを保持したくありません。だから私はそれを行うある種のクッキーマネージャーにそれを抽出します:

CookieManager.java.handleCookies(リクエスト、レスポンス)

  1. ブラウザが Cookie を送信したかどうかを確認します。
  2. 特定のパスを持つ新しいセッション Cookie 値で Cookie を設定しない場合。

ただし、サーブレットが CookieManager.java.handleCookie を呼び出すと副作用があるため、私はそれが好きではありませんその中に入っています。

誰でもエレガントで、副作用がなく、パフォーマンスに優れたソリューションを提案できますか?

ありがとう

4

2 に答える 2

1

サーブレットフィルターを利用できます。それはあなたのケースに適しています。フィルターを URL パターンにマップし、dofilter メソッド内にコードを記述できます。リクエスト/レスポンスの事前処理と事後処理が必要な場合は、フィルタを使用することをお勧めします。リクエストの前処理を行っているので、あなたのケースに合うでしょう。If も疎結合です。これは、コア サーブレット コードを変更することなく、いつでも削除、変更、または別のルールを追加できるためです。

于 2012-08-29T13:51:33.730 に答える
0

良い解決策の1つは、他のすべてのサーブレットの親クラスとして機能するサーブレットを作成することです。ここで、このサーブレットに、このCookie処理のロジックをhandlecookieなどの一般的な関数に配置します。このサーブレットのgetおよびpostAPIで、最初にこのhandleCookieを呼び出し、次にサーブレットのサービスAPIを呼び出します(これは空のままにします)

すべての子サーブレットクラスでは、親クラスから継承されたサービスクラスのみをオーバーライドでき、問題なく動作するはずです。

サーブレットフィルタは、利用できる他のソリューションです。

于 2012-08-29T13:52:12.823 に答える