我创建了一个MyClass类,它打算向JSP输出大量文本。我认为MyClass对象使用页面的输出流更好。这是一个好/可能的想法吗?
测试可能的方法......
这些输出文本,但它显示在页面正文之前:
response.getWriter().append("test1");
response.getWriter().println("test2");
response.getWriter().write("test3");
这个错误告诉我输出流已经 getten :
response.getOutputStream().println("test4");
答案 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中的迭代器并在适当的位置打印数据块。