【问题标题】:understanding out.println in servlets理解 servlet 中的 out.println
【发布时间】:2014-11-05 21:48:43
【问题描述】:

在 Servlets 中,out.println 如何将 html 文本写入容器的响应对象,而通常在 System.out.println() 中,它将文本写入控制台??

这在概念上给我带来了问题。

【问题讨论】:

    标签: java servlets console println


    【解决方案1】:

    PrintStreamPrintWriter 都不是根据控制台指定的。

    PrintStream 向另一个输出流添加了功能,即能够方便地打印各种数据值的表示形式。 PrintStream

    将对象的格式化表示打印到文本输出流。 PrintWriter

    它们都是关于格式化数据并将格式化的数据传递到输出流。任何输出流。默认情况下,在某些环境中,System.outSystem.err 最初引用的 PrintStream 对象会将其数据发送到某种控制台,但这只是那些特定的实例。

    即使是这些也可以更改。例如,在某些类型的测试中,将 System.out 替换为 PrintStream 将其数据发送到 ByteArrayOutputStream 会很有用。

    【讨论】:

    • 那么在 system.out 的情况下,printstream 会将格式化数据转发到哪个输出流类,以便像 servlet 中的 ServletOutputStream 一样打印到控制台?
    • @awhitesong 每个PrintStream 都被告知其输出流作为构造函数参数。请参阅我上面引用的文档。
    【解决方案2】:

    它使用来自 Javadoc 的 ServletOutputStream

    提供用于向客户端发送二进制数据的输出流。 ServletOutputStream 对象通常通过ServletResponse.getOutputStream() 方法检索。

    如果您查看System.out,您会发现它是PrintStream,它是OutputStream 的不同实现。

    【讨论】:

    • 在 servlets 中没有对 PrintWriter 类的引用,我们通过 servlets 代码中的 PrintWriter out=response.getwriter() 声明获得?
    • @awhitesong 这完全取决于PrintWriter 打印到的底层OutputStream。对于Servlet,打印到我在答案中链接到的OutputStream。此外,System.out 不是 PrintWriter
    【解决方案3】:

    如果在 servlet 的某个地方调用 out.println(...) 写入响应对象,则 out 必须是对响应对象的 OutputStream 的引用,或者是包装流和它。如果System.out 将输出发送到其他地方(通常会这样做),那么它是对不同OutputStream 的引用。

    名为out 的servlet 方法(或任何其他方法的)局部变量与System.out 完全无关,除非您将一个初始化为对另一个的引用。

    【讨论】:

    • servlet 中的 out 引用了 PrintWriter 类,而 PrintWriter 或 PrintStream 的 println() 通常会写入控制台,对吗?
    • 没有一般的“在servlet中”。如果不合格的out在某些servlet的某些方法中是有意义的,那么它可能是局部变量,尽管它也可以是特定 servlet 实现类的实例或类变量。这样的变量引用任何对象,如果有的话,它最后被设置为引用。在我的一个 servlet 中,它可能会被初始化为引用当前 ServletResponse 对象的输出流。
    猜你喜欢
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2012-04-28
    • 2022-11-20
    • 2019-01-20
    • 2019-04-17
    相关资源
    最近更新 更多