2011-10-25 28 views
2

在此link中它说:处理用户的请求以生成报告的HTML并将HTML直接写入响应对象。 现在,在我的代码,我有:在servlet响应中使用Printwriter

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.getOutputStream()打破上述

  • 报价,如果你先打印的东西,然后通过response合同到crystalReportViewer的机会是你的输出将打破crystalReportViewer输出,因为它将被预先占用。