2013-11-22 87 views
2

我從來沒有對此提出質疑,但爲什麼爲什麼Servlet的doGet() - 方法將響應作爲參數而不是返回值?

public void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException{} 

,而不是

public HttpServletResponse doGet(HttpServletRequest request) 
    throws ServletException, IOException{} 

第二個版本不會在語義上更有意義嗎?

+0

也許響應可以在單獨的線程中以異步方式發送,而不必等待doGet的所有處理完成。不能說我確定。 – Jaydee

+1

你打算如何創建它?你爲什麼不使用容器創建的? – BalusC

+0

@BalusC我不打算創建一個Servlet。我今天偶然發現了一些Servlet代碼,這個問題出現在我的腦海裏。 – Lester

回答

6

HttpServletResponse是一個相當複雜的類,要求您瞭解連接套接字等。如果你不得不返回一個,那麼大部分代碼將會是相同的樣板來構造它。相反,servlet容器爲你工作,爲你提供一個隨時可用的對象和各種有用的工作方法。

現在接下來的問題是爲什麼他們決定讓HttpServletResponse成爲一個複雜的對象,而不僅僅是返回一個簡單的POJO。對於其中一種情況,該體系結構不會允許您在擁有所有數據之前開始寫入任何流式響應。

相關問題