社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
重定向和转发区别:
1、请求次数:重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址;重定向至少请求两次,转发请求一次;
2、地址栏不同:重定向地址栏会发生变化,转发地址栏不会发生变化;
3、是否共享数据:重定向两次请求不共享数据,转发一次请求共享数据(在request级别使用信息共享,使用重定向必然出错);
4、跳转限制:重定向可以跳转到任意URL,转发只能跳转本站点资源;
5、发生行为不同:重定向是客户端行为,转发是服务器端行为;
@RequestMapping("/forw")
class ForwardController{
@RequestMapping("/test1")
public String testForward(){
System.out.println("test forward1");
// 转发跳转 /views/users.jsp
// return "views/users";//和下一行等价
return "forward:/views/users.jsp";
}
@RequestMapping("/test2")
public String testForward2(){
System.out.println("test forward2");
//转发到 /forw/test1
//return "forward:test1";//相对路径(转发到本类中的test1)
//转发到 /forw/test1
return "forward:/forw/test1"; //绝对路径
}
}
补:
@RequestMapping("/test2")
public String test2(){
System.out.println("test2");
//return "forward:/jump/test1";//转发
return "forward:test1";//相对路径
}
@RequestMapping("/redir")
class RedirectController{
@RequestMapping("/test1")
public String testRedirect1(){
System.out.println("test redirect1");
//重定向到 /redir/test1
//return "redirect:test1"; //相对路径(转发到本类中的test1)
return "redirect:/redir/test1";//绝对路径
}
@RequestMapping("/test2")
public String testRedirect2(){
System.out.println("test redirect2");
//重定向到 /views/users.jsp
return "redirect:/view/user.jsp";
}
}
补:
重定向到静态资源
@RequestMapping("/test3")
public String test3(){
System.out.println("test3");
return "redirect:/hello.jsp"; // 重定向到hello.jsp
}
重定向到其他方法
@RequestMapping("/test4")
public String test4(){
System.out.println("test4");
return "redirect:test3";
//return "redirect:/jump/test3"
}
在增删改之后,为了防止请求重复提交,重定向跳转
在查询之后,可以做转发跳转
查:
使用转发,重新查询。
@RequestMapping("/query")
public String test5(){
System.out.println("query数据1");
return "forward:test1";
}
http://localhost:8080/jump/query
使用转发到test1,地址不变。每次都重新查一遍
删除:
需要使用重定向,地址会变。这样刷新的时候就不会再重复删除。
@RequestMapping("/delete")
public String test6(){
System.out.println("delete数据1");
return "redirect:test1";
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!