SpringMVC的架构有什么优势?——视图与模型(二)

2023-11-15

前言

在这里插入图片描述
「作者主页」雪碧有白泡泡
「个人网站」雪碧的个人网站
「推荐专栏」

java一站式服务
React从入门到精通
前端炫酷代码分享
从0到英雄,vue成神之路
uniapp-从构建到提升
从0到英雄,vue成神之路
解决算法,一个专栏就够了
架构咱们从0说
数据流通的精妙之道
后端进阶之路

请添加图片描述


在这里插入图片描述

视图(View)

视图是展示结果的组件,它们负责渲染模型数据并生成HTML输出。Spring MVC支持多种视图技术,包括JSP、Thymeleaf等。
视图(View)是Spring MVC中渲染并呈现结果的组件,它们负责将模型数据渲染成HTML输出。Spring MVC支持多种视图技术,包括JSP、Freemarker、Velocity和Thymeleaf等。下面我们将深入探讨Spring MVC视图的核心概念和相应Java代码示例。

1. 视图解析器(View Resolver):

视图解析器负责将逻辑视图名称解析为实际的视图实现。在Spring MVC中,可以使用 InternalResourceViewResolver 作为默认的视图解析器,它将逻辑视图名称映射到JSP文件。

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

在上面的示例中,我们配置了一个InternalResourceViewResolver作为视图解析器,并将前缀设置为"/WEB-INF/views/“,后缀设置为”.jsp"。这意味着所有JSP文件都存储在"/WEB-INF/views/“目录下,并且必须以”.jsp"作为文件扩展名。

2. JSP视图(JSP View):

JSP视图是最常用的视图类型之一,它允许开发人员通过JSP标签来渲染模型数据并生成HTML输出。

@Controller
public class UserController {
    @RequestMapping(value = "/users/{id}", method = RequestMethod.GET)
    public ModelAndView getUser(@PathVariable("id") Long id) {
        User user = userService.getUserById(id);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", user);
        modelAndView.setViewName("user");
        return modelAndView;
    }
}

在上面的示例中,getUser()方法使用ModelAndView对象来返回一个视图,并将一个用户对象添加到该视图的模型中。Spring MVC框架将自动使用 InternalResourceViewResolver 将"user"逻辑视图名称映射到"/WEB-INF/views/user.jsp" JSP文件。

3. Thymeleaf视图(Thymeleaf View):

Thymeleaf视图是一种流行的视图技术,它允许开发人员使用HTML标签来渲染模型数据并生成HTML输出。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

在上面的示例中,我们向Maven配置文件添加了spring-boot-starter-thymeleaf依赖项,以引入Thymeleaf视图技术。

@Controller
public class UserController {
    @RequestMapping(value = "/users/{id}", method = RequestMethod.GET)
    public String getUser(@PathVariable("id") Long id, Model model) {
        User user = userService.getUserById(id);
        model.addAttribute("user", user);
        return "user";
    }
}

在上面的示例中,getUser()方法使用Spring的Model接口将一个用户对象添加到模型中,并返回一个"user"视图名称。Spring MVC框架将使用Thymeleaf视图解析器将"user"逻辑视图名称映射到"/templates/user.html" Thymeleaf模板文件。

4. JSON视图(JSON View):

JSON视图是一种轻量级的视图类型,它允许开发人员将数据渲染成JSON格式并发送给客户端。

@Controller
public class UserController {
    @RequestMapping(value = "/users/{id}", method = RequestMethod.GET, produces = "application/json")
    public ResponseEntity<User> getUser(@PathVariable("id") Long id) {
        User user = userService.getUserById(id);
        return new ResponseEntity<User>(user, HttpStatus.OK);
    }
}

在上面的示例中,getUser()方法使用 ResponseEntity 对象来返回一个用户对象,并将其设置为“application/json”格式。这意味着Spring MVC将自动将用户对象序列化为JSON字符串,并将其作为HTTP响应发送回客户端。

