1

仮想ホスティングで Resin Server と Apache 2.2 を使用しています。ここで、具体的なフィルターを呼び出すという大きな課題に直面しています。すべての受信リクエストを処理するための汎用 Filter クラスがあります。

例: www.example.com/hello この hello は以下のフィルターを呼び出しておらず、代わりにファイルが見つからないというエラー (404) をスローしています。

「hello」が適切なサーブレット マッピングを持っている場合、以下のフィルターが機能しています。

Web.xml :

<filter>
  <filter-name>CorpFilter</filter-name>
  <filter-class>com.filter.CorpFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CorpFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

アパッチログ:

[2013 年 1 月 4 日金曜日 22:05:07] [エラー] [クライアント xxx.xxx.xxx.xxx] ファイルが存在しません: /home/xxxx/public_html/hello

サーブレット フィルタが呼び出されず、404 エラーがスローされるのはなぜですか? サーブレット フィルタは正しく初期化されています。

ありがとう、

4

1 に答える 1

3

フィルタはデフォルトで、リクエストが成功したときにディスパッチされます。デフォルトでは、誤ったリクエストではディスパッチされません。誤ったリクエストでもそれらをディスパッチするには、適切な<dispatcher>要素でフィルター マッピングを展開します。

<filter-mapping>
    <filter-name>CorpFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>

カスタム ディスパッチャ タイプを指定し、デフォルトのディスパッチャを維持したい場合REQUESTは、それも明示的に指定する必要があることに注意してください。また、明らかな理由から、404 は Web プロキシ (Apache HTTPD) ではなく、サーブレット コンテナー (Resin) 自体によって処理されると想定していることに注意してください。

于 2013-01-07T17:43:57.633 に答える