5

2つの質問があります。1つ目は、フィルターが要求に多くのオーバーヘッドを追加することです。フィルタがあり、URLパターン/*で実行するように設定されています。これは、すべての画像リクエストでも実行されることを意味します。これはパフォーマンスには良くないと思いますが、フィルターにはifステートメントが2つしかないため、フィルターがリクエストごとに5回または6回実行されるかどうかは問題ではないと同僚は考えています。

画像リクエストを無視して、リクエストごとに1回フィルターを実行する方法はありますか?

ありがとうダグ

4

3 に答える 3

4

測ることは知ることです。よく書かれていれば、それは無視できると思います。ただし、たとえば、セッションが作成されているにもかかわらずセッションを取得している場合 (したがって、不必要に作成される可能性があります)、セッションの作成は完全ではないため、パフォーマンスやメモリ使用量に顕著な影響を与える可能性があります。安価であり、セッションはリクエストよりも長期間サーバーのメモリに保存されます。

url-patternのをに置き換えるか、制限/**.jspれたページを特定のフォルダ ( 、 など) に移動し、それに応じて を、/secured/privateなど/pagesに変更し、すべての静的コンテンツを などの別の場所に配置することができます。このようにして、フィルターは静的コンテンツに対して呼び出されなくなります。url-pattern/secured/*/private/*/pages/*/static

于 2010-07-22T18:56:50.047 に答える
1

まず、プロファイル ファーストのアプローチに同意します。

第二に、私が知っている限り、Webサーバーはフィルターに使用するのと同じ手法を使用して特定のサーベルト(/ JSP)を呼び出します。

フィルターが静的リソース (例: jpg ファイル) をフィルタリングしている場合、それは少し無駄です。フィルターが動的リソース (例: サーブレット) をフィルタリングしている場合、それは無視できます.. (Struts や Jboss などのほとんどの Java Web フレームワーク-seam はフィルターを多用しています..)

于 2010-07-22T21:14:42.847 に答える
0

最初にプロファイリングせずに、コードのパフォーマンスへの影響について推測することは、ほとんど役に立ちません。フィルターで提案されているコードが遅いことがわかっている操作を実行していない限り、最適化する前に最初に測定してください。

サーブレットを作成しているときは、サーブレット/フィルター コードが呼び出される前にdoGet()、またはdoPost()メソッド内のコードだけが発生するように思えるかもしれませんが、覚えておいてください。サーブレット コンテナは、HTTP リクエストを処理して Java オブジェクトにまとめ、コードに渡す前にあらゆる種類の他の処理を行います。

サーブレット フィルタが実際に、安価に取得できるデータ (リクエスト自体など) を処理する if ステートメントの 2 つだけである場合、これが問題になる可能性はほとんどありません。

于 2010-07-22T19:14:20.717 に答える