1. 程式人生 > >解決:javax.servlet.ServletException: Circular view path []: would dispatch back to the current....

解決:javax.servlet.ServletException: Circular view path []: would dispatch back to the current....

                                     這是在spring boot/MVC 中出現的一個異常

原因:

當沒有宣告ViewResolver時,spring會註冊一個預設的ViewResolver,就是JstlView的例項, 該物件繼承自InternalResoureView。 JstlView用來封裝JSP或者同一Web應用中的其他資源,它將model物件作為request請求的屬性值暴露出來, 並將該請求通過javax.servlet.RequestDispatcher轉發到指定的URL. Spring認為, 這個view的URL是可以用來指定同一web應用中特定資源的,是可以被RequestDispatcher轉發的。 也就是說,在頁面渲染(render)之前,Spring會試圖使用RequestDispatcher來繼續轉發該請求。

錯誤程式碼:

示例1:

@RequestMapping("/index")
public void query(){
   //程式碼內容
}

示例2:

@RequestMapping("/index")
public String query(){
    //程式碼內容
    return null;
}

解決方案:

通過原因分析,造成問題有兩個因素:

  1. 預設轉發
  2. view和path同名

所以,解決方案如下 1.消除預設轉發 2.修改view和path,讓他們不同名

例:

@RequestMapping("/index")
public String query(){
    //程式碼內容
    return "succeed"; //這裡需要返回一個和"/index"不同名的view
}