提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、转发与重定向的区别
转载文章,原文地址:http://www.2cto.com/kf/201107/97118.html
区别一:
重定向时 浏览器 上的网址改变
转发是浏览器上的网址不变
区别二:
重定向实际上产生了两次请求
转发只有一次请求
重定向:
发送请求 -->服务器运行–>响应请求,返回给浏览器一个新的地址与响应码–>浏览器根据响应码,判定该响应为重定向,自动发送一个新的请求给服务器,请求地址为之前返回的地址–>服务器运行–>响应请求给浏览器
转发:
发送请求 -->服务器运行–>进行请求的重新设置,例如通过request.setAttribute(name,value)–>根据转发的地址,获取该地址的网页–>响应请求给浏览器
区别三:
重定向时的网址可以是任何网址
转发的网址必须是本站点的网址
二、转发视图
index页面传入url代码
<a th:href="@{/test/forward}">测试forward</a><br>
控制层代码
SpringMVC中默认的转发视图时InternalResourceView(祥见testforward)
SpringMVC中创建转发视图的情况;
当控制器方法中设置的视图名称以“forward:”为前缀时,创建InternalResourceView视图,此时的视图名称不会被SpringMVC
配置文件中所配置的视图解析器解析,而是会将前缀forward:去掉,剩余部分作为最终路径通过转发实现跳转
(因为当前工程使用了ThymeleafView;所以并不会太多的使用这个方法,因为使用它的时候不会被ThymeleafView;渲染)
@RequestMapping("/test/forward")
public String testForward(){
return "forward:/test/Model";
}
转发到的方法;
@RequestMapping("/test/Model")
public String TestMAVbyModel(Model model){
System.out.println(model.getClass().getName());
//输出org.springframework.validation.support.BindingAwareModelMap
model.addAttribute("testModel","hello,Model");
return "success";
}
三、ThymeleafView
因为在这个工程下。我们在Spring.xml文件中设置了
<bean id="viewResolver"class="org.thymeleaf.spring5.view.ThymeleafViewResolver"/>
所以当控制器方法中所设置的视图名称没有任何前缀时,此时的视图名称会被SpringMVC配置文件中所配置的视图解析器解析
视图名称拼接视图前缀和视图后缀所得到的最终路径,会通过转发方式实现跳转
四、重定向视图
index页面传入url代码
<a th:href="@{/test/redirect}">测试redirect</a><br>
控制层代码
SpringMVC中默认的重定向视图是RedirectView(祥见testforward)
当控制器方法中设置的视图名称以“redirect:”为前缀时,创建视图RedirectView,此时的视图名称不会被SpringMVC
配置文件中所配置的视图解析器解析,而是会将前缀redirect:去掉,剩余部分作为最终路径通过重定向的方式实现跳转
在业务处理的时候,一般失败用转发,成功用重定向
例如;用户登录,失败用转发,成功用重定向
@RequestMapping("/test/redirect")
public String testRedirect(){
return "redirect:/test/Model";
}
转发到的方法;
@RequestMapping("/test/Model")
public String TestMAVbyModel(Model model){
System.out.println(model.getClass().getName());
//输出org.springframework.validation.support.BindingAwareModelMap
model.addAttribute("testModel","hello,Model");
return "success";
}