当前位置: 首页 > wzjs >正文

网站建设立项报告二室一厅60平米装修案例

网站建设立项报告,二室一厅60平米装修案例,品牌建设和品牌打造,wordpress评论框不见了34、请求处理-【源码分析】-Model、Map原理 在 Spring Boot 中,处理请求时,控制器方法可以接收 Model 和 Map 类型的参数,用于向视图传递数据。以下是 Model 和 Map 参数处理的原理分析: ### 1. 参数解析过程 #### **1.1 确定参数…

34、请求处理-【源码分析】-Model、Map原理

在 Spring Boot 中,处理请求时,控制器方法可以接收 `Model` 和 `Map` 类型的参数,用于向视图传递数据。以下是 `Model` 和 `Map` 参数处理的原理分析:

### 1. 参数解析过程

#### **1.1 确定参数解析器**

当 Spring MVC 处理请求时,会遍历所有注册的 `HandlerMethodArgumentResolver` 实例,调用其 `supportsParameter` 方法,判断是否支持当前参数类型。

对于 `Model` 和 `Map` 类型的参数:

- `ModelMethodProcessor` 和 `MapMethodProcessor` 这两个解析器会返回 `true`,因为它们支持处理这两种类型的参数。

#### **1.2 解析参数**

一旦确定了合适的参数解析器,就会调用其 `resolveArgument` 方法来解析参数:

- **`ModelMethodProcessor`**

  

  ```java

  @Override

  public Object resolveArgument(MethodParameter parameter,

                                 ModelAndViewContainer mavContainer,

                                 NativeWebRequest webRequest,

                                 WebDataBinderFactory binderFactory) throws Exception {

      return mavContainer.getModel();

  }

  ```

- **`MapMethodProcessor`**

  

  ```java

  @Override

  public Object resolveArgument(MethodParameter parameter,

                                 ModelAndViewContainer mavContainer,

                                 NativeWebRequest webRequest,

                                 WebDataBinderFactory binderFactory) throws Exception {

      return mavContainer.getModel();

  }

  ```

这两个解析器都返回了 `mavContainer.getModel()`,这意味着它们实际上使用的是同一个对象。

### 2. `ModelAndViewContainer` 的作用

`ModelAndViewContainer` 是一个重要的容器,用于存储模型数据和视图信息。在请求处理过程中:

- **获取 `Model` 对象**

  

  `mavContainer.getModel()` 方法会返回一个 `Model` 实例,通常是一个 `BindingAwareModelMap` 对象,它既是 `Model` 也是 `Map`。

- **数据共享**

  

  由于 `Model` 和 `Map` 参数都指向同一个 `BindingAwareModelMap` 对象,因此对它们的操作会互相影响。

### 3. 数据存储与传递

#### **3.1 添加数据**

在控制器方法中,通过以下方式添加数据:

- **使用 `Model`**

  

  ```java

  model.addAttribute("name", "张三");

  ```

- **使用 `Map`**

  

  ```java

  map.put("age", 18);

  ```

这些数据都会被添加到 `BindingAwareModelMap` 中。

#### **3.2 数据传递到视图**

请求处理完成后,Spring MVC 会将 `ModelAndViewContainer` 中的数据封装到 `ModelAndView` 对象中,然后调用视图渲染器进行渲染。

在渲染过程中,会调用 `exposeModelAsRequestAttributes` 方法:

```java

protected void exposeModelAsRequestAttributes(Map<String, Object> model,

                                              HttpServletRequest request) throws Exception {

    for (String name : model.keySet()) {

        Object value = model.get(name);

        if (value != null) {

            request.setAttribute(name, value);

        } else {

            request.removeAttribute(name);

        }

    }

}

```

该方法会将模型数据中的所有属性添加到 `HttpServletRequest` 的请求域中,以便在视图中通过 `${name}` 表达式访问。

### 4. 示例代码

```java

@Controller

public class HelloController {

    

    @GetMapping("/hello")

    public String hello(Model model, Map<String, Object> map) {

        model.addAttribute("name", "张三");

        map.put("age", 18);

        

        // 此时 model 和 map 指向同一个对象

        System.out.println(model == map); // 输出 true

        

        return "helloView";

    }

}

```

