2014-11-03 44 views
1

在java 7中,Servlet接口位於包「javax.servlet」中。該接口定義了一個「service」方法,該方法返回void並接受ServletRequest和ServletResponse作爲輸入參數。爲什麼它設計爲返回void而不是ServletResponse?我對api設計感興趣,它似乎違反直覺。但可能有一個很好的理由。爲什麼Servlet.service旨在返回void?

http://docs.oracle.com/javaee/7/api/index.html?javax/servlet/ServletRequest.html

+0

默認'service()'在內部調用'doGet()'或'doPost()'等。Spring MVC的工作方式與您的期望相同。 – 2014-11-03 02:51:41

回答

2

ServletResponse不是由servlet產生的東西。

它由Web應用程序容器管理,並通過參數service注入,就像ServletRequest一樣。

通過與此ServletResponse實例交互(它具有檢索Writer或OutputStream以及設置標題的方法)來創建輸出。

這樣,只有容器需要關心管理套接字和其他低級別的東西。

另一種方法是做類似Spring MVC的應用程序方法,在該方法中創建並向容器返回某種業務對象(或字符串)。然後容器知道如何通過電線發送。

在大多數情況下,這個更高級的API更方便。但是,即使在Spring MVC中,您有時也需要訪問較低級別的API,例如,將不想在內存中構建的大型結果(您得到OutputStream並寫入它)進行流式處理。

相關問題