在此link中,它说:处理用户生成报告HTML的请求,并将HTML直接写入响应对象。 现在在我的代码中,我有:
PrintWriter out = response.getWriter();
crystalReportViewer.processHttpRequest(request, response, context,null);
如果我理解正确,processHttpRequest
本身会执行类似response.getWriter().print(.....).
创建PrintWriter
的两个实例的代码是什么?
答案 0 :(得分:6)
响应对象每次都会返回同一个编写器。您可以互换使用这些作者:
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()
来破坏上面引用的合同
如果您先打印一些内容,然后将response
传递给crystalReportViewer
,则输出会打破crystalReportViewer
输出,因为它会被添加到前面。