Java直通车系列15【Spring MVC】(ModelAndView 使用)

目录

1. ModelAndView 概述

2. ModelAndView 的主要属性和方法

主要属性

主要方法

3. 场景示例

示例 1:简单的 ModelAndView 使用

示例 2:使用 ModelAndView 处理列表数据

示例 3:使用 ModelAndView 处理异常情况


1. ModelAndView 概述

在 Spring MVC 中,ModelAndView 是一个非常重要的类,它用于封装模型数据和视图信息,是控制器(Controller)将处理结果传递给视图层的一种常用方式。具体来说:

  • 模型(Model):用于存储处理业务逻辑后得到的数据,这些数据可以在视图层(如 JSP 页面)中被访问和展示。
  • 视图(View):指定最终要渲染的视图名称,Spring MVC 会通过视图解析器(ViewResolver)将视图名称解析为具体的视图资源。

2. ModelAndView 的主要属性和方法

主要属性
  • model:一个 Map 类型的对象,用于存储键值对形式的模型数据。
  • view:可以是视图名称(String 类型),也可以是 View 对象,用于指定要渲染的视图。
主要方法
  • ModelAndView():无参构造方法,创建一个空的 ModelAndView 对象。
  • ModelAndView(String viewName):通过视图名称创建 ModelAndView 对象。
  • ModelAndView(String viewName, Map<String, ?> model):通过视图名称和模型数据创建 ModelAndView 对象。
  • ModelAndView(View view):通过 View 对象创建 ModelAndView 对象。
  • ModelAndView(View view, Map<String, ?> model):通过 View 对象和模型数据创建 ModelAndView 对象。
  • addObject(String attributeName, Object attributeValue):向模型中添加一个键值对数据。
  • addAllObjects(Map<String, ?> modelMap):将一个 Map 中的所有键值对添加到模型中。
  • setViewName(String viewName):设置视图名称。
  • getViewName():获取视图名称。
  • getModel():获取模型数据的 Map 对象。

3. 场景示例

示例 1:简单的 ModelAndView 使用

以下是一个简单的 Spring MVC 控制器示例,演示了如何使用 ModelAndView 传递数据和指定视图:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;@Controller
public class HelloController {@GetMapping("/hello")public ModelAndView sayHello() {// 创建 ModelAndView 对象,并指定视图名称ModelAndView modelAndView = new ModelAndView("hello"); // 向模型中添加数据modelAndView.addObject("message", "Hello, Spring MVC!"); return modelAndView;}
}

在上述代码中:

