Java 在servlet响应中使用Printwriter
在这里,它表示:处理用户生成报告HTML的请求,并将HTML直接写入响应对象。 现在在我的代码中,我有:Java 在servlet响应中使用Printwriter,java,servlets,response,crystal-reports-2008,printwriter,Java,Servlets,Response,Crystal Reports 2008,Printwriter,在这里,它表示:处理用户生成报告HTML的请求,并将HTML直接写入响应对象。 现在在我的代码中,我有: PrintWriter out = response.getWriter(); crystalReportViewer.processHttpRequest(request, response, context,null); 如果我理解正确,processHttpRequest本身将执行类似于response.getWriter().print(…)。 因此,代码是否创建了两个PrintW
PrintWriter out = response.getWriter();
crystalReportViewer.processHttpRequest(request, response, context,null);
如果我理解正确,processHttpRequest
本身将执行类似于response.getWriter().print(…)。
因此,代码是否创建了两个
PrintWriter
实例?响应对象每次都将返回同一个writer。您可以互换使用这些编写器:
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
的完全相同的实例
我不知道规范中是否有这样的规定,唯一的说明是:
可以调用此方法或getOutputStream()来编写主体,而不是同时调用两者
也就是说,您的代码不安全有两个原因:
可能会调用crystalReportViewer
,这会破坏上面引用的契约response.getOutputStream()
- 如果您先打印一些内容,然后将
传递给响应
很可能您的输出会破坏crystalReportViewer
输出,因为它将被预先设置crystalReportViewer