6

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

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

如果我理解正确,processHttpRequest遗嘱本身会做类似的事情response.getWriter().print(.....).

那么代码是否创建了 2 个实例PrintWriter

4

1 回答 1

8

响应对象每次都会返回相同的作者。您可以交替使用这些编写器:

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

输出与预期一致,因为writerA并且writerB实际上指向的是完全相同的PrintWriter.

我不知道规范中是否这样说明,Javadoc只说:

可以调用此方法或 getOutputStream() 来写入正文,而不是两者。

话虽如此,您的代码不安全有两个原因:

  • crystalReportViewer可能会调用response.getOutputStream()这违反了上面引用的合同

  • 如果你先打印一些东西然后传递responsecrystalReportViewer你的输出可能会破坏crystalReportViewer输出,因为它会被预先设置。

于 2011-10-25T16:23:35.377 回答