前日の反省

今日、前日のコードでちょっとハマった…(泣
のでメモメモ。


protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {


ZipOutputStream zos = new ZipOutputStream(resp.getOutputStream());

ここでサーブレットの出力をZip出力用のストリームで包んでいたわけですが…
ZipEntryを突っ込んでるうちに自動でflushされてしまう(※ServletResponseWrapper#flushBufferが呼ばれてました…)ようで、
ストリームへの再書き込み不可でエラー地獄にはまってました。
この問題は、いったん出力データを溜め込んでからServletOutputStreamに吐き出す方法で解決。


ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
… // 色々詰め込み
resp.getOutputStream().write(baos.toByteArray());
みたいな感じですかね。
#何も見ずに思い出しながらコード書いてるから間違ってるかもしれませんが。。


上記は解決したからいいのですが、もう一個フレームワーク部分で動きが謎な箇所があって、
どうしてもうまくいかない…明日中になんとかできるよう頑張ってみます。