一、转发是从客户端-服务器端-客户端,是同一次请求,不会执行转发后的代码,并且请求地址不会变化;
二、重定向客户端-服务器端-客户端-服务器端-客户端,是两次不同请求(request),会执行重定向之后的代码,并且请求地址发生变化;
三、转发的过程只需要一个服务器,重定向的过程可以有多个不同服务器下完成;
四、从上面的几点也可以得知转发响应的速度快于重定向;
在Controller中的转发和重定向语句
@RequestMapping("/addAccount.do")
public String add(Account account){
account.setStatus("1");
account.setCreatime(
new Timestamp(System.currentTimeMillis()));
//新增数据
accountDao.save(cost);
//重定向
return "redirct:findAccount.do";//这里会让客户端再次发送请求到findAccount.do代码块执行代码
}
@RequestMapping("/findAccount.do")
public String find(AccountPage page,Model model){
List<Account> list = accountDao.findByPage(page);
model.addAttribute("account",list);
page.setRows(accountDao.findRows(page));
model.addAttribute("accountPage",page);
//转发
return "account/account_list";//这里spring会自动给路径加上前缀和后缀:/WEB-INF/account/account_list.jsp
转发过程:浏览器(地址:http://www.xxx.com:8090/NETCTOSS/account/findAccount.do),客户端向服务器发送findAccount.do请求,服务器接收请求调用find方法,将结果转发给account_list.jsp页面进行解析并返回给客户端浏览器,浏览器此时的地址保持不变。
重定向过程:浏览器(地址:http://www.xxx.com:8090/NETCTOSS/account/addAccount.do)客户端向服务器发送addAccount.do请求,服务器接收请求调用调用add方法,并向客户端发送redirct重定向响应,客户端浏览器接收重定向响应后,会自动再发送findAccount.do请求,服务器接收请求调用find方法,将结果转发给account_list.jsp页面进行解析并返回给客户端浏览器,如此类推。此时浏览器地址已变成(http://www.xxx.com:8090/NETCTOSS/account/findAccount.do)。服务器可以有多个重定向,但重定向的过程中,传输的信息可能会丢失。
纯属个人理解,如有错误还望赐教。