在 `helloView.jsp` 中:

```jsp

<p>姓名:${name}</p>

<p>年龄:${age}</p>

```

### 5. 总结

- **`Model` 和 `Map` 参数在 Spring Boot 中本质上是同一个对象,都是 `BindingAwareModelMap` 的实例。**

  

- **通过 `Model` 或 `Map` 添加的数据最终都会被放入 `HttpServletRequest` 的请求域中,供视图访问。**

  

- **这种机制简化了数据传递的过程,使得开发者可以方便地在控制器和视图之间共享数据。**

---

通过以上分析,我们深入理解了 Spring Boot 中 `Model` 和 `Map` 参数的处理原理,为开发 Web 应用提供了更清晰的思路。


文章转载自:

http://M9uemlsc.bpkqd.cn
http://1giKYcgK.bpkqd.cn
http://SYzsbZq8.bpkqd.cn
http://TXy8u5Ct.bpkqd.cn
http://JJoJrHEb.bpkqd.cn
http://ueGNwoTX.bpkqd.cn
http://1mFTiwpL.bpkqd.cn
http://3kMQMoLe.bpkqd.cn
http://VMwQMXS7.bpkqd.cn
http://PF7Xi7mN.bpkqd.cn
http://4Dzqlk7f.bpkqd.cn
http://w0WwQEhY.bpkqd.cn
http://jyfcSxWo.bpkqd.cn
http://lufHrhzz.bpkqd.cn
http://Oqs6QgZ8.bpkqd.cn
http://GLAKe2EB.bpkqd.cn
http://1wFykhXF.bpkqd.cn
http://iy5jVaxW.bpkqd.cn
http://x27NIDrj.bpkqd.cn
http://znS4YVZb.bpkqd.cn
http://PcMADmKf.bpkqd.cn
http://i8v6QWwb.bpkqd.cn
http://aDsw2H4N.bpkqd.cn
http://moUlBhf2.bpkqd.cn
http://XvAhGUpa.bpkqd.cn
http://pFwNdX92.bpkqd.cn
http://Jeny8SCR.bpkqd.cn
http://2C2R8ZzA.bpkqd.cn
http://rwTFGEgW.bpkqd.cn
http://gKPheist.bpkqd.cn
http://www.dtcms.com/wzjs/716824.html

相关文章:

  • 搜狐快站装修网站建设厨师培训学校
  • 专业的深圳网站建设.net网站程序
  • 南宁保障住房建设管理服务中心网站深圳自己的网站建设
  • 罗湖在线seo需要会网站建设吗
  • seo网站济南做网站最好的单位
  • 艺术网站建设公司二手书店网站建设规划书
  • 快速搭建网站的工具有哪些毕业设计网站建设体会
  • 扬州市住房和建设局网站用sql做简单的博客网站
  • 完整网站开发教程哪些外贸网站可以做soho
  • 自己可以做视频网站吗贵阳做网站哪家公司好
  • 0基础1小时网站建设教程网站建设大赛海报
  • 济宁神华 网站建设升级wordpress需要ftp
  • 外贸网站建设报价杭州公司社保缴纳时间
  • 贵阳做网站kuhugz静态网站数据库
  • 连云港网站建设费用wordpress伪静态 宝塔
  • 做网站php语言用什么工具西安企业网站建设多少钱
  • 企业网站建设费用怎么入账wordpress编辑器文件大小
  • 做亚马逊和淘宝网站自动做网站的ai
  • 南通大型网站建设互联网 现代农业网站建设
  • 海报生成器在线制作推广排名seo
  • .net flash网站模板做网站比较好的软件
  • 做网站和微信公众号需要多少钱建设公司起名大全字库
  • 自己的网站怎么制作做美直播网站
  • 郑州做网站哪家专业类似淘宝的购物网站 建设
  • 教育机构的网站怎么做泉塘芒果国际影城
  • 招商门户网站建设方案网上项目外包
  • 网站开发公司团队优势临沂罗庄做网站公司
  • 网站正在建设中的图片素材付费资源下载站源码
  • 网站建设专用图形库网站排名seo软件
  • 饮品店网站模板张家港市做网站的公司