【SpringMVC】Servlet转发和重定向的区别

1. 概述

转发和重定向是Servlet中进行页面跳转的两种方式,下图展示了其工作原理,左图为转发,右图为重定向。
左转发,右重定向
从上图可以看出,二者最大的区别就是:转发是在服务器内部进行的,只有一次请求响应;而重定向是客户端的行为,有两次请求响应。

正是因为二者工作方式的差异,可以推出以下几点需要注意的地方:

  • 如果 Servlet1 在request域中共享数据,那么经过转发之后,Servlet2 也是可以获取该数据的。如果使用重定向则会报错,因为两个 Servlet 已经不在一个请求域了。
  • 重定向后浏览器的地址栏会变化,转发地址栏不会变。
  • 重定向可以跳转到任意的URL,转发只能在本站的资源跳转。

2. SpringMVC中使用转发和重定向

2.1 转发视图

SpringMVC中默认的转发视图是InternalResourceView

SpringMVC中创建转发视图的情况:

当控制器方法中所设置的视图名称以"forward:"为前缀时,创建InternalResourceView视图,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀"forward:"去掉,剩余部分作为最终路径通过转发的方式实现跳转

@RequestMapping("/testForward")
public String testForward(){
    
    
    return "forward:/testHello";
}

2.2 重定向视图

SpringMVC中默认的重定向视图是RedirectView

当控制器方法中所设置的视图名称以"redirect:"为前缀时,创建RedirectView视图,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀"redirect:"去掉,剩余部分作为最终路径通过重定向的方式实现跳转

@RequestMapping("/testRedirect")
public String testRedirect(){
    
    
    return "redirect:/testHello";
}

2.3 Thymeleaf

在 SpringMVC 中我们通常使用 Thymeleaf 作为视图渲染技术,在配置文件中配置 Thymeleaf 的视图解析器之后,控制器的方法直接返回视图的名称即可,视图解析器会自动加上前缀后缀然后转发,非常方便。注意, Thymeleaf 默认使用的是转发方式实现跳转。

@RequestMapping("/testHello")
public String testHello() {
    
    
return "hello";

Thymeleaf 的视图解析器会加上前缀"/“和后缀”.html",然后跳转到hello.html。

猜你喜欢

转载自blog.csdn.net/weixin_43390123/article/details/124124744