通过以上的介绍,我们了解了Spring MVC视图的核心概念和相应Java代码示例。总体而言,Spring MVC提供了丰富多样的视图技术,使开发人员能够根据需求选择最适合自己的视图类型。此外,Spring MVC还提供了强大的视图解析器机制,使开发人员能够轻松地进行视图名称和实际视图之间的映射。这些特性让Spring MVC成为一款流行的Web框架,深受众多开发人员和企业用户的喜爱。

需要注意的是,在使用Spring MVC视图时,开发人员应该重视数据安全性和性能问题。例如,在使用JSP视图时,开发人员应该避免在JSP页面中编写JavaScript代码,以防止跨站脚本攻击(XSS)。同时,开发人员还应该考虑缓存和压缩等机制,以优化视图的性能表现。

模型(Model)

模型代表了应用程序中的数据,是控制器和视图之间进行通信的桥梁。Spring MVC通过ModelAndView对象将模型数据传递给视图。
模型(Model)是Spring MVC框架中的一个核心概念,它代表了应用程序中的数据。模型对象可以被控制器使用,并且可以传递给视图进行展示。在Spring MVC中,我们通常使用ModelAndView对象来封装模型数据并将其传递给视图。

下面我们将深入探讨Spring MVC模型的核心概念和相应Java代码示例。

1. 模型数据(Model Data):

模型数据是指应用程序中需要在视图中呈现的数据。在Spring MVC中,我们通常使用Java Bean来表示模型数据,也就是所谓的模型对象。

public class User {
    private Long id;
    private String name;
    private Integer age;

    // Getter and Setter methods
}

在上面的示例中,我们定义了一个简单的User类作为模型对象,该类包含id、name和age三个属性。

2. 加载模型数据(Load Model Data):

加载模型数据是指从应用程序中获取模型数据的过程。在Spring MVC中,我们通常使用控制器来加载模型数据。

@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping(value = "/users/{id}", method = RequestMethod.GET)
    public ModelAndView getUser(@PathVariable("id") Long id) {
        User user = userService.getUserById(id);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", user);
        modelAndView.setViewName("user");
        return modelAndView;
    }
}

在上面的示例中,getUser()方法使用 UserService 对象来获取指定id的用户对象,并将其添加到ModelAndView对象中。这样就完成了模型数据的加载过程。

3. 将模型数据传递给视图(Pass Model Data to View):

将模型数据传递给视图是指将封装了模型数据的ModelAndView对象传递给视图进行展示的过程。

@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping(value = "/users/{id}", method = RequestMethod.GET)
    public ModelAndView getUser(@PathVariable("id") Long id) {
        User user = userService.getUserById(id);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", user);
        modelAndView.setViewName("user");
        return modelAndView;
    }
}

在上面的示例中,getUser()方法返回一个封装了模型数据的ModelAndView对象。其中,addObject()方法用于向模型中添加一个名为"user"的属性,该属性值是从数据库中查询得到的User对象。setViewName()方法设置了视图名称为"user",Spring MVC框架将根据视图名称自动查找并渲染对应的JSP文件。

