举例
小明带女朋友想去上海 Disney 玩,从海南坐飞机到了上海。第一次来上海,人生地不熟的,打个车去Disney吧。 路上打车老师傅说,“现在
Disney 的人太多了,一天下来排队玩不了几个项目, 别花冤枉钱了,去海昌公园玩吧”
小明一想,好不容易来一次,不能排一天的队,就玩两个项目! 打开滴滴打车软件,修改了目的地-“上海海昌公园”
小明带女朋友想去上海 Disney 玩,从海南坐飞机到了上海。第一次来上海,人生地不熟的,打个车去Disney吧。 到了Disney
之后,小明发现排队进园的人上千米,跟女朋友商量了一下,重新打车,去海昌公园!
这两个例子,在车上改目的地,是“请求转发”, 重新打车是“请求重定向”
请求转发时,浏览器地址栏中的地址不会变换,二请求重定向时,浏览器地址栏中的地址会变化。也就是请求转发通过浏览器发了一次请求,请求重定向是通过浏览器发了2次请求。
SpringMVC中如何使用请求转发和请求重定向?
1.请求页
<br>
<a th:href="@{/toDisneyForward}">to Disney forward</a>
<br>
<a th:href="@{/toDisneyRedirect}">to Disney redirect</a>
- SpringMVC控制器方法
@RequestMapping("/toHaiChang")
public String toHaiChang(ModelMap modelMap){
modelMap.addAttribute("haichangdesc", "welcome to Hai Chang Ocean Park.");
return "arrive";
}
@RequestMapping("/toDisneyRedirect")
public String testRedirect(ModelMap modelMap){
modelMap.addAttribute("disneydesc", "welcome to Disney.");
return "redirect:/toHaiChang";
}
@RequestMapping("/toDisneyForward")
public String testForward(ModelMap modelMap){
modelMap.addAttribute("disneydesc", "welcome to Disney.");
return "forward:/toHaiChang";
}
- 执行完成之后的 arrive.html
<p th:text="${disneydesc}"></p>
<p th:text="${haichangdesc}"></p>
- 执行结果
对于转发,框架中重定向视图是 InternalResourceView 的实例, 重定向框架中重定向视图是 RedirectView 的实例。
请求转发和请求重定向的注意点
-
转发可以请求request域中的数据, 而重定向之后,最开始request域中的数据丢失了,因为是两次请求。
-
转发可以访问WEB-INF中的资源,而重定向不可以直接访问(浏览器不可以直接访问WEB-INF中的资源)。
-
转发不可以跨域,只能访问服务器中的资源, 请求重定向可以跨域访问,可以访问本服务器之外的资源,比如访问百度、谷歌等外部Internet resource。