在servlet响应中使用Printwriter

时间:2011-10-25 15:50:33

标签: java servlets response crystal-reports-2008 printwriter

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

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

如果我理解正确,processHttpRequest本身会执行类似response.getWriter().print(.....).

的操作

创建PrintWriter的两个实例的代码是什么?

1 个答案:

答案 0 :(得分:6)

响应对象每次都会返回同一个编写器。您可以互换使用这些作者:

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输出,因为它会被添加到前面。