通过以上的介绍,我们可以看出,模型(Model)是Spring MVC框架中非常重要的一个组件,它代表了应用程序中的数据,并且充当了控制器和视图之间的桥梁。只有深入理解模型的概念,并熟练掌握相应的Java代码技巧,才能够在实际开发中灵活运用Spring MVC框架,构建高效、可靠、易于维护的Web应用程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringMVC的架构有什么优势?——视图与模型(二) 的相关文章

  • 童年回忆——切水果(内含源码inscode一键运行)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 React从入门到精通 前端炫酷代码分享 从0到英雄 vue成神之路 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架
  • 高质量、高并发的实时通信架构设计与探索

    中国互联网络信息中心 CNNIC 近日发布的第 47 次 中国互联网络发展状况统计报告 显示 截至 2020 年 12 月 我国网民规模达 9 89 亿 随着社会信息化水平持续提升及电子设备加速普及 手机网民规模持续增长 基本实现对全体网民
  • 详解数据架构的七类视图(多图+案例)

    数据架构是业务与应用系统建设的桥梁 数据架构基于业务架构 业务模式 流程 规则等 识别出业务数据需求 统一数据语言及操作手段 作为应用系统的应用架构 系统功能 组件 接口等 和技术架构 技术指标 技术选型等 设计和开发的依据 一 企业架构概
  • 模块功能耗时长排查

    模块功能耗时长排查 1 场景介绍1 1 1 原有场景 OA服务 发送代办 代办推送到OA代办中心 OA代办中心 推送到 总部统一代办中心 我们排查请求耗时 发现 OA代办中心 推送到 总部统一代办中心的业务代码耗时非常久 1 2 原有场景总
  • 阿里云CDN架构接入WAF应用防火墙案例实践

    文章目录 1 网站架构变化 2 配置WAF应用防火墙 2 1 配置网站接入WAF防火墙 2 2 WAF防火墙生成CNAME地址 2 3 配置WAF防火墙HTTPS证书 2 4 WAF防火墙开启HTTP回源SLB 3 配置CDN加速器回源WA
  • 拼多多招收java开发的三轮面试题,你能撑到第几轮?

    我相信 面试一直是大家关注的问题 包括最近有很多刚毕业或者刚实习的小伙伴跟我讲投了很多简历出去 但却都像泥牛入海一样了无音讯了 确实出于程序员的直觉 今年着实是要比往年要更冷一些 对于面试来说 我相信大家都听过一个说法就是 金九银十 但是现
  • dubbo分布式服务

    架构 节点角色说明 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方 Registry 服务注册与发现的注册中心 Monitor 统计服务的调用次调和调用时间的监控中心 Container 服务运行容器 调
  • API架构的选择,RESTful、GraphQL还是gRPC

    文章目录 一 RESTful 1 什么是RESTful 2 RESTful架构的原则 3 RESTful的适用场景 4 RESTful的优点 5 RESTful的缺点 二 GraphQL 1 什么是GraphQL 2 GraphQL的原则
  • 微服务项目之项目简介

    目录 项目模式 技术栈 项目架构图 模块 主模块 项目模式 电商模式 市面上有5种常见的电商模式 B2B B2C C2B C2C O2O 1 B2B模式 B2B Business to Business 是指 商家与商家建立的商业关系 如
  • 2022年数字化转型的三大基于云的驱动因素

    未来一年将标志着企业品牌 工作和生活创新的最大重置 文章来源 Venture Beat Google Cloud CTO Will Grannis 数字技术一直是并将持续是公司应对新冠疫情的背后推动力 从购物和供应链到儿童保育和工作 一切都
  • 【实践篇】领域驱动设计:DDD工程参考架构

    背景 为什么要制定参考工程架构 不同团队落地DDD所采取的应用架构风格可能不同 并没有统一的 标准的DDD工程架构 有些团队可能遵循经典的DDD四层架构 或改进的DDD四层架构 有些团队可能综合考虑分层架构 整洁架构 六边形架构等多种架构风
  • Keycloak概述

    这里写自定义目录标题 Keycloak概述 Single Sign On Kerberos 社交登录 用户合并 客户端适配 管理控制台 用户管理控制台 标准协议 授权服务 Getting Started Keycloak概述 keycloa
  • 测试人员为什么要去了解业务架构和技术架构?

    问题 在入职公司不久 我参加老员工再给新来的员工和管培生宣讲产品的业务 功能 直接拿着功能清单和实际页面在讲解 等把产品功能讲完了 我问了一下实习生和管培生怎么样 他们都说功能讲的太多 太乱 不清楚讲解产品的核心业务逻辑及操作流程 后来发现
  • 项目实战之RabbitMQ冗余双写架构

    作者名称 DaenCode gt https blog csdn net 2302 79094329 作者简介 啥技术都喜欢捣鼓捣鼓 喜欢分享技术 经验 生活 人生感悟 尝尽人生百味 方知世间冷暖 所属专栏 项目所感所想 gt https
  • SpringCloud | Dubbo 微服务实战——注册中心详解

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 Eureka Nacos Consul Zookeeper在Spring Cloud和Dubbo中实战 引言 在项目开发过程中 随着项目不断扩大 也就是业务的不断增多 我们将采用集群
  • 每天花2小时复习Java面试指南,高级架构视频,我进了阿里定级P7

    Java进阶架构师必备 基础 容器 并发 JVM Java8 计算机网络 计算机操作系统 Linux 数据结构 算法 mysql 优化思路 系统设计 分布式 线上问题调优 虚拟机 tomcat 面试指南 工具 添加图片注释 不超过 140
  • 进阶之Kotin协程原理和启动方式详细讲解(优雅使用协程)

    协程就是方法调用封装成类线程的API 方法调用当然比线程切换轻量 而封装成类线程的API后 它形似线程 可手动启动 有各种运行状态 能够协作工作 能够并发执行 前言 kotlin的协程在初学者看来是一个很神奇的东西 居然能做到用同步的代码块
  • 什么是微服务

    微服务是一种架构风格 它把一个大型的复杂软件应用划分为一系列小的服务 每个服务都具有单一的功能 运行在其自己的进程中 并通常基于不同的编程语言和框架 这些服务之间通过轻量级通信机制相互通信 这种通信机制基于HTTP协议 微服务架构风格使得系
  • 微服务常见的配置中心简介

    微服务架构中 常见的配置中心包括以下几种 Spring Cloud Config Spring Cloud Config是官方推荐的配置中心解决方案 它支持将配置文件存储在Git SVN等版本控制系统中 通过提供RESTful API 各个
  • Python 微服务架构指南

    概要 微服务架构作为一种设计风格 它将应用程序构建为一套小服务的集合 每个服务实现特定的业务功能 这些服务可以独立部署 扩展并围绕特定业务能力构建 Python 凭借其简洁易读的语法和强大的库生态系统成为实现微服务的受欢迎选择 本文将详细介

