Springmvc中转发和重定向

  • 配置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模板语法准备的

posted @ 2024-07-08 00:59  文采杰出  阅读(1)  评论(0编辑  收藏  举报