springmvc中Model和ModelAndView

一、基础

  1. Model
    是数据容器,只负责存放数据,不保存视图名称。
java 复制代码
public class Usercontroller1 {
@RequestMapping("/test1")//映射地址
    public  String test1(Model model){//传对象参数
    System.out.println(model);
        model.addAttribute("model","springmvc1234");
        return "test";//页面WEB-INF/jsp/test.jsp
    }

返回值 String:代表跳转的视图名
数据放 Model,视图名单独 return

  1. ModelAndView(常用主流)
    同时封装两部分:Model(数据) + View(视图名称)
java 复制代码
 ModelAndView mv = new ModelAndView();
        mv.addObject("msg1","spring");//保存数据k-v模式
        mv.addObject("m",new User("123"));
        mv.setViewName("hello");//跳转set的页面并且在其中取值
        return mv;

二、常用方法

Model:

java 复制代码
model.addAttribute("key",value);
model.addAllAttributes(map);

ModleAndView:

java 复制代码
mav.addObject("key",value);   //存数据
mav.setViewName("login");     //设置视图
//支持转发、重定向
mav.setViewName("forward:/user/list");
mav.setViewName("redirect:/login");

日常开发大多数使用 Model + 返回 String,代码简洁;
如果需要在方法内部多处动态切换视图,适合使用 ModelAndView

三、区别

Model:仅存储数据,视图名称由方法返回字符串提供;
ModelAndView:同时包含数据和视图名称,封装为一个对象;
两者数据都存放在 request 域,一次请求有效;
视图解析器最终根据视图名跳转页面。

java 复制代码
//方式1 Model + String
public String demo(Model model){
    model.addAttribute("name","张三");//存值
    return "index";//返回值=页面
}

//方式2 ModelAndView
public ModelAndView demo(){
    ModelAndView mav=new ModelAndView();
    mav.addObject("name","张三");//存值
    mv.setViewName("hello");//跳转set的页面并且在其中取值
    return mav;
}

封装(三大特性)

权限控制:private属性 + get/set,保护数据。

封装成对象

功能:把一组相关数据整合在一起,方便传输、保存。

相关推荐
weixin_460443563 小时前
2026年新修订《网络安全法》实施:Java私有化考试系统如何做好SBOM、漏洞治理与安全升级?
java·开发语言·在线考试系统·企业培训考试系统·宏远培训考试系统·国企培训考试系统·国产化培训系统
kobe_OKOK_5 小时前
__getattr__和__getattribute__如何用
python
全栈弄潮儿6 小时前
Python实战第2期: 变量与数据类型
后端·python·agent
长沙三为智能科技6 小时前
家政小程序门店运营模块设计:会员、下单、派单、结算四段链路的落地拆解
python·小程序·内容运营
Cc.Y6 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
启观川6 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
码爸6 小时前
排序算法介绍
python·算法·排序算法
阿森_dev6 小时前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
by209996 小时前
C++ 多态:同一个基类接口,调用不同的函数
开发语言·c++·经验分享·多态
笔墨登场说说6 小时前
flink bin/start-cluster.sh 帮我做成开机启动
开发语言·python