美文网首页Spring专题
SpringMVC中的forward和redirect以及red

SpringMVC中的forward和redirect以及red

作者: 自律赢 | 来源:发表于2019-11-18 20:20 被阅读0次

前言

先来说一下SpringMVC中的跳转和重定向吧,跳转指的是服务器端跳转,在这个过程中请求之间的参数会进行保留,HTTP请求也只有一次;

重定向是指第一次请求完成后服务端通知客户端去请求另外一个地址,也就是再进行一次HTTP请求而且这两次请求的地址不一样,第一次请求的参数也无法对第二次请求进行共享,如果想要在这两次请求之间进行传参的话我们就需要通过其他途径来完成。今天我们就简单来谈一下这个话题。

服务端跳转

SpringMVC中的跳转是在方法的return中写入“forward:”完成的,比如跳转到根目录“forward:/”。下图跳转到了“/forward”,如图:

forward

无参数的重定向

先来看一下一个最简单的重定向,这个重定向仅仅是跳转不传输任何参数,如下图中当请求完“/index”之后就重定向到了“/index/redirect”路径下,如图:

redirect

我们从浏览器中观察一下发现浏览器有2次HTTP请求,看下图:

redirect的2次请求

这是最简单的一个案例,下面我们来看一下如何在重定向中传参数。这里我们先提前和大家说一下,这种在重定向中传参数SpringMVC给我们提供了3种方法。下面来看一下。

通过URL附加参数在重定向中传参

这种就是通过在重定向中在URL的尾部附加参数来完成的,就是把参数附加在重定向的第二次HTTP请求后面,下图中在重定向的URL尾部添加了“name=tom”,看下图:

在redirect方法中我们就可以通过RequestParam注解来进行参数的接收,这也是SpringMVC最普通的接收参数的方式。

通过URL变量在重定向中传参

这种方式是在URL中设置路径变量来达到传参的目的。如下图中,第一次请求的返回值“redirect:/path/redirect/{name}”中的“name”就是一个路径变量,看图:

路径变量

这个路径变量需要通过RedirectAttributes类的model对象的addAttribute方法进行添加,这样SpringMVC才能把它作为一个路径变量。这里需要说明一下的是model对象要在方法参数中定义,如果自己new一个RedirectAttributes对象是无法达到目的的。

通过flash属性在重定向中传参

这种方式的原理是通过Session作为中转站来完成的,也就是在第一次请求时把需要在重定向中传的参数放入Session中,在第二次的请求中SpringMVC会把这个参数从Session中取出并转移到Request的model中。

具体的设置是通过RedirectAttributes类的addFlashAttribute实例方法来完成的。下图中就把name为tom的变量最为一个flash变量进行了存储。在第二次的HTTP请求地址中直接从Model取出就行了,看图:

flash属性

这种方式相比较于“通过URL附加参数在重定向中传参”和“通过flash属性在重定向中传参”这2种方式来说能够传输更复杂的参数,因为它能够存储更复杂的对象。

结束语

今天的内容就完成了,我们简单介绍了服务器端跳转和重定向的区别。而且在重定向中我们介绍了3种传参数的方法。大家可以根据自己的需求来选取使用的传参方式。

相关文章

  • SpringMVC中的forward和redirect以及red

    前言 先来说一下SpringMVC中的跳转和重定向吧,跳转指的是服务器端跳转,在这个过程中请求之间的参数会进行保留...

  • Springmvc 重定向

    如果返回的字符串中前缀带forward: 或 redirect:指示符时,SpringMVC会特殊处理 redir...

  • SpringMVC 如何优雅地进行 301 跳转

    对 SpringMVC 有一定了解的同学对「redirect」和「forward」的语法都不陌生。 如上面的例子,...

  • 开发混淆知识点

    Forward和Redirect的区别 简述: Forward(转发):直接请求 Redirect(重定向):间接...

  • Java 中Redirect和Forward

    Java中连接跳转的2中方式Redirect和Forward (重定向)Redirect 重定向是把request...

  • forward和redirect

    如果/hello就是某个controller的映射,想要转发这个controller。 可以通过forward 前...

  • redirect和forward

    redirect:请求重定向:客户端行为,本质上为2次请求,地址栏改变,前一次请求对象消失。举例:你去银行办事(f...

  • redirect和forward

    redirectforwardhttp://www.javapractices.com/topic/TopicAc...

  • forward()和redirect()区别

    forward():仅仅是容器的控制权的转向。还是原来的请求,是服务器的转向,浏览器的地址不会发生改变,是再一次请...

  • servlet中forward和redirect的区别

    forward(转发)需要request和response作为参数。将用户的请求,连同请求信息等内容,一起转发到服...

网友评论

    本文标题:SpringMVC中的forward和redirect以及red

    本文链接:https://www.haomeiwen.com/subject/mttiictx.html