将JSP输出流传递给方法

时间:2009-02-17 17:52:28

标签: java jsp

我创建了一个MyClass类,它打算向JSP输出大量文本。我认为MyClass对象使用页面的输出流更好。这是一个好/可能的想法吗?

测试可能的方法......

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

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

这个错误告诉我输出流已经 getten

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

2 个答案:

答案 0 :(得分:9)

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

您不能混用response.getWriter()response.getOutputStream()。 JSP中的out变量是获取response.getWriter()的JspWriter实例包装编写器,因此调用response.getOutputStream()将失败。

你应该在JSP中做些什么:

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

在MyClass中:

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

答案 1 :(得分:1)

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