转自:
重定向:
我们将用户的定向到另一个视图(jsp)中处理,此操作是一个客户端行为,类似与url的链接操作
转发:
将用户的请求转发到另一个视图或controller处理,此操作是一个服务器端行为,请求中的信息会一起转发至新的新的对象中,不会因为转发而造成信息丢失
注意事项:
转发是后端行为(服务器级别),重定向是一个前端行为(客户端级别)
一、转发详解
当浏览器发送 http 请求,Web 服务器收到此请求,
运用Java的内部方法在容器内进行转发的请求和处理,并将转发后所生成的信息发送给浏览器
转发所产生的效果
浏览器进行一次请求操作,而返回的确是容器内其它页面的内容,客户端无任何变化 ,
转发的内容只能为容器内的信息
二、重定向过程
当浏览器发送Http请求,tomcat发送302状态码即新的url给浏览器,客户端根据302自动发送新的http请求,此时浏览器中显示的为新url
此处重定向的url可为任意url
Spring MVC的说明
在Spring MVC 框架中,控制器类中处理方法的 return 语句默认情况下为一个转发(转发视图)
@RequestMapping("/userList") public String userList() { return "userList"; //转发至userList.jsp }
例:
Spring MVC 框架中,重定向与转发
package com.java265.springmvc; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/index") public class IndexController { @RequestMapping("/print") public String print() { //转发到一个请求方法(同一个控制器类可以省略/index/) return "forward:/index/isShowInfo"; } @RequestMapping("/isShowInfo") public String isShowInfo() { //重定向到一个请求方法 return "redirect:/index/printInfo"; } @RequestMapping("/printInfo") public String printInfo() { //转发到一个视图 return "printInfo"; } }
注意事项:
在Spring MVC框架中,
无论转发还是重定向,都需符合视图解析器的配置(springmvc.xml),
如直接转发到一个不需要 DispatcherServlet 的资源,如:
return "forward:/html/test.html";
则需要使用 mvc:resources 配置:
<mvc:resources location="/html/" mapping="/html/**" />