2011-10-25 12 views
2

このlinkでは、次のように書かれています。レポートのHTMLを生成するユーザーの要求を処理し、HTMLを直接応答オブジェクトに書き込みます。 今、私のコードでは、私が持っている:サーブレット応答でプリントライターを使用する

PrintWriter out = response.getWriter(); 
crystalReportViewer.processHttpRequest(request, response, context,null); 

私が正しく理解していれば、processHttpRequest自体がresponse.getWriter().print(.....).

のようなものだからコードがPrintWriterの2つのインスタンスを作成しているでしょうか?

答えて

3

応答オブジェクトは毎回同じライターを返します。あなたは、交換可能にこれらの作家を使用することができます。

final PrintWriter writerA = response.getWriter(); 
final PrintWriter writerB = response.getWriter(); 
writerA.println("A1"); 
writerB.println("B1"); 
writerA.println("A2"); 
writerB.println("B2"); 

writerAwriterBが実際にPrintWriterのまったく同じインスタンスを指しているので、期待通りに出力されています。

私はそれは仕様でそのように記載されているかどうかわからない、Javadocは言う:

このメソッドまたはgetOutputStreamの(どちらか)の両方、体を書くことではない呼び出すことができます。

あなたのコードは二つの理由から安全ではありません言われていること:

  • crystalReportViewerあなたが最初に何かを印刷して、responseを渡す場合

  • 上に引用された契約を破るresponse.getOutputStream()を呼ぶかもしれませんcrystalReportViewerに出力すると、出力はcrystalReportViewerの出力が前に付加されるので破損する可能性があります。

関連する問題