【问题标题】:Pass JSP output stream to a method将 JSP 输出流传递给方法
【发布时间】:2009-02-17 17:52:28
【问题描述】:

我创建了一个 MyClass 类,它打算将大量文本输出到 JSP。与其让 MyClass 对象返回要显示在页面上的字符串,我认为 MyClass 对象使用页面的输出流会更好。这是一个好/可能的主意吗?

正在测试可能的方法来做到这一点......

这些输出文本,但它显示在页面正文之前:

response.getWriter().append("test1");
response.getWriter().println("test2");
response.getWriter().write("test3");

这个错误并告诉我输出流已经得到

response.getOutputStream().println("test4");

【问题讨论】:

    标签: java jsp


    【解决方案1】:

    response.getWriter() 将为您提供不同于 JSP 中使用的编写器。如果要写入与 JSP 页面相同的写入器,则需要使用 JSP 页面中的 out 变量。不同之处在于 JSP 在标准 response.getWriter() 之上使用缓冲。这就是为什么您会在 JSP 正文之前看到您的数据写入 response.getWriter()

    您不能混合使用 response.getWriter()response.getOutputStream()。 JSP中的out变量是JspWriter实例包装writer获得response.getWriter()所以调用response.getOutputStream()会失败。

    你应该在你的 JSP 中做什么:

    <%
      new MyClass().writeToWriter(out);
    %>
    

    在 MyClass 中:

    public void writeToWriter(Writer w) {
        w.println("My data appended to correct writer");
    }
    

    【讨论】:

      【解决方案2】:

      让类返回一个迭代器,一次生成一小块文本。然后,您可以遍历 JSP 中的迭代器并在适当的位置打印数据块。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-17
        相关资源
        最近更新 更多