- 配置IndexController
package com.powernode.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class IndexController {
@RequestMapping("/")
public ModelAndView index(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("index");
return modelAndView;
}
}
- 配置index.html頁面
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a th:href="@{/a}">A頁面</a><br>
<a th:href="@{/b}">B頁面</a><br>
</body>
</html>
- 配置ForwardController類
package com.powernode.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ForwardController {
@RequestMapping("/a")
public String toA(){
//返回邏輯檢視名稱view物件為ThymeleafView
return "a";
//返回的不是邏輯檢視名稱,而是以轉發的方式跳轉到另一個頁面,轉發底層會建立InternalResourceView然後根據"forward:/b"建立ThymeleafView:"b"物件
// return "forward:/b";
//重定向底層會建立RedirectView物件,見圖1,然後根據"redirect:/b"建立ThymeleafView物件,見圖2
// return "redirect:/b";
}
@RequestMapping("/b")
public String toB(){
return "b";
}
}
圖1:
圖2:
這說明轉發底層建立的檢視物件是:InternalResourceView。
思考:既然會建立InternalResourceView,應該會對應一個檢視解析器呀(InternalResourceViewResolver)?但是我在springmvc.xml檔案中只配置了ThymeleafViewResolver,並沒有配置InternalResourceViewResolver呀?這是為什麼?
這是因為forward: 後面的不是邏輯檢視名,而是一個請求路徑。因此轉發是不需要檢視解析器的。
另外,轉發使用的是InternalResourceView,也說明了轉發是內部資源的跳轉。(Internal是內部的意思,Resource是資源的意思。)同時InternalResourceViewSpring 也是MVC框架內建的,專門為JSP模板語法準備的