2015-02-24 105 views
10

我不明白我應該用什麼。 我有兩個頁面 - intro.jsp(1)和booksList.jsp(2)。我爲每個頁面創建了一個控制器類。 第一頁有按鈕,打開第二頁:Spring MVC控制器:「return forward」,「return redirect」和「return jsp file」有什麼區別

<form method="GET" action="/request-list"> 
     <input type="submit"/> 
</form> 

第一個問題是:我不知道是否正確這個按鈕。它運作良好,但按下此按鈕後我有問號。

第二個問題是:當我按下這個按鈕,方法與旁邊的註釋被稱爲(控制器的第二頁):

@RequestMapping(value = "/books") 
@Controller 
public class BooksListController { 

    @RequestMapping 
    public String booksList() { 
     return "jsp/books/booksList"; 
    } 
} 

我應該回用這種方法?換句話說,我如何從第一頁跳到第二頁?

  1. return "redirect:/books"; returns http://localhost:8080/books?
  2. return "jsp/books/booksList"; returns http://localhost:8080/request-list?
  3. return "forward:/books"; returns http://localhost:8080/request-list?

我看到的結果是一樣的:所有這些字符串給了我同樣的頁面(第2頁打開)。 在哪些情況下,我應該使用「重定向」,「前進」,「page.jsp」?我也讀過Post/Redirect/Get article。 POST方法處理後,我必須使用「重定向」嗎?

+0

你是什麼意思「按下此按鈕後有問號」?無論如何,因爲您提交/請求列表,因此不會打電話/預訂 – 2015-02-24 14:13:34

+0

有問號 - 返回http:// localhost:8080/request-list **?**另外我沒有打電話/預訂。我打電話/書。此頁面必須顯示書籍列表。 – Argamidon 2015-02-24 14:45:06

回答

19

第一個問題是:我不確定這個按鈕是否正確。它 工作正常,但按下此按鈕後我有問號。

好的,它插入一個問號,因爲您使用GET http方法。您需要使用POST方法來傳遞請求負載中的數據。


return "redirect:/books"; 

它返回給客戶端(瀏覽器),其解釋http響應和自動呼叫重定向URL

return "jsp/books/booksList"; 

它處理JSP併發送HTML向客戶端

return "forward:/books"; 

它傳輸請求並直接在服務器端調用URL。


要決定使用哪一個你必須要考慮每一種方法的一些方面:

前鋒:速度更快,客戶端瀏覽器不參與,瀏覽器顯示原始URL,該請求被轉移做轉發的網址。

重定向:速度較慢,涉及客戶端瀏覽器,瀏覽器顯示重定向的URL,它會向重定向的URL創建一個新請求。

+0

謝謝,但我知道。我問 - 我應該在哪些情況下使用它們? – Argamidon 2015-02-24 16:40:46

+0

答案編輯瞭解釋 – 2015-02-24 17:40:21

+0

據我所知,我必須在數據更改後使用「重定向」。我對嗎? – Argamidon 2015-02-25 09:16:48