在servlet响应中使用Printwriter

Vic*_*tor 5 java servlets response printwriter crystal-reports-2008

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

PrintWriter out = response.getWriter();
crystalReportViewer.processHttpRequest(request, response, context,null);
Run Code Online (Sandbox Code Playgroud)

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

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

Tom*_*icz 7

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

final PrintWriter writerA = response.getWriter();
final PrintWriter writerB = response.getWriter();
writerA.println("A1");
writerB.println("B1");
writerA.println("A2");
writerB.println("B2");
Run Code Online (Sandbox Code Playgroud)

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

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

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

据说你的代码不安全有两个原因:

  • crystalReportViewer可能会打电话response.getOutputStream()打破上面引用的合同

  • 如果你先打印一些东西,然后传递responsecrystalReportViewer你的机会,那么你的输出会打破crystalReportViewer输出,因为它会被预先添加.