SpringMVC--SpringMVC的视图

目录

1. 总述

2. ThymeleafView视图

3. 转发视图

4. 重定向视图

5. 视图控制器view-controller


1. 总述

在SpringMVC框架中,视图(View)是一个非常重要的概念,它负责将模型数据(Model)展示给用户。简单来说,视图就是用来生成用户界面的技术或模板。

SpringMVC提供了多种视图类型

主要分为两大类:转发视图(Forward View)和重定向视图(Redirect View)。

  1. 转发视图(Forward View):当控制器(Controller)处理完用户的请求后,可以直接将模型数据传递给视图,然后视图根据这些数据生成用户界面。在这个过程中,用户的浏览器并不会进行页面刷新,数据是在服务器内部传递的。这种方式通常用于展示数据或者表单提交后的错误提示等。
    1. 举个例子,张三向李四借钱,但李四没有钱。于是李四向王五借钱,并告诉王五将钱借给张三。这个过程中,张三只向李四请求借钱,但实际上钱是从王五那里借来的。
    • 转发视图:用户请求 -> 服务器内部处理 -> 服务器直接返回结果给用户浏览器(用户不刷新页面)。

  1. 重定向视图(Redirect View):与转发视图不同,重定向视图会先发送一个重定向的响应给用户的浏览器,告诉浏览器去请求另一个URL。这样用户的浏览器会发起一个新的请求,服务器接收到新的请求后,再将模型数据传递给视图生成用户界面。这种方式通常用于表单提交后的成功页面,因为这样可以防止用户刷新页面时重复提交表单。
    1. 再举个例子,张三向李四借钱,但李四没有钱。李四告诉张三去找王五借钱。于是张三自己去找王五借钱,这个过程中,张三的请求被重定向到了王五那里。
    • 重定向视图:用户请求 -> 服务器指示浏览器去请求另一个地址 -> 浏览器发起新的请求 -> 服务器处理并返回结果给浏览器(用户浏览器刷新页面)。

除了这两种基本的视图类型,SpringMVC还支持多种视图技术,例如:

  • JSTL(JavaServer Pages Standard Tag Library)当你的项目中包含了jstl依赖时,SpringMVC会自动将转发视图转换为JstlView。JSTL提供了一套丰富的标签库,可以方便地在JSP页面中进行条件判断、循环等操作,使得页面开发更加高效。
  • ThymeleafThymeleaf是一种现代的服务器端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 模板文件(或者根据配置的前后缀来确定具体的文件名)。

这里是一个简单的例子来说明这个过程:

  1. 假设你有一个 SpringMVC 控制器,其中有一个方法处理用户的请求,并返回一个视图名称,比如 "userProfile"。
@Controller
public class MyController {@RequestMapping("/user")public String showUserProfile(Model model) {model.addAttribute("user", new User("张三", 25));return "userProfile"; // 这里的 "userProfile" 就是视图名称}
}

  1. 在你的 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;}
}
  1. 根据配置,SpringMVC 会将 "userProfile" 这个视图名称转换为 "templates/userProfile.html" 这个资源路径。
  2. Thymeleaf 模板引擎会找到 "templates/userProfile.html" 文件,并使用控制器方法中添加到模型(Model)的数据(在这个例子中是 "user" 对象)来填充模板中的占位符或表达式。
  3. 最终,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 请求能够正常映射到 MyControllershowPage 方法,你需要在配置文件中添加 <mvc:annotation-driven /> 标签,否则 /testView 的映射将会覆盖所有的控制器方法映射。

<mvc:annotation-driven />

总结一下,view-controller 提供了一种快速定义请求到视图映射的方法,但它的优先级很高,可能会覆盖其他控制器方法的映射。通过使用 <mvc:annotation-driven /> 标签,你可以确保 Spring MVC 正常处理带有 @Controller 注解的控制器中的方法。


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

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

相关文章

