Spring boot 頁面跳轉詳解


今天處理Springboot統一異常攔截的時候,遇到了頁面跳轉的問題,折騰了半天才大致弄明白了其中的坑坑窪窪。

有三個方面的問題需要注意:

一.jar包依賴:Springboot有自己默認的模板引擎。一定要引用相應的依賴包。我就是沒引用,導致一直無法跳轉。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

二.注解:@ResponseBody

  在@Controller 控制層,是否為請求地址添加該注解也是影響跳轉是否成功的因素。@responseBody注解的作用是將controller的方法返回的對象通過適當的轉換器轉換為指定的格式之后,然后直接輸出到頁面,並不會走視圖處理器。

例如1:

@RequestMapping("/tiaozhuan.htm")
@responseBody
public ModelAndView tiaozhuan() { ModelAndView view = new ModelAndView("/403.html"); return view; }

GET請求:http://localhost:9999/tiaozhuan.htm ;加不加@responseBody都可以正常地訪問403.html頁面(springboot默認訪問 src/main/resources 下的 templates文件夾目錄)

例如2:

@RequestMapping("/tiaozhuan.htm")
public String tiaozhuan() {        
    return "/403.html";
}

GET請求:http://localhost:9999/tiaozhuan.htm ;不加@responseBody,可以正常訪問,加上則訪問的內容為:/403.html

例如3:

@RequestMapping("/tiaozhuan.htm")
public String tiaozhuan() {
    return "redirect:/403.html";
}

GET請求:http://localhost:9999/tiaozhuan.htm ;不加@responseBody,可以正常訪問(該種為重定向,默認目錄為src/main/resources 下的 static文件夾目錄);加上           @responseBody則訪問的內容為:/403.html

三.post與get請求:post請求與get請求也會有差別

  問題:使用Ajax向SpringMVC中Controller層發送POST請求,無論我們使用return "index.jsp"、轉發、重定向還是 ModelAndView,都無法解決頁面跳轉的問題。

  原因:Ajax實際上就是通過XMLHttpRequest來發送請求對象向服務器發送異步請求,從服務器獲取數據,然后使用JS來操作DOM而更新頁面。服務器端返回的是純文本流,可以是xml格式,html格式,js格式,也可以是字符串格式。但是客戶端獲取ajax異步獲取結果后,不是直接顯示在頁面上,而是必須要先由js處理,完成之后才能顯示在頁面。當Ajax請求后,返回的只能是字符流,不是頁面。<詳細鏈接:https://www.cnblogs.com/boycelee/p/6243646.html>

例如1:
@RequestMapping("/tiaozhuan.htm")
public ModelAndView tiaozhuan() {
    ModelAndView view = new ModelAndView("/403.html");
    return view;
}

POST請求:http://localhost:9999/tiaozhuan.htm ;ajax報錯,但是http請求成功。但是無法跳轉頁面。

例如2:
@RequestMapping("/tiaozhuan.htm")
public String tiaozhuan() {
    return "redirect:/403.html";
}

POST請求:http://localhost:9999/tiaozhuan.htm ;ajax報錯304,並且無法跳轉界面

  所以,當Ajax的post請求后,返回的只能是字符流,不是頁面,無法實現跳轉功能。

 

總結:在springmvc框架下,在前端ajax的post請求下,后端是無法實現頁面跳轉的,只有使用get請求才能實現跳轉。所以post請求下的頁面跳轉只能交給前端去實現。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM