2

カスタム タグでは、RequestDispatcher を介して他のものを含めたいと考えています。

RequestDispatcher rd = request.getRequestDispatcher(url);
rd.include(request, response);

しかし、応答の出力ストリームの状態を知ることはできません。私は現在、HttpServletRequest を実装する別のオブジェクトでタグに使用できる応答と JspWriter をラップすることで、この問題を回避しています。内部で getWriter() への呼び出しがある場合、これは正常に機能します。しかし、リクエストを処理するコードが実際に raw OutputStream を取得したい場合 (タグ内で安全に取得することもできません)、IllegalStateException が発生します (getOutputStream() が既に呼び出されているため)。

これで、新しい OutputStream を作成してリクエスト ラッパーにラップし、include() が戻るまでバッファリングしてから、書き込まれたバイトを取得して JspWriter に書き込むこともできます。

ただし、私の質問は次のとおりです。文字エンコーディングを維持する必要がありますか? のように: 応答オブジェクトをさらに「モック」して、少なくとも、インクルードと基になる出力ストリームに渡す要求ラッパーで設定された文字エンコーディングから変換を試みることができるようにする必要がありますか? これは「十分にきれい」でしょうか?調べる必要があるユーティリティ クラスはありますか?

4

1 に答える 1