2011-11-21 61 views
1

我想用Java編寫一個HTML代碼,使用一個servlet。我讀到的方法doGet()和我寫了這個簡單的例子在Java中使用doGet()編寫HTML代碼

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { 
PrintWriter out = response.getWriter(); 
response.setContentType("text/html"); 
out.println("<H1>Hello from a Servlet</h2>"); 

但它並沒有給在瀏覽器中任何東西,可有人告訴我有什麼不對?

+1

你是如何在servlet容器中配置servlet的? –

+0

嘗試首先檢查服務器日誌 –

+0

也許是out.close();可以幫助 – Arindam

回答

2

您通過調用response.getWriter();得到的標準PrintWriter不會自動刷新其緩衝區。這是一個錯誤/功能。

doGet()的末尾加上out.flush()

另請注意,PrintWriter.close()不會沖洗。這是一個錯誤; PrintWriter/PrintStream是唯一沒有關閉的輸出類。

[編輯]爲了確保沒有其他問題讓你困惑,在方法中添加一個斷點並在調試器中運行它。您還應該添加註釋@Override以確保您的方法簽名是正確的。

+0

Aaron,你確定沖洗是必要的嗎?看來你可能只是寫而不沖洗。 – Alexandr

+0

是的,我確定。會發生什麼是輸出進入'PrintWriter'的緩衝區,該'PrintWriter'包裝了下面的'OutputStream'。 Servlet API將刷新'OutputStream',但它不會關閉或刷新'PrintWriter'。這意味着輸出永遠不會刷新到流中,因此您在瀏覽器中沒有任何東西。 –

+0

廢話。如果你遇到過這種情況,那麼你正在使用一個破壞的'HttpServletReponseWrapper'實現。 – BalusC

0

看來你並沒有真正覆蓋doGet。您錯過了ServletException例外。

+0

沒關係。重寫方法可以拋出更少的異常(但不會更多)。 –

+0

我的錯。抱歉。 – Alexandr