demo(四)nacosgateway(2)gatewayspringsercurity

一、思路 1、整体思路 用户通过客户端访问项目时&#xff0c;前端项目会部署在nginx上&#xff0c;加载静态文件时直接从nginx上返回即可。当用户在客户端操作时&#xff0c;需要调用后端的一些服务接口。这些接口会通过Gateway网关&#xff0c;网关进行一定的处理&#xff0…

Redis(二) 可编程性

结合上一期 Redis(一) Redis简介(Redis(一) Redis简介-CSDN博客) 目录 Redis 可编程性 运行脚本 只读脚本 只读脚本历史记录 最长执行时间 Redis 函数 加载库和函数 输入键和常规参数 扩展库 重用库中的代码 Lua 脚本 脚本参数化 从脚本与 Redis 交互 脚本缓…

Thingsboard PE 白标的使用

只有专业版支持白标功能。 使用 ThingsBoard Cloud 或安装您自己的平台实例。 一、介绍 ThingsBoard Web 界面提供了简便的操作,让您能够轻松配置您的公司或产品标识和配色方案,无需进行编码工作或重新启动服务。 系统管理员、租户和客户管理员可以根据需要自定义配色方案、…

精通技术写作:如何写出高质量技术文章?

CSDN 的朋友你们好&#xff0c;我是未来&#xff0c;今天给大家带来专栏【程序员博主教程&#xff08;完全指南&#xff09;】的第 7 篇文章“如何撰写高质量技术文章”。本文深入探讨了如何写好一篇技术文章。文章给出了好的技术文章的定义和分析&#xff0c;并提供了从选题、…

Day103:漏洞发现-漏扫项目篇Poc开发Rule语法反链判断不回显检测Yaml生成

目录 Xray&Afrog-Poc开发-环境配置&编写流程 Xray-Poc开发-数据回显&RCE不回显&实验室 Afrog-Poc开发-数据回显&RCE不回显&JDNI注入 HTTP/S数据回显Poc开发-CVE-2023-28432 HTTP/S不回显RCE-Poc开发-CVE-2022-30525 HTTP/S不回显JNDI-Poc开发 知…

Upload-labs(Pass-14 - Pass-16)

Pass-14 &#xff08;图片马&#xff0c;判断文件类型&#xff09; 图片的格式在防护中通常是不会使用后缀进行判断的依据&#xff0c;文件头是文件开头的一段二进制码&#xff0c;不同类型的图片也就会有不同的二进制头。   JPEG (jpg)&#xff0c;文件头&#xff1a;FF D…

比较有用的C++编译错误解决方法

学习VC&#xff0b;&#xff0b;时经常会遇到链接错误LNK2001&#xff0c;该错误非常讨厌&#xff0c;因为对于编程者来说&#xff0c;最好改的错误莫过于编译错误&#xff0c;而一般说来发生连接错误时&#xff0c;编译都已通过。产生连接错误的原因非常多&#xff0c;尤其LNK…

便携式污水采样器的工作环境要求

便携式污水采样器的工作环境要求极为严格&#xff0c;以确保其能够准确、稳定地采集和分析水样。首先&#xff0c;该采样器必须在干燥、通风良好的环境中工作&#xff0c;以避免潮湿和高温对其内部电子元件的损害。同时&#xff0c;为了保证采样器的稳定性和精度&#xff0c;工…

【数据结构(六)】队列

❣博主主页: 33的博客❣ ▶️文章专栏分类:数据结构◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你学更多数据结构知识 目录 1.前言2.概念3.队列的使用4.循环队列5.双端队列6.经典习题6.1队列实现栈6.2栈实现队…

MySQL批量修改记录

我们知道MySQL支持批量添加记录&#xff0c;用法也比较简单&#xff0c;不过需要编码需要注意一下&#xff0c;因为很容易搞错 var jargs require(./argspw.json); const mysql require("mysql"); const mysqlpool mysql.createPool({host:jargs.mysqlip,user:jar…

