2009-08-29 3 views
1

私は多くのクラブのデータを管理するJava Webアプリケーションを持っています。入力されたURLに応じて、クラブの情報を表示するアプリケーションをご希望です。Javaサーブレットフィルタ内のHTTPServletRequestのリクエストURLを傍受して変更することはできますか?

例: "localhost:8080/MyApp/Club1" ...と入力すると、アプリはrequst url(Club1)の終わりを取り除き、データベースの検索を行い、これをセッションに追加する必要があります。その後、すべてのデータベース要求は、セッション中のクラブによってデータを検索できます。

あなたが入力した場合は「localhost:8080/MyAppに/ Club2」、あなたがセッションに登録さにクラブを取得し、すべてのデータベース要求がクラブ私はこれを行うことが考えやり方が使用する2

ためのものであるがHTTPServletRequest()。getRequestURL()を呼び出し、要求URLからクラブ名を取り除き、データベースからクラブを検索するサーブレット・フィルター。

しかし、アプリケーションが正常に動作するように、リクエストURLをhttp://localhost:8080/MyAppに変更することはできません。しかし、私はこれを行うことができるとは思わない?

これを行う方法や、より良いアプローチがあれば、誰でも構いません。

答えて

2

フィルタは適切な方法ではないと思います。クラブ会員資格に基づいて行動を変えることについて説明してきたことは、サービスレイヤーの内部にあるロジックであり、再利用することができます。

フィルタを忘れてサーブレットをプログラムするのが良い方法です。クラブ名をパラメータとして渡し、それを使ってそのクラブのURLの地図を検索し、サーブレットがRequestDispatcherを使ってそのクラブのURLにリダイレクトさせる。フィルターを使用する前にハートビートを傍受することに利点はありません。

Springを使用している場合は、これをサービスに入れて、Web MVC層がリクエストのマッピングとルーティングを処理できるようにすることをおすすめします。

これは、あまりにも困難で欲しいものをするために巻き込まれた場合、おそらく間違ったことを試みているケースの1つです。これを行う簡単な方法があり、フィルタは近くにさえありません。

0

Core J2EE Patterns - Intercepting Filter

概要: コア要求処理コードへの変更を必要とせずに標準 方法で処理共通のサービスにプラグイン可能なフィルタを作成します。 フィルタは、着信要求を傍受して と発信応答を受け取り、 の前処理と後処理を可能にします。 は、 フィルタを目立たずに追加したり削除したりすることはできません。 のコードを変更する必要はありません。 コードです。で

+0

ありがとうございます。どのようにそれを行うには最高のアイデア? –

+1

もちろん、これらのフィルタは、ロギング、パラメータの追加や変更、さまざまなURLへのリダイレクトなどの作業を行っています。私はそのようなことをしたフィルターの例を見つけることができませんでした。 – duffymo

+0

ありがとうございます。私はフィルターを使ってマークを外しているように思えるので、そのアプローチを放棄すべきです。私はまだこれを行う最善の方法が何であるかまだよく分かりません。 この問題は本当に問題だと思います。 私は私がイースリークラブのデータをロードすることができます知っている場合で、ユーザーのタイプ:? はlocalhost /て、myAppクラブ=要求は、その後からクラブを取得し、入ってくるとすぐにリクエストパラメータを取得するだけの場合だmyClub データベース。 私はちょうど同じことをする方法を見つけていないようですが、要求パラメータとしてではなくパスからクラブ名を取得しています。 –

0

サーブレットのdo_GET/do_POST、あなたは、クラブとしてURIの最初の部分を解釈し、それがその後、他のコードのみルックスに委譲し、すでにそこにいなかったら(アプリケーションスコープを使用して)セッションに追加することができます必要に応じてインセッション・クラブを使用する。

1

urlrewritefilterをご覧ください。これは、サーブレットが見る前にリクエストURLを変更できるサーブレットフィルタです。クエリパラメータをパスパラメータとの間で変換する場合によく使用されます。

Googleの場合は、かなりハイプロファイルなJavaアプリケーションのスタックトレースに表示されます。

+0

このサーブレットフィルタは、リクエスト処理をチェーン内の次のサーブレットフィルタに渡しませんが、直ちに要求をサーブレットに転送します。これは問題になる可能性があります。 –

関連する問題