【发布时间】:2014-11-05 21:48:43
【问题描述】:
在 Servlets 中,out.println 如何将 html 文本写入容器的响应对象,而通常在 System.out.println() 中,它将文本写入控制台??
这在概念上给我带来了问题。
【问题讨论】:
标签: java servlets console println
在 Servlets 中,out.println 如何将 html 文本写入容器的响应对象,而通常在 System.out.println() 中,它将文本写入控制台??
这在概念上给我带来了问题。
【问题讨论】:
标签: java servlets console println
PrintStream 和 PrintWriter 都不是根据控制台指定的。
PrintStream 向另一个输出流添加了功能,即能够方便地打印各种数据值的表示形式。 PrintStream
将对象的格式化表示打印到文本输出流。 PrintWriter
它们都是关于格式化数据并将格式化的数据传递到输出流。任何输出流。默认情况下,在某些环境中,System.out 和 System.err 最初引用的 PrintStream 对象会将其数据发送到某种控制台,但这只是那些特定的实例。
即使是这些也可以更改。例如,在某些类型的测试中,将 System.out 替换为 PrintStream 将其数据发送到 ByteArrayOutputStream 会很有用。
【讨论】:
PrintStream 都被告知其输出流作为构造函数参数。请参阅我上面引用的文档。
它使用来自 Javadoc 的 ServletOutputStream,
提供用于向客户端发送二进制数据的输出流。
ServletOutputStream对象通常通过ServletResponse.getOutputStream()方法检索。
如果您查看System.out,您会发现它是PrintStream,它是OutputStream 的不同实现。
【讨论】:
PrintWriter 打印到的底层OutputStream。对于Servlet,打印到我在答案中链接到的OutputStream。此外,System.out 不是 PrintWriter。
如果在 servlet 的某个地方调用 out.println(...) 写入响应对象,则 out 必须是对响应对象的 OutputStream 的引用,或者是包装流和它。如果System.out 将输出发送到其他地方(通常会这样做),那么它是对不同OutputStream 的引用。
名为out 的servlet 方法(或任何其他方法的)局部变量与System.out 完全无关,除非您将一个初始化为对另一个的引用。
【讨论】:
out在某些servlet的某些方法中是有意义的,那么它可能是局部变量,尽管它也可以是特定 servlet 实现类的实例或类变量。这样的变量引用任何对象,如果有的话,它最后被设置为引用。在我的一个 servlet 中,它可能会被初始化为引用当前 ServletResponse 对象的输出流。