1

私は、応答をラップし、ラップされた応答の addHeader() への呼び出しを分析する Servlet-Filter をプログラミングしています。応答がクライアントにコミットされる前に、必要に応じていくつかの有用なヘッダー (キャッシュ、圧縮など) で応答を装飾します。

この装飾は、ラップされた応答で ServletResponse.flushBuffer() が呼び出されたとき、またはバッファサイズに達したときに行われます。ただし、ラップされたサーブレット (または JSP-Page) がその時点でインクルードを処理している場合、インクルードは禁止されているため、応答にヘッダーを追加することはできません。

したがって、リソースが含まれる前に応答を装飾できるように、インクルードを検出する必要があります。

それを達成するために私が考えることができる唯一の方法は、リクエストをラップし、ServletRequest.getRequestDispatcher() への呼び出しをキャッチし、RequestDispatcher のラップされたインスタンスを返すことです。しかし、Servlet 3.0 以降には、ServletContext.getRequestDispatcher() および ServletContext.getNamedDispatcher() メソッドもあります。フィルターが ServletContext をラップできないため、そのメソッドをキャッチできません。

RequestDispatcher.include() への呼び出しを検出する他の方法はありますか?

4

1 に答える 1

1

追加する

<dispatcher>INCLUDE</dispatcher>

フィルタマッピングは機能しているようです

于 2012-11-13T23:43:38.117 に答える