SpringMVC--SpringMVC的视图
目录
1. 总述
2. ThymeleafView视图
3. 转发视图
4. 重定向视图
5. 视图控制器view-controller
1. 总述
在SpringMVC框架中,视图(View)是一个非常重要的概念,它负责将模型数据(Model)展示给用户。简单来说,视图就是用来生成用户界面的技术或模板。
SpringMVC提供了多种视图类型
主要分为两大类:转发视图(Forward View)和重定向视图(Redirect View)。
- 转发视图(Forward View):当控制器(Controller)处理完用户的请求后,可以直接将模型数据传递给视图,然后视图根据这些数据生成用户界面。在这个过程中,用户的浏览器并不会进行页面刷新,数据是在服务器内部传递的。这种方式通常用于展示数据或者表单提交后的错误提示等。
-
- 举个例子,张三向李四借钱,但李四没有钱。于是李四向王五借钱,并告诉王五将钱借给张三。这个过程中,张三只向李四请求借钱,但实际上钱是从王五那里借来的。
-
- 转发视图:用户请求 -> 服务器内部处理 -> 服务器直接返回结果给用户浏览器(用户不刷新页面)。
- 重定向视图(Redirect View):与转发视图不同,重定向视图会先发送一个重定向的响应给用户的浏览器,告诉浏览器去请求另一个URL。这样用户的浏览器会发起一个新的请求,服务器接收到新的请求后,再将模型数据传递给视图生成用户界面。这种方式通常用于表单提交后的成功页面,因为这样可以防止用户刷新页面时重复提交表单。
-
- 再举个例子,张三向李四借钱,但李四没有钱。李四告诉张三去找王五借钱。于是张三自己去找王五借钱,这个过程中,张三的请求被重定向到了王五那里。
-
- 重定向视图:用户请求 -> 服务器指示浏览器去请求另一个地址 -> 浏览器发起新的请求 -> 服务器处理并返回结果给浏览器(用户浏览器刷新页面)。
除了这两种基本的视图类型,SpringMVC还支持多种视图技术,例如:
- JSTL(JavaServer Pages Standard Tag Library):当你的项目中包含了jstl依赖时,SpringMVC会自动将转发视图转换为JstlView。JSTL提供了一套丰富的标签库,可以方便地在JSP页面中进行条件判断、循环等操作,使得页面开发更加高效。
- Thymeleaf:Thymeleaf是一种现代的服务器端Java模板引擎,它可以与SpringMVC无缝集成。当你在SpringMVC的配置文件中添加了Thymeleaf视图解析器后,SpringMVC会使用这个解析器来处理Thymeleaf模板。Thymeleaf模板文件通常具有
.html
扩展名,它们可以包含动态数据和逻辑,使得页面开发更加灵活和强大。
总的来说,SpringMVC的视图是用于展示数据和生成用户界面的组件,你可以根据项目需求选择合适的视图技术和类型来实现用户界面的开发。
2. ThymeleafView视图
建议结合视频一起看——44_尚硅谷_SpringMVC_SpringMVC视图:ThymeleafView_哔哩哔哩_bilibili
当然可以。ThymeleafView 是 SpringMVC 框架中用于渲染 Thymeleaf 模板的一种视图类型。Thymeleaf 是一个强大的服务器端模板引擎,它允许开发者在 HTML 模板中嵌入动态数据和逻辑,从而生成最终的 HTML 页面。
在 SpringMVC 应用中,当你的控制器方法返回一个视图名称时,如果没有指定特定的前缀,那么这个名称会被视图解析器处理。视图解析器会根据配置添加前缀和后缀,形成一个完整的资源路径,然后根据这个路径找到相应的 Thymeleaf 模板文件。
什么叫没有指定特定的前缀?就像下面这样
@Controller
public class MyController {@RequestMapping("/greeting")public String sayHello(Model model) {model.addAttribute("message", "Hello, Thymeleaf!");return "success"; // 这里返回的 "success" 没有特定的前缀}
}
在这个例子中,"success" 就是没有特定前缀的视图名称。SpringMVC 会根据配置的视图解析器来解析这个名称。如果配置了 Thymeleaf 视图解析器,它会查找名为 "success.html" 的 Thymeleaf 模板文件(或者根据配置的前后缀来确定具体的文件名)。
这里是一个简单的例子来说明这个过程:
- 假设你有一个 SpringMVC 控制器,其中有一个方法处理用户的请求,并返回一个视图名称,比如 "userProfile"。
@Controller
public class MyController {@RequestMapping("/user")public String showUserProfile(Model model) {model.addAttribute("user", new User("张三", 25));return "userProfile"; // 这里的 "userProfile" 就是视图名称}
}
- 在你的 SpringMVC 配置文件中,你已经配置了 Thymeleaf 视图解析器,并设置了视图的前缀和后缀。例如,前缀是 "templates/",后缀是 ".html"。
@Configuration
public class WebConfig {@Beanpublic SpringResourceTemplateResolver templateResolver() {SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();resolver.setPrefix("templates/");resolver.setSuffix(".html");resolver.setTemplateMode(TemplateMode.HTML);return resolver;}@Beanpublic SpringTemplateEngine templateEngine() {SpringTemplateEngine engine = new SpringTemplateEngine();engine.setTemplateResolver(templateResolver());return engine;}@Beanpublic ThymeleafViewResolver viewResolver() {ThymeleafViewResolver resolver = new ThymeleafViewResolver();resolver.setTemplateEngine(templateEngine());resolver.setOrder(1); // 设置视图解析器的优先级return resolver;}
}
- 根据配置,SpringMVC 会将 "userProfile" 这个视图名称转换为 "templates/userProfile.html" 这个资源路径。
- Thymeleaf 模板引擎会找到 "templates/userProfile.html" 文件,并使用控制器方法中添加到模型(Model)的数据(在这个例子中是 "user" 对象)来填充模板中的占位符或表达式。
- 最终,Thymeleaf 模板引擎会生成一个完整的 HTML 页面,这个页面将包含用户张三的信息,并发送给用户的浏览器进行展示。
当控制器方法中所设置的视图名称没有任何前缀时,此时的视图名称会被SpringMVC配置文件中所配置的视图解析器解析,视图名称拼接视图前缀和视图后缀所得到的最终路径,会通过转发的方式实现跳转
3. 转发视图
建议结合视频一起看——45_尚硅谷_SpringMVC_SpringMVC视图:InternalResourceView_哔哩哔哩_bilibili
在 SpringMVC 框架中,当用户向服务器发送一个请求时,服务器需要决定如何响应这个请求。响应的方式之一就是显示一个页面给用户。这里的页面展示就是通过所谓的“视图”来完成的。
转发视图(Forward View)是 SpringMVC 中的一种视图类型,它的作用是将用户的请求从当前的控制器方法转发到另一个页面。这个过程对用户来说是透明的,用户不会感觉到页面地址的变化,就像直接在当前页面上显示了新的内容一样。
在 SpringMVC 中,如果你想使用转发视图,你可以在控制器方法中返回一个以 "forward:" 开头的字符串。这个字符串后面的部分就是目标页面的路径。例如,如果你想在控制器方法中告诉服务器转发到 "/employee" 这个路径的页面,你可以这样写:
@RequestMapping("/testForward")
public String testForward() {return "forward:/employee";
}
这里的 "forward:" 就是一个标记,告诉 SpringMVC 要使用转发视图。SpringMVC 看到这个标记后,就会去掉 "forward:" 这个前缀,然后将剩下的 "/employee" 当作目标页面的路径。然后服务器会找到这个路径对应的页面,并且显示给用户。
这种方式的好处是,用户的浏览器不会重新发起一个新的请求,而是服务器内部直接将请求转发到了另一个页面。这样做可以保持用户的会话状态不变,比如用户登录状态等,同时也避免了用户重复提交表单的问题。
总结一下,转发视图是 SpringMVC 中用于在服务器内部将用户请求从一个控制器方法转发到另一个页面的一种机制,通过在控制器方法中返回特定的字符串来实现。这种方式对于保护用户的会话状态和提升用户体验非常有帮助。
4. 重定向视图
建议结合视频一起看——46_尚硅谷_SpringMVC_SpringMVC视图:RedirectView_哔哩哔哩_bilibili
在 Web 应用中,有时候我们需要在处理完用户的请求后,让用户的浏览器去访问另一个页面。这种操作叫做“重定向”。重定向的好处是,它会让用户的浏览器认为他们自己点击了一个新的链接,从而访问了新的页面。这就像是你在浏览网页时,点击了一个链接,然后页面跳转到了另一个地址一样。
在 SpringMVC 框架中,我们可以通过一种特殊的方式来告诉服务器我们需要进行重定向。这种方式就是在控制器方法中返回一个以 "redirect:" 开头的字符串。这个字符串后面的部分就是用户浏览器将要跳转到的新页面的路径。
例如,如果你有一个控制器方法处理用户的登录请求,当用户成功登录后,你可能希望他们的浏览器跳转到一个欢迎页面。你可以这样写:
@RequestMapping("/login")
public String login() {// 这里假设用户登录成功// 然后我们希望浏览器跳转到一个欢迎页面return "redirect:/welcome";
}
在这个例子中,"redirect:" 后面跟着的是 "/welcome",这意味着用户的浏览器将会跳转到 "/welcome" 这个路径的页面。这个过程对用户来说是无缝的,他们只会看到一个新页面的加载,而不会意识到这是一个由服务器控制的重定向操作。
总结一下,重定向视图(Redirect View)是 SpringMVC 中用于在处理完用户请求后,让浏览器发起一个新的请求去访问另一个页面的一种机制。通过在控制器方法中返回以 "redirect:" 开头的字符串来实现。这种方式对于改善用户体验和页面跳转控制非常有用。
5. 视图控制器view-controller
建议结合视频一起看——47_尚硅谷_SpringMVC_SpringMVC的视图控制器_哔哩哔哩_bilibili
视图控制器(view-controller
)是 Spring MVC 中的一个特性,它允许你通过配置文件定义请求和视图之间的映射关系,而不是使用传统的控制器方法。这种方式简化了代码,因为你不需要创建一个完整的控制器类和方法,只需要定义请求路径和对应的视图名称即可。
下面是一个简单的例子来说明如何使用 view-controller
:
<!-- 在Spring MVC的配置文件中定义一个视图控制器 -->
<mvc:view-controller path="/testView" view-name="success" />
这里的配置表示,当用户访问 /testView
这个路径时,Spring MVC 会自动将请求映射到名为 "success" 的视图上。"success" 是视图的名称,它通常对应一个 JSP、HTML 或其他类型的页面文件。这个过程不需要编写任何 Java 代码,只需要在配置文件中声明。
注意:
需要注意的是,如果你在 Spring MVC 应用中使用了 view-controller
标签,那么其他的控制器方法映射将不会生效。这是因为 view-controller
标签定义的映射具有最高的优先级。为了使其他的控制器方法映射生效,你需要在 Spring MVC 的核心配置文件中添加 <mvc:annotation-driven />
标签,这个标签会开启 Spring MVC 的注解驱动功能,允许 Spring MVC 处理使用 @Controller
注解定义的控制器中的方法。
举个例子,如果你有以下的控制器:
@Controller
public class MyController {@RequestMapping("/myPage")public String showPage() {return "myPageView";}
}
同时,你也有一个 view-controller
配置:
<mvc:view-controller path="/testView" view-name="success" />
如果你想让 /myPage
请求能够正常映射到 MyController
的 showPage
方法,你需要在配置文件中添加 <mvc:annotation-driven />
标签,否则 /testView
的映射将会覆盖所有的控制器方法映射。
<mvc:annotation-driven />
总结一下,view-controller
提供了一种快速定义请求到视图映射的方法,但它的优先级很高,可能会覆盖其他控制器方法的映射。通过使用 <mvc:annotation-driven />
标签,你可以确保 Spring MVC 正常处理带有 @Controller
注解的控制器中的方法。
相关文章:
SpringMVC--SpringMVC的视图
目录 1. 总述 2. ThymeleafView视图 3. 转发视图 4. 重定向视图 5. 视图控制器view-controller 1. 总述 在SpringMVC框架中,视图(View)是一个非常重要的概念,它负责将模型数据(Model)展示给用户。简单…...

Datax,hbase与mysql数据相互同步
参考文章:datax mysql 和hbase的 相互导入 目录 0、软件版本说明 1、hbase数据同步至mysql 1.1、hbase数据 1.2、mysql数据 1.3、json脚本(hbase2mysql.json) 1.4、同步成功日志 2、mysql数据同步至hbase 1.1、hbase数据 1.2、mysql…...
ubuntu spdlog 封装成c++类使用
安装及编译方法:ubuntu spdlog 日志安装及使用_spdlog_logger_info-CSDN博客 h文件: #ifndef LOGGING_H #define LOGGING_H#include <iostream> #include <cstring> #include <sstream> #include <string> #include <memor…...

【C语言】——字符串函数的使用与模拟实现(上)
【C语言】——字符串函数 前言一、 s t r l e n strlen strlen 函数1.1、函数功能1.2、函数的使用1.3、函数的模拟实现(1)计数法(2)递归法(3)指针 - 指针 二、 s t r c p y strcpy strcpy 函数2.1、函数功能…...

数据库(1)
目录 1.什么是事务?事务的基本特性ACID? 2.数据库中并发一致性问题? 3.数据的隔离等级? 4.ACID靠什么保证的呢? 5.SQL优化的实践经验? 1.什么是事务?事务的基本特性ACID? 事务指…...
VirtualBox - 与 Win10 虚拟机 与 宿主机 共享文件
原文链接 https://www.cnblogs.com/xy14/p/10427353.html 1. 概述 需要在 宿主机 和 虚拟机 之间交换文件复制粘贴 貌似不太好使 2. 问题 设置了共享文件夹之后, 找不到目录 3. 环境 宿主机 OS Win10开启了 网络发现 略虚拟机 OS Win10开启了 网络发现 略Virtualbox 6 4…...
深入浅出 useEffect:React 函数组件中的副作用处理详解
useEffect 是 React 中的一个钩子函数,用于处理函数组件中的副作用操作,如发送网络请求、订阅消息、手动修改 DOM 等。下面是 useEffect 的用法总结: 基本用法 import React, { useState, useEffect } from react;function Example() {cons…...

《QT实用小工具·十九》回车跳转到不同的编辑框
1、概述 源码放在文章末尾 该项目实现通过回车键让光标从一个编辑框跳转到另一个编辑框,下面是demo演示: 项目部分代码如下: #ifndef WIDGET_H #define WIDGET_H#include <QWidget>namespace Ui { class Widget; }class Widget : p…...

基本的数据类型在16位、32位和64位机上所占的字节大小
1、目前常用的机器都是32位和64位的,但是有时候会考虑16位机。总结一下在三种位数下常用的数据类型所占的字节大小。 数据类型16位(byte)32位(byte)64位(byte)取值范围char111-128 ~ 127unsigned char1110 ~ 255short int / short222-32768~32767unsigned short222…...

关注招聘 关注招聘 关注招聘
🔥关注招聘 🔥关注招聘 🔥关注招聘 🔥开源产品: 1.农业物联网平台开源版 2.充电桩系统开源版 3.GPU池化软件(AI人工智能训练平台/推理平台) 开源版 产品销售: 1.农业物联网平台企业版 2.充电桩系统企业…...

Django框架设计原理
相信大多数的Web开发者对于MVC(Model、View、Controller)设计模式都不陌生,该设计模式已经成为Web框架中一种事实上的标准了,Django框架自然也是一个遵循MVC设计模式的框架。不过从严格意义上讲,Django框架采用了一种更…...

Linux ARM平台开发系列讲解(QEMU篇) 1.2 新添加一个Linux kernel设备树
1. 概述 上一章节我们利用QEMU成功启动了Linux kernel,但是细心的小伙伴就会发现,我们用默认的defconfig是没有找到设备树源文件的,但是又发现kernel启动时候它使用了设备树riscv-virtio,qemu,这是因为qemu用了一个默认的设备树文件,该章节呢我们就把这个默认的设备树文件…...

OSPF动态路由实验(思科)
华为设备参考: 一,技术简介 OSPF(Open Shortest Path First)是一种内部网关协议,主要用于在单一自治系统内决策路由。它是一种基于链路状态的路由协议,通过链路状态路由算法来实现动态路由选择。 OSPF的…...

MyBatis 等类似的 XML 映射文件中,当传入的参数为空字符串时,<if> 标签可能会导致 SQL 语句中的条件判断出现意外结果。
问题 传入的参数为空字符串,但还是根据参数查询了。 原因 在 XML 中使用 标签进行条件判断时,需要明确理解其行为。在 MyBatis 等类似的 XML 映射文件中, 标签通常用于动态拼接 SQL 语句的条件部分。当传入的参数 riskLevel 为空字符串时…...

git的安装
git的安装 在CentOS系统上安装git时,我们可以选择yum安装或者源码编译安装两种方式。Yum的安装方式的好处是比较简单,直接输入”yum install git”命令即可。但是Yum的安装的话,不好控制安装git的版本。如果我们想选择安装git的版本…...

蓝桥杯嵌入式模板(cubemxkeil5)
LED 引脚PC8~PC15,默认高电平(灭)。 此外还要配置PD2为输出引脚(控制LED锁存) ,默认低电平(锁住)!!! #include "led.h"void led_disp…...

ELFK (Filebeat+ELK)日志分析系统
一. 相关介绍 Filebeat:轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给 logstash 进或是直接发给 Elasticsearch 存储,性能上相…...
HttpClient、OKhttp、RestTemplate接口调用对比( Java HTTP 客户端)
文章目录 HttpClient、OKhttp、RestTemplate接口调用对比HttpClientOkHttprestTemplate HttpClient、OKhttp、RestTemplate接口调用对比 HttpClient、OkHttp 和 RestTemplate 是三种常用的 Java HTTP 客户端库,它们都可以用于发送 HTTP 请求和接收 HTTP 响应&#…...
[旅游] 景区排队上厕所
人有三急,急中最急是上个厕所要排队,而且人还不少!这样就需要做一个提前量的预测,万一提前量的预测,搞得不当,非得憋出膀光炎,或者尿裤子。尤其是女厕所太少!另外一点是儿童根本就没…...
三 maven的依赖管理
一 maven依赖管理 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题,使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中,避免出现版本冲突和依赖缺失等…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...
LangChain【6】之输出解析器:结构化LLM响应的关键工具
文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器?1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...

MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...