(转)spring mvc forward与redirect

forward 转发,如return "forward:/hello"; 浏览器的地址栏不会变,可是有视图返回来spring

redirect 重定向,如return "redirect:/hello"; 浏览器的地址栏会变。浏览器

网络解释:服务器

 

spring控制器最后返回一个ModelAndView(urlName),其中urNamel能够是一个视图名称,由视图解析器负责解析后将响应流写回客户端;也能够经过redirect/forward:url方式转到另外一个控制器进行处理.网络

  1. redirect方式至关于”response.sendRedirect()”.这种方式外部特征就是浏览器地址栏最后显示的路径是转发后的新的路径.工做方式是这样的, 服务器端会首先发一个response给浏览器, 而后浏览器收到这个response后再发一个requeset给服务器, 而后服务器发新的response给浏览器. 这时页面收到的request是一个新从浏览器发来的.这种方式的结果是:url

  • A.在转发先后有两个不一样的request对象,转发先后的两个控制器在request上的参数(request.getParameter())和request属性(request.getAttribute())不能共享;spa

  • B.若是转发先后的两个控制器都配置在spring 拦截器范围内,这样拦截器会拦截先后两个request,即会拦截两次;对象

  • C.最后返回到浏览器后,由于地址栏显示的是转发后的url,因此刷新页面时只会执行后面的url映射的控制器.get

 

  1. forward方式至关于request.getRequestDispatcher().forward(request,response),这种方式的外部特征是浏览器地址显示的路径是转发前的路径.工做方式是这样,forward 发生在服务器内部,在前一个控制器处理完毕后,直接进入下一个控制器处理, 并将最后的response发给浏览器. 这种方式的结果是:博客

  • A.转发先后是同一个request,后一个控制器可共享前一个控制器的参数与属性;服务器端

  • B.由于是同一个request,拦截器只会拦截前一个url,若是前一个url在映射时未配置到拦截器拦截,则拦截后一个url,即只拦截一次;

  • C.最后返回到浏览器后,由于地址栏显示的是转发前的url,因此刷新页面时会依次执行先后两个控制器.

     

    这是之前在别的文章系统记录的笔记,如今转存到博客园

    此文章属转载他人文章,可是转载地址之前没记录,请笔者原谅,若是有侵犯到您的任何权益请联系本人,本人会第一时间删除

相关文章
相关标签/搜索