Http中的重定向和请求转发

1.重定向和请求转发区别

本质区别

例子1. 假设你去办理护照
java

重定向: 你先去了A局, A局的人说: "这个事情不归咱们管的,你去B局吧", 而后你就从A局退了出来, 去了B局web

转发: 你先去了A局, A局看了之后知道这个事情其实应该由B局来管的, 可是没有把你退回来,而是让你坐一下子,本身到后面办公室联系了B局的人,让他们办好以后给送了回来spring


总结:浏览器

  • 请求转发是服务器的行为,重定向是客户端的行为服务器

  • 请求转发的流程是:客户端浏览器发送请求->web服务器接受->调用内部的方法容器内部完成请求处理和转发动做->session

    将目标资源发送给客户mvc

    在客户浏览器路径下显示的是第一次访问的路径,也就是说客户端感受不到服务器端作了转发,转发行为是浏览器只作了一次访问的app

  • 重定向的流程是:客户端浏览器发送请求->web服务器接受后发送302状态码响应->客户端发现是302响应,则自动发送一个新的请求->服务器根据此请求寻找资源发送给客户jsp

    在客户端浏览器路径栏显示的是其重定向的路径,客户能够观察地址的变化,重定向的行为是浏览器作了至少两次访问ui

  • 在重定向的过程当中,传输的信息会被丢失


2.springmvc中请求转发和重定向

请求转发

(1)返回ModelAndView

@RequestMapping(value="/forward",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) 返回字符串

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


重定向

   1.带参数

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

 这里须要说明一下:

 1.使用RedirectAttribute的addAttribute方法传递参数会跟随URL后面,如上面即为http://index.action?a=a

 2.使用addFlashAttribute不会跟在URL后面,会把该参数值暂时保存在session中,待重定向url获取该参数后从session中移除


   2.无参数

@RequestMapping(value="/redirect",method=RequestMethod.GET)
public String testRedirect(){
   return "redirect:/index.action";
}
相关文章
相关标签/搜索