前言
先来说一下SpringMVC中的跳转和重定向吧,跳转指的是服务器端跳转,在这个过程中请求之间的参数会进行保留,HTTP请求也只有一次;
重定向是指第一次请求完成后服务端通知客户端去请求另外一个地址,也就是再进行一次HTTP请求而且这两次请求的地址不一样,第一次请求的参数也无法对第二次请求进行共享,如果想要在这两次请求之间进行传参的话我们就需要通过其他途径来完成。今天我们就简单来谈一下这个话题。
服务端跳转
SpringMVC中的跳转是在方法的return中写入“forward:”完成的,比如跳转到根目录“forward:/”。下图跳转到了“/forward”,如图:
无参数的重定向
先来看一下一个最简单的重定向,这个重定向仅仅是跳转不传输任何参数,如下图中当请求完“/index”之后就重定向到了“/index/redirect”路径下,如图:
我们从浏览器中观察一下发现浏览器有2次HTTP请求,看下图:
这是最简单的一个案例,下面我们来看一下如何在重定向中传参数。这里我们先提前和大家说一下,这种在重定向中传参数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取出就行了,看图:
这种方式相比较于“通过URL附加参数在重定向中传参”和“通过flash属性在重定向中传参”这2种方式来说能够传输更复杂的参数,因为它能够存储更复杂的对象。
结束语
今天的内容就完成了,我们简单介绍了服务器端跳转和重定向的区别。而且在重定向中我们介绍了3种传参数的方法。大家可以根据自己的需求来选取使用的传参方式。
网友评论