先来复习一下转发和重定向:
重定向的流程:
浏览器发送请求->服务器运行->相应请求------->,返回给浏览器一个新的地址与响应码,浏览器进行判断为重定向,自动发送一个新的请求给服务器,请求地址为刚刚服务器发送给浏览器的地址。->服务器运行->相应请求
转发的流程:
发送请求 -->服务器运行-->进行请求的重新设置,例如通过request.setAttribute(name,value)-->根据转发的地址,获取该地址的网页-->响应请求给浏览器
那么在SpringMVc中是如何处理这两种方式的呢?
一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理。如果返回的字符串中带 forward: 或 redirect: 前缀时,SpringMVC 会对他们进行特殊处理:将 forward: 和
redirect: 当成指示符,其后的字符串作为 URL 来处理。
ex:
@RequestMapping("/springMvc")
@Controller
public class handler {
//测试重定向
@RequestMapping("/testRedirect")
public String testRedirect(){
System.out.println("testRedirect");
return "redirect:/index2.jsp";
}
}
浏览器中显示出了资源的路径
测试转发:
@RequestMapping("/springMvc")
@Controller
public class handler {
//测试重定向
@RequestMapping("/testRedirect")
public String testRedirect(){
System.out.println("testRedirect");
return "forward:/index2.jsp";
}
}
浏览器中并没有把资源的地址显示出来,因为转发是在服务器内部完成的。