Spring专题学习

17.Spring中跨重定向请求传递数据

2018-09-12  本文已影响0人  Lee_java

在学习JSP和Servlet的时候,我们了解到有两种页面跳转方式,分别是redirect和forward的形式。
在Spring中,当控制器方法返回的String是以redirect:开头,表示用来指导浏览器进行重定向的路劲。
正在发起重定向功能的方法如何发送数据给重定向的目标方法?
一般来说,当一个处理器完成之后,该方法所指定的模型数据会复制到请求中,当做请求中的属性,请求会转发forward到视图然后进行渲染。因为控制器方法和视图所处理的是同 一个请求。所以在转发的过程中,请求属性能够得以保存。但是,使用重定向redirect会存在一些问题,模型的属性是以属性的形式存放在请求中,在重定向后是无法存活的,所以模型数据会置为空。
下面是如何解决重定向过程中传递数据不为空的处理方式:
1.使用URL模板以路径变量或者查询参数的形式传递数据
2.使用flash属性来发送数据。


1.使用URL模板以路径变量或者查询参数的形式传递数据
(1)我们可以采用占位符的形式{路径变量}放再URL模板中,此时路径变量中的所有不安全字符都会进行转义,这样会更加安全。
(2)模型中所有其他的原始类型值都可以添加到URL中作为查询参数,当属性没有匹配重定向URL中的任何占位符,所以它会自动以查询参数的形式附加到重定向URL上。
(3)路径变量和查询参数的形式是重定向传递数据很简单直接的方法,但是他只能发送简单的值,对于复杂的我们可以使用flush属性。


2.使flush属性来发送数据
(1)Spring中的flash属性会一直携带这些数据知道下一次请求,然后才会消失。
(2)Spring的接口RedirectAttributes提供了addFlashAttribute方法来设置flash属性。

package org.springframework.web.servlet.mvc.support;

import java.util.Collection;
import java.util.Map;
import org.springframework.ui.Model;

public interface RedirectAttributes extends Model {
    RedirectAttributes addAttribute(String var1, Object var2);
    
    RedirectAttributes addAttribute(Object var1);

    RedirectAttributes addAllAttributes(Collection<?> var1);

    RedirectAttributes mergeAttributes(Map<String, ?> var1);

    RedirectAttributes addFlashAttribute(String var1, Object var2);

    RedirectAttributes addFlashAttribute(Object var1);

    Map<String, ?> getFlashAttributes();
}

(3)执行过程分析:
在重定向执行之前,所有的flash属性都会复制到会话中。在重定向之后,存在会话中的flash属性会被取出,并从会话中转移到模型之中。处理重定向的方法就能从模型中访问该对象了。

上一篇下一篇

猜你喜欢

热点阅读