0

特定の条件下で JSP ファイルから返された HTML 応答を読み取り、(XHTML パーサーを使用して) 処理し、最終的にブラウザーに返す前にいくつかの変更を加えるサーブレット フィルターを作成しようとしています (基本的には何百もの JSP を個別に変更する必要がないようにグローバルな変更を実装しようとしている)

私はトムキャットを使用しています。まず、HttpServletResponse と ServletOutputStream のラッパーを提供してから、それらをフィルター チェーンに戻します。ただし、「IllegalStateException: getOutputStream() はこの応答に対して既に呼び出されています。」というメッセージが表示されます。これは、taglibs の 1 つが「this.pageContext.getOut()」によって返されたライターを使用して書き込もうとするたびに発生するようです。そのため、Tomcat によって使用されている応答/ライター/出力ストリームは、私が渡したラッパー クラスを使用していないと思います。フィルター。

助言がありますか?または、私がやろうとしていることを達成するためのより良い方法はありますか?

4

1 に答える 1

0

変更された XML を返す前に、応答がコミットされていると思います。

応答がコミットされた理由を知るには、ここを見てください

応答をコミットしたくない場合は、次の 2 つのことを行う必要があります。

  • ページ ディレクティブで JSP バッファ サイズを増やします

    <%@ page buffer="5kb" autoFlush="false" %>

  • サーバーのデフォルトの最大バッファ サイズを増やします。

    ServletRespnse.setBufferSize()

于 2012-07-03T07:14:12.857 に答える