【问题标题】:Using Printwriter in servlet response在 servlet 响应中使用 Printwriter
【发布时间】:2011-12-15 01:48:25
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-20
      • 2015-03-15
      • 2013-09-30
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 2020-05-18
      相关资源
      最近更新 更多