- 配置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对象为ThymeleafViewreturn "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模板语法准备的