  • @GetMapping("/hello") 注解将 /hello 的 GET 请求映射到 sayHello 方法。
  • ModelAndView modelAndView = new ModelAndView("hello"); 创建了一个 ModelAndView 对象,并指定视图名称为 hello。Spring MVC 会根据视图解析器的配置,将 hello 解析为具体的视图资源(如 hello.jsp)。
  • modelAndView.addObject("message", "Hello, Spring MVC!"); 向模型中添加了一个键为 message,值为 "Hello, Spring MVC!" 的数据。

对应的 hello.jsp 页面如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>Hello Page</title>
</head>
<body><h1>${message}</h1>
</body>
</html>

在 JSP 页面中,可以使用 EL 表达式 ${message} 访问模型中的数据。

示例 2:使用 ModelAndView 处理列表数据

以下示例展示了如何使用 ModelAndView 传递列表数据:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;import java.util.ArrayList;
import java.util.List;@Controller
public class UserController {@GetMapping("/users")public ModelAndView getUsers() {// 模拟获取用户列表List<String> users = new ArrayList<>();users.add("Alice");users.add("Bob");users.add("Charlie");// 创建 ModelAndView 对象,并指定视图名称ModelAndView modelAndView = new ModelAndView("users");// 向模型中添加用户列表数据modelAndView.addObject("userList", users);return modelAndView;}
}

对应的 users.jsp 页面如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head><title>User List</title>
</head>
<body><h1>User List</h1><ul><c:forEach items="${userList}" var="user"><li>${user}</li></c:forEach></ul>
</body>
</html>

在上述代码中,控制器方法 getUsers 获取了一个用户列表,并将其添加到 ModelAndView 的模型中,视图名称为 users。在 users.jsp 页面中,使用 JSTL 的 <c:forEach> 标签遍历用户列表并展示。

示例 3:使用 ModelAndView 处理异常情况
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;@Controller
public class ErrorController {@GetMapping("/errorTest")public ModelAndView handleError() {ModelAndView modelAndView = new ModelAndView();try {// 模拟抛出异常的操作throw new RuntimeException("An error occurred!");} catch (RuntimeException e) {// 设置错误视图名称modelAndView.setViewName("error");// 向模型中添加错误信息modelAndView.addObject("errorMessage", e.getMessage());}return modelAndView;}
}

对应的 error.jsp 页面如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>Error Page</title>
</head>
<body><h1>Error Occurred</h1><p>${errorMessage}</p>
</body>
</html>

在这个示例中,控制器方法 handleError 模拟抛出一个异常,捕获异常后,设置视图名称为 error,并将错误信息添加到模型中。在 error.jsp 页面中,展示错误信息。

通过以上示例可以看出,ModelAndView 是 Spring MVC 中一种方便的方式,用于在控制器和视图层之间传递数据和指定视图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/72867.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频图像刷新到HTTP的原理

上一篇博客已经说了cgi拿到了共享内存的程序还需要处理的才能够真正刷新到网页里面去 HTTP协议介绍 HTTP中文名称是超文本传输协议&#xff0c;它是一个简单的请求.响应协议&#xff0c;HTTP协议它运行在TCP上面&#xff0c;它是互联网数据通信的基础。 几乎所有的网页请求和互…

2024四川大学计算机考研复试上机真题

2024四川大学计算机考研复试上机真题 2024四川大学计算机考研复试机试真题 历年四川大学计算机考研复试机试真题 在线评测&#xff1a;https://app2098.acapp.acwing.com.cn/ 分数求和 题目描述 有一分数序列&#xff1a; 2/1 3/2 5/3 8/5 13/8 21/13… 求出这个数列的前 …

Python评估网络脆弱性

一、网络安全 &#xff08;1&#xff09;网络安全的定义 网络安全是指计算机网络系统中的硬件、数据、程序等不会因为无意或恶意的原因而遭到破坏、篡改、泄露&#xff0c;防止非授权的使用或访问&#xff0c;系统能够保持服务的连续性&#xff0c;以及能够可靠的运行。网络安…

Java后端高频面经——Spring、SpringBoot、MyBatis

Spring定义一个Bean有哪些方法&#xff1f;依赖注入有哪些方法&#xff1f; &#xff08;1&#xff09;定义Bean的方法 注解定义Bean&#xff0c;Component 用于标记一个类作为Spring的bean。当一个类被Component注解标记时&#xff0c;Spring会将其实例化为一个bean&#xff0…

Qt 实现绘图板(支持橡皮擦与 Ctrl+Z 撤销功能)[特殊字符]

作业&#xff1a; 1&#xff1a;实现绘图的时候&#xff0c;颜色的随时调整 2&#xff1a;追加橡皮擦功能 3&#xff1a;配合键盘事件&#xff0c;实现功能 当键盘按 ctrlz的时候&#xff0c;撤销最后一次绘图 头文件.h #ifndef WIDGET_H #define WIDGET_H#include <QWidge…

计算机网络(1) 网络通信基础,协议介绍,通信框架

网络结构模式 C/S-----客户端和服务器 B/S -----浏览器服务器 MAC地址 每一个网卡都拥有独一无二的48位串行号&#xff0c;也即MAC地址&#xff0c;也叫做物理地址、硬件地址或者是局域网地址 MAC地址表示为12个16进制数 如00-16-EA-AE-3C-40 &#xff08;每一个数可以用四个…

HOW - React 如何在在浏览器绘制之前同步执行 - useLayoutEffect

目录 useEffect vs useLayoutEffectuseEffectuseLayoutEffect主要区别总结选择建议注意事项 useLayoutEffect 使用示例测量 DOM 元素的尺寸和位置示例&#xff1a;自适应弹出框定位 同步更新样式以避免闪烁示例&#xff1a;根据内容动态调整容器高度 图像或 Canvas 绘制前的准备…

【无人机三维路径规划】基于CPO冠豪猪优化算法的无人机三维路径规划Maltab

代码获取基于CPO冠豪猪优化算法的无人机三维路径规划Maltab 基于CPO冠豪猪优化算法的无人机三维路径规划 一、CPO算法的基本原理与核心优势 冠豪猪优化算法&#xff08;Crested Porcupine Optimizer, CPO&#xff09;是一种新型元启发式算法&#xff0c;其灵感来源于冠豪猪的…

深度学习驱动的智能化革命:从技术突破到行业实践

第一章 深度学习的技术演进与核心架构 1.1 从浅层网络到深度学习的范式转变 深度学习的核心在于通过多层次非线性变换自动提取数据特征,其发展历程可划分为三个阶段:符号主义时代的规则驱动(1950s-1980s)、连接主义时代的浅层网络(1990s-2000s)以及深度学习时代的端到端…

简洁实用的3个免费wordpress主题

高端大气动态炫酷的免费企业官网wordpress主题 非常简洁的免费wordpress主题&#xff0c;安装简单、设置简单&#xff0c;几分钟就可以搭建好一个wordpress网站。 经典风格的免费wordpress主题 免费下载 https://www.fuyefa.com/wordpress

RabbitMQ 高级特性解析:RabbitMQ 消息可靠性保障 (上)

RabbitMQ 核心功能 RabbitMQ 高级特性解析&#xff1a;RabbitMQ 消息可靠性保障 &#xff08;上&#xff09;-CSDN博客 RabbitMQ 高级特性&#xff1a;从 TTL 到消息分发的全面解析 &#xff08;下&#xff09;-CSDN博客 前言 最近再看 RabbitMQ&#xff0c;看了看自己之前写…

用DeepSeek-R1-Distill-data-110k蒸馏中文数据集 微调Qwen2.5-7B-Instruct!

下载模型与数据 模型下载&#xff1a; huggingface&#xff1a; Qwen/Qwen2.5-7B-Instruct HF MirrorWe’re on a journey to advance and democratize artificial intelligence through open source and open science.https://hf-mirror.com/Qwen/Qwen2.5-7B-Instruct 魔搭&a…

在IDEA中进行git回滚操作:Reset current branch to here‌或Reset HEAD

问题描述 1&#xff09;在本地修改好的代码&#xff0c;commit到本地仓库&#xff0c;突然发觉有问题不想push推到远程仓库了&#xff0c;但它一直在push的列表中存在&#xff0c;那该怎么去掉push列表中的内容呢&#xff1f; 2&#xff09;合并别的分支到当前分支&#xff0…

六十天前端强化训练之第十一天之事件机制超详解析

欢迎来到编程星辰海的博客讲解 目录 一、事件模型演进史 1.1 原始事件模型&#xff08;DOM Level 0&#xff09; 1.2 DOM Level 2事件模型 1.3 DOM Level 3事件模型 二、事件流深度剖析 2.1 捕获与冒泡对比实验 2.2 事件终止方法对比 三、事件委托高级应用 3.1 动态元…

Qwen架构与Llama架构的核心区别

我们在讨论Deepseek不同版本之间的区别时了解到,DeepSeek-R1的蒸馏模型分为Qwen和Llama两个系列,包括Qwen系列的0.5B、1.5B、3B、7B、14B、32B、72B和Llama系列的8B、70B。Qwen系列以阿里通义千问(Qwen)为基础模型架构(具体是Qwen-2.5),Llama系列以Meta的Llama为基础模型…

匿名GitHub链接使用教程(Anonymous GitHub)2025

Anonymous GitHub 1. 引言2. 准备3. 进入Anonymous GitHub官网4. 用GitHub登录匿名GitHub并授权5. 进入个人中心&#xff0c;然后点击• Anonymize Repo实例化6. 输入你的GitHub链接7. 填写匿名链接的基础信息8. 提交9. 实例化对应匿名GitHub链接10. 进入个人中心管理项目11. 查…

工程化与框架系列(25)--低代码平台开发

低代码平台开发 &#x1f527; 引言 低代码开发平台是一种通过可视化配置和少量代码实现应用开发的技术方案。本文将深入探讨低代码平台的设计与实现&#xff0c;包括可视化编辑器、组件系统、数据流管理等关键主题&#xff0c;帮助开发者构建高效的低代码开发平台。 低代码…

Redis系列之慢查询分析与调优

Redis 慢查询分析与优化&#xff1a;提升性能的实战指南 Redis 作为一款高性能的内存数据库&#xff0c;因其快速的数据读写能力和灵活的数据结构&#xff0c;被广泛应用于缓存、消息队列、排行榜等多种业务场景。然而&#xff0c;随着业务规模的扩大和数据量的增加&#xff0…

Git系列之git tag和ReleaseMilestone

以下是关于 Git Tag、Release 和 Milestone 的深度融合内容&#xff0c;并补充了关于 Git Tag 的所有命令、详细解释和指令实例&#xff0c;条理清晰&#xff0c;结合实际使用场景和案例。 1. Git Tag 1.1 定义 • Tag 是 Git 中用于标记特定提交&#xff08;commit&#xf…

开源项目介绍:Native-LLM-for-Android

项目地址&#xff1a;Native-LLM-for-Android 创作活动时间&#xff1a;2025年 支持在 Android 设备上运行大型语言模型 &#xff08;LLM&#xff09; &#xff0c;具体支持的模型包括&#xff1a; DeepSeek-R1-Distill-Qwen: 1.5B Qwen2.5-Instruct: 0.5B, 1.5B Qwen2/2.5VL:…