2012-02-05 218 views
7

我想知道在servlet中爲什麼我們在同一個程序中一起使用doGet和doPost方法。它有什麼用處?servlet doGet和doPost方法

以下代碼的含義是什麼?
爲什麼要從doPost調用doGet方法?我完全不清楚這個代碼。

public class Info extends HttpServlet 
{ 

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

} 


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

感謝

回答

2

簡單來說,就是使servlet泛化,以便即使我們將來改變請求方法,也不需要編輯servlet,這將減少將來修改應用程序的工作量。

20

doGet()處理傳入的HTTP請求GETdoPost()處理... POST請求。也有處理PUT,DELTE等的方法。

如果您使用GET(默認)提交表單,將調用doGet()。如果您使用POST提交,則此時將調用doPost()。如果您僅實現doPost(),但表單將使用GET,則servlet容器將引發異常。

在很多程序中,服務器並不關心請求是使用GET還是POST,這就是爲什麼一個方法只是委託給另一個。這實際上是一種不好的做法,因爲這些方法本質上是不同的,但很多教程都是這樣寫的(好或壞)。

+0

什麼時候你真的想區分servlet中的get和post?這將是什麼樣的用例(或需求)? – 2012-02-05 10:19:54

+4

GET應該獲取資源。它必須是冪等的,不應該修改服務器中的任何東西。 POST不是冪等的,用於創建,更新或刪除服務器上的某些內容。當必須使用GET時,沒有理由使用POST,並且在使用POST時使用GET是不好的做法,如果用戶刷新頁面或瀏覽歷史記錄,可能會導致各種問題。通常使用GET來顯示錶單,並通過POST提交。 – 2012-02-05 10:23:13

+0

'doGet()'爲'/ users'返回一個列表,'doPost()'爲同一個URL(servlet)創建新的用戶。當然,我可以將這兩種方法委託爲一個,然後使用['HttpServletRequest.getMethod()'](http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html# getMethod())但它只會使問題複雜化。 – 2012-02-05 10:25:06

1

是不是與一個get請求有關,允許在瀏覽器窗口中的URL中看到參數,並且post請求將參數合併到請求的結構中,因此隱藏在視圖中。您的請求將如何作爲獲取或帖子從客戶端獲得。我認爲這是與安全和避免SQL注入有關,但它不是我的領域。希望有一位專家對我的觀點/評論有正確的認識,因爲我自己需要了解這一點。

3

這是爲了處理這兩種請求類型,例如。 http和GET和POST。根據應用程序的要求,人們可能會選擇將請求類型保持爲GET或POST,因此如果您處理它們兩項,將會出錯。而如果你要處理他們兩人以類似的方式,那麼你可以創建另一個方法DoSomething的,並從您的doGet和doPost方法調用它的更多信息see this answer

0

正如你指出here你的確可以調用第三個方法,但你也可以覆蓋HttpServlet母類中的service()方法,以便它調用alawys一種獨特的方法。

相關問題