redirect:重定向
该例子所需的项目结构
webapp
-----|> view
-----------|>hello.jsp
@RequestMapping("/jump")
public class DispatchController{
@RequestMapping("/test1")
public String test1(){
sout("重定向");
//------》如果有redirect:则需要填写完整的跳转路径/view/test1.jsp view前面的/不能少
return "redirect:/view/hello.jsp";
}
}
forward: 转发
@RequestMapping("/jump")
public class DispatchController{
@RequestMapping("/test1")
public String test1(){
sout("重定向");
return "redirect:/view/hello.jsp";
}
@RequestMapping("/test2")
public String test2(){
sout("转发到其他handler");
return "forward:test1";//相对路径的写法
return "forward:/jump/test1";//绝对路径
}
}
总结:
1.相对路径只能在同一个Controller中使用(@RequestMapping("/jump")类上面有加上这个一级路径),若要跳到其他控制器在使用相对路径就会出现意想不到的路径拼接问题,
2.所以访问其他控制器的话,最好使用绝对路径!!!
两种方式的选择
问题:
增删改若是采用转发的话,在页面刷新的话会出现重发该请求,会导致用户多次注册…之类的操作!
采用重定向,会结束上次请求使用的是新的请求,就不会出现上述情况
1.增删改后,为了防止重复提交,使用重定向结束请求 --》通过session延续
2.查询,使用转发跳转,将本次请求延续下去! --》通过request延续