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

在学习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属性会被取出,并从会话中转移到模型之中。处理重定向的方法就能从模型中访问该对象了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,655评论 1 92
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,268评论 19 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,098评论 2 89
  • 感赏:利明老师昨晚利用陪孩子玩时给我发课件,谢谢!感赏一位姐妹教我的方法怎样做女儿脸上不留疤痕,谢谢你!
    贵州六年级庄杰阅读 240评论 0 0
  • 周庄,是我们这次南行之旅的重中之重,怀着对江南第一水乡的无限憧憬,前往周庄的路上,我一直兴奋难抑。那幅“小桥...
    魏昊霖阅读 915评论 6 8