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.pswp.cn/bicheng/72867.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72867.shtml
英文地址,請注明出處:http://en.pswp.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:…