zoukankan      html  css  js  c++  java
  • Spring MVC 对于@ModelAttribute 、@SessionAttributes 的详细处理流程

    初学 Spring MVC , 感觉对于 @ModelAttribute 和 @SessionAttributes 是如何被Spring MVC处理的,这一流程不是很清楚,

    经过Google资料,有了一个较为详细的了解,在此总结一下。

    1)Spring MVC 在调用处理方法之前,在请求线程中自动的创建一个隐含的模型对象。

    2)调用所有方法级的 标注了 @ModelAttribute 的方法,并将方法返回值添加到隐含的模型对象中。

    3)如果方法所在的控制器 (标记 @Controller的类)没有标记 @SessionAttributes("sessionXXX") 注释,则该处理步骤可跳过。

    查看Session 中是否存在 sessionXXX 属性,如果有,将其添加到隐含的模型对象中。如果隐含的模型对象中已经存在了sessionXXX属性,则其值将会被覆盖

    以下的步骤是针对 标记@ModelAttribute("xxx") 方法入参 的

    4)如果隐含的模型对象已经存在xxx属性,则将其赋值给入参,并将用户的请求消息 赋值给入参的相应属性 (PS:支持级联属性),并返回,以下的处理步骤不再进行。

    5)如果 方法所在的控制器、标记了 @SessionAttributes("xxx") 注释,则继续进行该处理步骤,否则直接进入步骤6。

    查找 Session,如果没有找到 xxx 属性,则抛出异常 HttpSessionRequiredException 。

    如果找到则将其赋值给入参,并将用户的请求消息 赋值给入参的相应属性 (PS:支持级联属性),并返回,以下的处理步骤不再进行。

    6)创建入参实例,并将其赋值给入参,并将用户的请求消息 赋值给入参的相应属性 (PS:支持级联属性)。至此,处理完毕。

  • 相关阅读:
    unity_动画_状态机
    有内涵的技术论坛
    ios开发——常用经典算法OC篇&冒泡/快速
    iOS开发——C篇&文件操作
    iOS开发——C篇&预处理
    iOS开发——C篇&结构体与枚举
    iOS开发——C篇&函数解析
    iOS开发——C篇&动态内存分析
    UML第二次作业(代码互评)
    我与UML相爱相杀的狗血日常
  • 原文地址:https://www.cnblogs.com/08shiyan/p/3423384.html
Copyright © 2011-2022 走看看