一款挺不错网站维护页面HTML源码

一款挺不错网站维护页面源码&#xff0c;单HTML不需要数据库&#xff0c;上传到你的虚拟机就可以用做维护页面还不错&#xff0c;用处多。。 源码下载 一款挺不错网站维护页面源码

Ajax使用异步对象发送请求简介

​ 文章目录 一、什么是Ajax二、全局刷新和局部刷新二、Ajax中使用XMLHttpRequest对象&#xff08;Ajax核心步骤&#xff09;1、创建异步对象2、给异步对象绑定事件3、异步对象的属性 readyState 表示异步对象请求的状态变化4、初始异步请求对象5、使用异步对象发送请求6、jso…

Android DB锁问题

并发访问事务 在Android中使用SQLite数据库时&#xff0c;如果多个线程尝试同时对同一个数据库开启事务&#xff0c;可能会遇到几个问题&#xff1a; 锁定异常 (android.database.sqlite.SQLiteDatabaseLockedException): 如果一个线程已经在数据库上持有一个写事务&#xff0…

LangChain LangServe 学习笔记

LangChain LangServe 学习笔记 0. 引言1. LangServe 概述2. 特性3. 限制4. 安装5. 示例应用程序6. OpenAPI文档7. Python SDK 客户端8. Playground9. 聊天可运行页面 0. 引言 使用 LangServe 可以立即将您的LLM应用程序变成 API 服务器。 LangServe 使用 FastAPI 构建&#x…

three.js(1):three.js简介

1 什么是three.js three.js&#xff0c;一个WebGL引擎&#xff0c;基于JavaScript&#xff0c;可直接运行GPU驱动游戏与图形驱动应用于浏览器。其库提供的特性与API以绘制3D场景于浏览器。 2 下载地址 three.js下载地址:https://github.com/mrdoob/three.js 3 目录介绍 下载…

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题5

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题5 第一阶段竞赛项目试题 本文件为信息安全管理与评估项目竞赛-第一阶段试题&#xff0c;第一阶段内容包括&#xff1a;网络平台搭建与设备安全防护。 本次比赛时间为180分钟。 介绍 竞赛阶段…

浅谈函数 fscanf/sscanf 和 fprintf/sprintf

目录 一&#xff0c;fprintf 的介绍和使用1. 函数介绍2. 函数使用 二&#xff0c;fscanf 的介绍和使用1. 函数介绍2. 函数使用 三&#xff0c;sprintf 的介绍和使用1. 函数介绍2. 函数使用 四&#xff0c;sscanf 的介绍和使用1&#xff0c;函数介绍2&#xff0c;函数使用 五&am…

SSL Pinning之双向认证

双向认证处理流程 概述获取证书逆向app 获取证书的KeyStore的 key通过jadx 反编译 app 获取证书&#xff1a;frida hook 证书转换命令行转换portecle 工具使用 charles 配置 p12 格式证书 概述 本篇只介绍怎么解决ssl pinning&#xff0c; 不讲ssl/tls 原理。 为了解决ssl pinn…

BCrypt实现信息加密

1.BCrypt的概述 bcrypt 是一种密码哈希函数&#xff0c;通常用于加密密码。它采用了 Blowfish 加密算法的变种&#xff0c;并结合了盐&#xff08;salt&#xff09;和密钥延时&#xff08;key stretching&#xff09;等技术&#xff0c;以增加密码破解的难度。 2.BCrypt的使用…

RT-Thread 多级目录 scons 构建

前言 RT-Thread 默认使用 scons 进行工程的构建&#xff0c;虽然 RT-Thread BSP 中的 hello world 例程比较简单&#xff0c;实际项目开发&#xff0c;可能源码的工程会由多级目录&#xff0c;如何让多级的目录参与构建&#xff1f; scons 构建时&#xff0c;除了依赖工程的根…