2014-11-05 47 views
1

如何在Servlets中,out.println將html文本寫入容器的響應對象,通常在System.out.println()中,它將文本寫入控制檯?瞭解servlets中的out.println

這在概念上給我造成了問題。

回答

3

PrintStreamPrintWriter都不是根據控制檯指定的。

PrintStream將功能添加到另一個輸出流,即可方便地打印各種數據值的表示。 PrintStream

將格式化對象的表示形式打印到文本輸出流。 PrintWriter

它們都是關於格式化數據並將格式化數據傳遞給輸出流。任何輸出流。默認情況下,在某些環境中,System.outSystem.err中的每個最初引用的對象都會將其數據發送到某種控制檯,但這只是這些特定的實例。

即使是那些可以改變。例如,在某些類型的測試中,將System.out替換爲PrintStream可以將其數據發送到。

+0

因此,在system.out的情況下,printstream將輸出流類轉發到哪個outputstream類中,以便像servlet中的ServletOutputStream一樣將其輸出到控制檯? – awhitesong 2014-11-05 22:56:21

+0

@awhitesong每個'PrintStream'都被告知它的輸出流是一個構造參數。請參閱上面引用的文檔。 – 2014-11-05 23:14:46

2

它使用從的Javadoc一個ServletOutputStream

提供的二進制數據發送到客戶端的輸出流。 A ServletOutputStream對象通常通過ServletResponse.getOutputStream()方法檢索。

如果你看看System.out你可以看到,這是一個PrintStream這是一個不同的實施OutputStream

+0

沒有在servlet中引用PrintWriter類,我們通過PrintWriter out = response.getwriter()獲取servlet代碼中的聲明? – awhitesong 2014-11-05 22:13:39

+0

@awhitesong它完全依賴於'PrintWriter'打印到的底層'OutputStream'。在'Servlet'的情況下,它打印到我在我的答案中鏈接到的'OutputStream'。另外,'System.out'不是'PrintWriter'。 – 2014-11-05 22:15:25

0

如果servlet中的某個位置調用out.println(...)寫入響應對象,則out必須是對響應對象的OutputStream或包裝流及其的引用。如果System.out發送到其他地方的輸出(通常它會這樣做),那麼它是對不同OutputStream的引用。

一個名爲out的servlet方法(或任何其他方法)局部變量與System.out完全無關,禁止您將其中一個初始化爲另一個的引用。

+0

Servlet中有對PrintWriter類的引用,PrintWriter或PrintStream的println()通常寫入控制檯的權利? – awhitesong 2014-11-05 22:07:57

+0

**沒有通用的「out in servlets」。**如果在某些servlet的某些方法中out-out有意義,那麼它可能是局部變量,儘管它也可能是特定servlet的實例或類變量實現類。這樣的變量指的是最後設置的任何對象,如果有的話。在我的一個servlet中,它可能被初始化爲引用當前ServletResponse對象的輸出流。 – 2014-11-05 22:23:44