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 的依赖管理能够帮助开发人员自动解决软件包依赖问题,使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中,避免出现版本冲突和依赖缺失等…...
iperf3 网络性能测试
iperf3测试 1、iperf3简介 iperf3是一个主动测试网络带宽的工具,可以测试iTCP、UDP、SCTP等网络带宽;可以通过参数修改网络协议、缓冲区、测试时间、数据大小等,每个测试结果会得出吞吐量、带宽、重传数、丢包数等测试结果 2、参数详解 通…...
08 Php学习:if语句、Switch语句
PHP 条件语句 当您编写代码时,您常常需要为不同的判断执行不同的动作。您可以在代码中使用条件语句来完成此任务。 在 PHP 中,提供了下列条件语句: if 语句 - 在条件成立时执行代码 if…else 语句 - 在条件成立时执行一块代码,…...
二分查找的边界问题是怎么产生的?
总结:二分查找的目标有两个,一个是左区件的右边界,一个是右区间的左边界 如何去理解二分的过程? 如果要查找的是左区间的右边界: 可以将[l, r]理解一个集合,这个集合范围内的数都有可能是最后需要得到的…...
华为 2024 届校园招聘-硬件通⽤/单板开发——第十套
华为 2024 届校园招聘-硬件通⽤/单板开发——第十套 部分题目分享,完整版带答案(有答案和解析,答案非官方,未仔细校正,仅供参考)(共十套)获取(WX:didadidadidida313,加我…...
五子棋:不会下五子棋也没关系,会用Java写五子棋就行
关注公号“微澜网络”获取完整源代码! 效果展示: 目录 效果展示: 导语: 游戏介绍: 程序设计: 1.游戏规则和功能: 2.用户界面设计: 3.程序架构设计: 4.可扩展性和灵…...
【VUE】使用Vue和CSS动画创建滚动列表
使用Vue和CSS动画创建滚动列表 在这篇文章中,我们将探讨如何使用Vue.js和CSS动画创建一个动态且视觉上吸引人的滚动列表。这个列表将自动滚动显示项目,类似于轮播图的方式,非常适合用于仪表盘、排行榜或任何需要在有限空间内展示项目列表的应…...
分布式结构化数据表Bigtable
文章目录 设计动机与目标数据模型行列时间戳 系统架构主服务器Chubby作用子表服务器SSTable结构子表实际组成子表地址组成子表数据存储及读/写操作数据压缩 性能优化局部性群组(Locality groups)压缩布隆过滤器 Bigtable是Google开发的基于GFS和Chubby的…...
langchain 加载 csv,json
csv from langchain_community.document_loaders.csv_loader import CSVLoaderloader CSVLoader(file_pathdata/专业描述.csv, csv_args{delimiter: ,,quotechar: ",fieldnames: [专业, 描述] }, encodingutf8, source_column专业)data loader.load() print(data)quote…...
Java-常见面试题收集(十三)
二十二 Redis 1 Redis 作用 Redis,全称Remote Dictionary Server,即远程字典服务,是一个开源的使用ANSI C语言编写的、支持网络的、基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它主要用于缓存数据的计算…...
第二证券策略:股指预计维持震荡格局 关注汽车、工程机械等板块
第二证券指出,指数自今年2月份阶段低点反弹以来,3月份持续高位整理。进入4月份之后面对年报和一季报的双重财报发表期,预计指数短期保持高位整理概率比较大。前期缺乏成绩支撑的概念股或有回落的危险,主张重视成绩稳定、估值低、分…...
专业制作网站费用/网店代运营公司靠谱吗
golang笔记02--golang基础语法1 介绍2 基础语法2.1变量定义2.2 内建变量类型2.3 常量与枚举2.4 条件语句2.5 循环2.6 函数2.7 指针3 注意事项4 说明1 介绍 本文继上文 golang笔记01–golang基础配置, 进一步了解 golang 基础语法和相应注意事项。 具体包括 : 变量定…...
购物网站建设优缺点/百度搜索风云榜小说排行榜
CRM是最常用的后台管理系统之一,以下为CRM的原型设计思路及框架 基本页面axure: 链接: https://pan.baidu.com/s/1tcuVdUw0f9jO4h4D-TPRJQ 密码: tj4h 基本组件axure: 链接: https://pan.baidu.com/s/1zVN-626LW6g24ioqgzmPcw 密码: suqf...
网站运营与管理论文/网站优化招聘
我们需要一部专门规范管理监控视频的法律法规,以更好地明确各方的权利义务关系,并促进监控视频发挥其维护社会安全、公众权利的正能量。 为规范公共安全视频系统管理,广州市拟对《广州市公共安全视频系统管理规定》进行修改,较现行…...
游戏网站的导航条怎么做的/营销推广活动策划方案大全
本文译自PCL官网教程,原文链接如下 Implicit Shape Model 隐式形状模型 在这个教程中我们将学习如何使用在 pcl::ism::ImplicitShapeModel 类中实现的隐式形状模型算法.这个算法在Jan Knopp, Mukta Prasad, Geert Willems, Radu Timofte, and Luc Van Gool撰写的文章”Hough…...
日语网站设计/十大软件免费下载网站排行榜
c语言没有String类型,更没有String.length()方法,那么要怎么求数组长度呢? 数组举例:int arr[]{2,3,1,4}, char str[]{“Hello”} 获得数组长度可以用这个方法: 比如int数组 sizeOf(arr)/sizeOf(int) 可以求出数组长…...
温州市建设小学大南网站/南宁关键词排名公司
5 类型参数列表我们学习了模板函数和模板类的定义和使用。但是,看到的“类型形参表”都只有一个元素,那么,如果要定义多个类型,应该怎么样操作?在telplate<类型形参表>中,“类型形参表”可以定义多个…...