2011-11-14 21 views
0

はこんにちは私は私が上で私の指を置くことができない問題.....上記のコードでのgetOutputStream()がすでに二サーブレットリクエストに応じて、この応答のために呼び出されてい

servletResp.setHeader("Expires","0") 
servletResp.setHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0") 
servletResp.setHeader("Pragma","public") 
servletResp.setHeader("Content-Disposition","inline; filename=invoice.pdf") 

servletResp.setContentType("application/pdf") 
servletResp.setContentLength(outStream.size()) 
servletResponseStream.write(outStream.toByteArray()) 
outStream.close() 
servletResponseStream.flush() 
servletResponseStream.close() 

はOUTSTREAMを持っていることを前提としていますpdfファイルを読んでください。コードは、最初の要求でうまく描画されます。 2回目のリクエストでは、私は次のようになります。

java.lang.IllegalStateException: getOutputStream() has already been called for this response 

出力ストリームは問題ありません。私が新しいバイト[2]を作り、同じ結果が起こると書いても。最初の要求時にサーバーは正常に応答します。あなたの質問のコードがgetOutputStream()を呼び出すか、それが呼び出される原因となる何もしない

+0

outStream.close()とは何ですか? – r0ast3d

+1

outStream.closeはすでにストリームの応答を閉じています。行番号などのコードを入力してください – r0ast3d

+0

@ r0ast3dいいえ、 'outStream'は 'ByteArrayOutputStream'のようになり、サーブレット出力ストリームには接続しません。 – EJP

答えて

0

....上記の例外が発生した第二上の任意のヘルプは歓迎されるであろう。だから私は、例外の原因がどこか他のものだと結論づけています。

特定の応答に対してServletResponse.getOutputStream()および/またはgetWriter()を1回だけ呼び出すことができます。アプリケーションによっては、getOutputStreamまたはgetWriterが複数回呼び出されています。

関連する問題