文档章节

Http中的重定向和请求转发

陈小扁
 陈小扁
发布于 2016/04/22 10:47
字数 633
阅读 254
收藏 6

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

本质区别

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

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

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


总结:

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

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

    将目标资源发送给客户

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

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

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

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


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";
}


© 著作权归作者所有

陈小扁

陈小扁

粉丝 53
博文 87
码字总数 71417
作品 0
浦东
高级程序员
私信 提问
SpringMVC(四):转发、重定向和Flash属性

1、转发和重定向的区别 一句话概括:重定向是客户端行为,转发是服务器行为. 1.请求次数: 重定向:重定向行为是做了两次请求,及产生了两个request对象,重定向会导致request对象信息丢失。...

_Roger_
2015/09/13
1.3K
0
servlet和jsp的转发与重定向代码以及区别

1.首先说明以下重定向和转发的区别 重定向:浏览器发送请求到服务器之后,服务器会发一个状态码和再次请求的地址给到浏览器,浏览器根据地址再次请求服务器的过程。 转发:浏览器发送请求到服...

nqmysb
2019/01/03
0
0
[HTTP]转发和重定向的区别

一、调用方式 众所周知,在servlet中调用转发、重定向的语句如下: request.getRequestDispatcher("new.jsp").forward(request,response);//转发到new.jspresponse.sendRedirect("new.jsp")......

qq_26545305
2017/02/12
0
0
HTTP中的重定向和请求转发的区别

一、调用方式 我们知道,在servlet中调用转发、重定向的语句如下: request.getRequestDispatcher("new.jsp").forward(request, response); //转发到new.jsp response.sendRedirect("new.js......

xiaoqin00
2016/08/16
0
0
Spring 重定向指南

1. 概述 本文将重点介绍在 Spring 中实现重定向(Redirect),并将讨论每个策略背后的原因。 2. 为什么要重定向? 让我们先来考虑在 Spring 应用程序中为什么您可能需要做一个重定向的原因。...

越城市越分裂
2017/10/19
2.7K
1

没有更多内容

加载失败,请刷新页面

加载更多

序列化、反序列化和transient关键字的作用

引言 序列化:将一个对象转换成一串二进制表示的字节数组,通过保存或转移这些字节数据来达到持久化的目的。 反序列化:将字节数组重新构造成对象。 将 Java 对象序列化为二进制文件的 Java...

潦草的犀牛
30分钟前
39
0
聊聊artemis的maxDeliveryAttempts

序 本文主要研究一下artemis的maxDeliveryAttempts maxDeliveryAttempts activemq-artemis-2.11.0/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/AddressSe......

go4it
47分钟前
37
0
heroku - 如何查看所有日志

我在heroku上有一个小应用程序。 每当我想看日志时,我都会去命令行做 heroku logs 这只能让我看到大约100行。 有没有办法在heroku上查看我们的应用程序的完整日志? #1楼 对于雪松堆栈,请...

javail
55分钟前
37
0
Spring AOP 创建增强类

AOP联盟为增强定义了org.aopalliance.aop.Advice接口,Spring支持5种类型的增强: 1)前置增强:org.springframework.aop.BeforeAdvice 代表前置增强,因为Spring 只支持方法级的增强,所有M...

onedotdot
57分钟前
41
0
将.apply()与'new'运算符配合使用。 这可能吗?

在JavaScript中,我想创建一个对象实例(通过new运算符),但是将任意数量的参数传递给构造函数。 这可能吗? 我想做的是这样的(但是下面的代码不起作用): function Something(){ //...

技术盛宴
今天
74
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部