[SpringMVC] 转发与重定向

定义

请求重定向

客户端行为。从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变

response.sendRedirect("request.jsp")

请求转发

服务器行为。是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变

//将内置对象request与response转发到request.jsp中
request.getRequestDispatcher("request.jsp").forward(quest,response);

两者区别

跳转范围

重定向:还可以重新定向到同一站点不同应用程序中的资源甚至可以定向到一绝对的URL
请求转发:只能将请求发给同一个Web应用中的组件

URL

重定向:可以看到目标页面的URL
转发:只能看到第一次访问页面的URL

reqeust、response的区别

重定向:调用者和被调用者属于两个独立访问请求和响应过程
转发:调用者和被调用者之间共享相同的request和response对象

注意

重定向:跳转后必须加上return,不然页面虽然跳转了,但是还会执行跳转后面的语句
转发:是执行了跳转页面,下面代码就不会执行了
转发与重定向区别

前端实现

<!-- 自动跳转-->
<meta http-equiv="Refresh" content="1;url=home"/>

JS文件中实现

重定向

//第一种
window.location.href="href.PHP?backurl="+window.location.href;
//第二种
window.history.back(-1); //返回上一个页面
//第三种
window.navigate("href.php");
//第四种
self.location='href.php';
//第五种
top.location='href.php';

转发

//获得表单内容并转发
var doc = document.getElementById("document");
doc.action = "${pageContext.request.contextPath}/documentManager/save";
doc.method = "post";
doc.submit(); 

后端Java实现

重定向

request.sendRedirect("request.jsp")

转发

request.getRequestDispatcher("request.jsp").forward(quest,response);

SpringMVC实现

重定向

不带参数

//方案一:
return new ModelAndView("redirect:/toList");
//方案二:
return "redirect:/toList";

带参数

  1. url传参

     new ModelAndView("redirect:/toList?param1="+value1+"&param2="+value2);
    
  2. 带参数不拼接url页面
    原理:放到session中,session在跳转页面后马上移除,刷新一下值丢失;用EL获取

     @RequestMapping(value="/redirect",method=RequestMethod.GET)  
     public String testRedirect(RedirectAttributes attr){  
          attr.addAttribute("a", "a");  
          attr.addFlashAttribute("b", "b");  
          return "redirect:/index.action";  
     }  
    

转发

  1. 返回ModelAndView

        @RequestMapping(value="/model",method=RequestMethod.GET)
        public ModelAndView testForward(ModelAndView model,@RequestParam(value="id",defaultValue="1",required=false)Long id){
              User u = getBaseService().get(User.class, id);
              model.addObject("user", u);
              model.setViewName("forward:index.jsp");
              return model;
         }
    
  2. 返回string

     @RequestMapping(value="/forward",method=RequestMethod.GET)
    	 public String testForward(){
         	return "forward:/index.action";
    	 }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

geodoer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值