随机推荐

  • linux安装jdk之后,系统默认使用openjdk解决方法

    前两天装了个虚拟机配置java环境变量之后 java version 发现使用的仍然是 openjdk 咨询了下公司里的大神 成功解决 我配置的环境变量 export JAVA HOME home hadoop softwares jdk1
  • 在Windows 10中开启FTP服务

    在Windows 10中开启FTP服务 你需要首先安装FTP服务器功能 然后配置FTP站点 以下是详细步骤 步骤1 安装FTP服务器 打开 控制面板 点击 程序 点击 打开或关闭Windows功能 在弹出的Windows功能列表中 找到并展
  • sudo pip install -i https://pypi.douban.com/simple --user MySQL-python报错‘my_config.h‘ file not found

    异常 Google了无数次 都没用 后面无意之间看到了一篇博客 https www codenong com cs107125972 按照他的方式改了 但是没有用 仔细检查异常报错后 到了client的目录 copy了一个文件之后可以了
  • C-实现写一函数concat,将两个字符串连接(不能使用字符串函数)

    题目描述 写一函数concat 将两个字符串连接 不能使用字符串函数 输入 两行字符串 输出 连接后的字符串 样例输入 123 abc 样例输出 123abc 提示 来源 admin 算法思路 创建三个字符型数组 接受两组输入字符串 和合并
  • 一款超赞的算法可视化工具,让算法过程动态展示出来

    从文字或者图片中学习算法还是一件很无聊的事 当然 现在有许多很棒的网站可以查看各种算法的动画 然而 对于开发人员来说 如果能将实现算法的代码的实际执行操作通过可视化展现出来 那就是最好不过了 推荐一款开源工具 Algorithm Visua
  • 智星算力平台-网页版使用教程

    1 注册登录 网页搜索http gpu ai galaxy cn store 新用户点击右上角快速注册 2 算力市场 登录账号后进入首页 开始选择租用GPU 1 场景选择 根据使用需求选择所需场景 如不知该选云容器还是云主机可参考以下图解
  • Numpy 一维数组的倒序

    代码 方法一 import numpy as np a np array 1 2 3 4 5 6 b a 1 print b 方法二 a np array 1 2 3 4 5 6 b np flipud a print b 输出 D Ana
  • 使用面向对象的方式设计一段python多线程爬虫代码

    可以这样 import threading import requests def spider url response requests get url print response text if name main url list
  • 百望云亮相服贸会 重磅发布业财税融Copilot

    小望小望 我要一杯拿铁 好的 已下单成功 请问要开具发票嘛 在获得确认的指令后 百小望AI智能助手 按用户要求成功开具了一张电子发票 这是2023年服贸会国家会议中心 成果发布现场 百望云向与会嘉宾展示的业财税融Copilot产品的一个应用
  • jedis详细配置

    最大活动对象数 redis pool maxTotal 1000 最大能够保持idel状态的对象数 redis pool maxIdle 100 最小能够保持idel状态的对象数 redis pool minIdle 50 当池内没有返回对
  • Zookeeper概念简介+Zookeeper工作原理图+选主机制+Zookeeper集群角色+数据模型+规则

    Zookeeper是一个分布式协调服务 就是为用户的分布式应用程序提供协调服务 zookeeper是为别的分布式程序服务的 Zookeeper本身就是一个分布式程序 只要有半数以上节点存活 zk就能正常服务 Zookeeper所提供的服务涵
  • 【C++简明教程】随机数生成

    导言 C 简明教程 每次更新将会以代码块的形式发布 可以作为手册或者模块以供查询 今天介绍的是如何使用 C 生成随机数 随机数生成 C 自带的随机数生成函数 rand 但是这个不是实际意义上的随机数生成函数 rand 返回一随机数值的范围在
  • activemq结合mqtt发送p2p消息

    实现思路 所有用户订阅一个主题 当服务器端发起推送时使用jms协议发送消息到主题 并设置附带属性为目标用户的clientId 对该主题进行自定义分发策略 1 下载mqtt源码 自行下载 本案例以5 5 10为例 2 自定义分发策略 添加一个
  • BIO、NIO、AIO的区别

    1 简单介绍 同步阻塞 blocking IO 简称BIO 同步非阻塞 non blocking IO 简称NIO 异步非阻塞 asynchronous non blocking IO 简称AIO BIO 同步阻塞I O模式 数据的读取写入
  • 若依实现父弹窗获取子弹窗的数据

    参考这个 RuoYi 弹出新窗口选择数据回显到父页面 https blog csdn net u014440968 article details 116266076 还有官方的demo就行 最终实现效果 关键的方法 父页面 div cla
  • 基于ESB权限初始化流程开发总结

    在集团信息化系统的建设过程中 由于应用系统数量日益增多 很多集团缺少一个能有效地将众多系统身份认证 账号管理 授权等功能集成的软件系统 由此IDM应运而生 在IDM中统一权限的功能资源模块是对下游系统的平台进行功能资源的统一管控 在管控之前
  • HTTP学习——网关

    网关可以作为一种翻译器使用 抽象出了一种能够到达资源的方法 网关和代理的区别 代理连接的是两个或多个使用相同协议的应用程序 而网关连接的则是两个或多个使用不同协议的端点 网关扮演的是 协议转换器 的角色 Web网关在一侧使用HTTP协议 在
  • 离散数学 --- 命题逻辑 -- 命题符号化与命题公式

    第一部分 命题符号化及其应用 1 等价连接词中 P Q同为真同为假时为真 真假不同时为假 下面是各个联结词的真值表 复合命题的真值只取决于通过联结词构成他的简单命题的真值 与简单命题的内容无关 比如 中国在地球上且太阳东升西落 这是一个复合
  • 记录DHCP IPV6遇到的问题(一)

    进行DHCP IPV6连接的时候 经常遇到设备获取过一次地址后 在短时间内再次重新主动进行一次DHCP IPV6连接 会连接失败 从抓包来分析就是上行服务器不响应 通过与服务器方的沟通 了解到一点 服务器会记录请求设备的mac和DUID 是
  • SpringMVC的架构有什么优势?——视图与模型(二)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 React从入门到精通 前端炫酷代码分享 从0到英雄 vue成神之路 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架