当前位置: 首页 > news >正文

SpringMVC 学习(六)之视图

目录

1 SpringMVC 视图介绍

2 JSP 视图

3 Thymeleaf 视图

4 FreeMarker 视图

5 XSLT 视图

6 请求转发与重定向

6.1 请求转发 (Forward)

6.2 重定向 (Redirect)

7 视图控制器 (view-controller)


1 SpringMVC 视图介绍

        在 SpringMVC 框架中,视图可以是一个 JSP 页面、HTML 文件、模板文件(如 Thymeleaf、FreeMarker 等)、JSON 响应、XML 响应或其他类型的内容。SpringMVC 中的视图负责渲染数据和将模型 Model 中的数据展示给用户。SpringMVC 提供了多种视图类型,包括 JSP 视图、Thymeleaf 视图、FreeMarker 视图、XSLT 视图等。

2 JSP 视图

        在 SpringMVC 中,我们可以使用 JSP 视图来展示数据。首先需要在 Spring 配置文件中配置InternalResourceViewResolver 来指定 JSP 页面的位置,然后在控制器中返回逻辑视图名,Spring 会自动将其解析为对应的 JSP 页面。

        当配置多个视图解析器时,它们的配置顺序决定了解析视图的优先级。通常情况下,我们应该把优先级高的视图解析器配置在前面,这样它们会先尝试解析视图。如果某个视图解析器能够解析视图,后面的视图解析器就不会再尝试。此外,我们也可以通过 order 来设置解析器的优先级,order 越小,优先级越高。

<!-- 配置 JSP 解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 配置前缀 --><property name="prefix" value="/WEB-INF/pages/"/><!-- 配置后缀 --><property name="suffix" value=".jsp"/><!-- 定义解析器顺序 --><property name="order" value="1"/>
</bean>

3 Thymeleaf 视图

        Thymeleaf 是一种现代化的服务器端 Java 模板引擎,它可以直接在浏览器中预览页面,并支持 HTML5 标准。在 SpringMVC 中,我们可以使用 Thymeleaf 视图来展示数据。首先需要在 Spring 配置文件中配置 ThymeleafViewResolver 来指定 Thymeleaf 模板的位置,然后在控制器中返回逻辑视图名,Spring 会自动将其解析为对应的 Thymeleaf 模板。

导入依赖

<!-- Spring5和Thymeleaf整合包 -->
<dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.12.RELEASE</version>
</dependency>
<!-- 配置 Thymeleaf 解析器 --><bean id="ThymeleafViewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver"><!-- 定义解析器顺序 --><property name="order" value="1"/><property name="characterEncoding" value="UTF-8"/><property name="templateEngine"><bean class="org.thymeleaf.spring5.SpringTemplateEngine"><property name="templateResolver"><bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"><!-- 视图前缀 --><property name="prefix" value="/WEB-INF/pages/"/><!-- 视图后缀 --><property name="suffix" value=".html"/><property name="templateMode" value="HTML5"/><property name="characterEncoding" value="UTF-8" /></bean></property></bean></property></bean>

4 FreeMarker 视图

        FreeMarker 是一种模板引擎,它可以生成任意类型的文本,包括 HTML、XML、CSS、JavaScript 等。在 SpringMVC 中,我们可以使用 FreeMarker 视图来展示数据。首先需要在 Spring 配置文件中配置 FreeMarkerViewResolver 来指定 FreeMarker 模板的位置,然后在控制器中返回逻辑视图名,Spring 会自动将其解析为对应的 FreeMarker 模板。

<!-- 配置 FreeMarker 解析器 -->
<bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".ftl"/><!-- 定义解析器顺序 --><property name="order" value="2"/>
</bean>

5 XSLT 视图

        XSLT (Extensible Stylesheet Language Transformations) 是一种 XML 转换语言,它可以将 XML 文档转换为其他格式,如 HTML、JSON、CSV 等。在 SpringMVC 中,我们可以使用 XSLT 视图来展示数据。首先需要在 Spring 配置文件中配置 XsltViewResolver 来指定 XSLT 模板的位置,然后在控制器中返回逻辑视图名,Spring 会自动将其解析为对应的 XSLT 模板。

<!-- 配置 Xslt 解析器 -->
<bean id="XsltViewResolver" class="org.springframework.web.servlet.view.xslt.XsltViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".xslt"/><!-- 定义解析器顺序 --><property name="order" value="3"/>
</bean>

6 请求转发与重定向

        在SpringMVC中,请求转发 (Forward) 和重定向 (Redirect) 是两种常用的页面跳转方式,它们用于将请求发送到不同的资源或页面。

6.1 请求转发 (Forward)

        请求转发是指将请求转发到另一个资源或页面,这个资源或页面通常位于同一个 Web 应用内部。在 SpringMVC 中,可以使用 forward 关键字进行请求转发。请求转发是服务器内部的跳转,客户端浏览器并不知道页面发生了转发,它的地址栏不会发生变化。

@Controller
public class MyController {@RequestMapping("/forwardExample")public String forwardExample() {return "forward:/newPage"; // 转发到 /newPage 页面}
}
6.2 重定向 (Redirect)

        重定向是指将请求重定向到另一个 URL,这个 URL 可以是同一个 Web 应用内部的资源,也可以是外部的 URL。在 SpringMVC 中,可以使用 redirect 关键字进行重定向。重定向是客户端的跳转,服务器会告诉浏览器要访问一个新的 URL,因此浏览器会发送新的请求。

@Controller
public class MyController {@RequestMapping("/redirectExample")public String redirectExample() {return "redirect:/newPage"; // 重定向到 /newPage 页面}
}

总结:请求转发是一次请求,重定向是多次请求。类似计算机网络中的 DNS 解析过程(递归查询和迭代查询)

7 视图控制器 (view-controller)

        在 SpringMVC 中,视图控制器 (view-controller) 是一种用于将 URL 路径映射到视图的简化方式。它允许开发人员将 URL 直接映射到视图,而无需创建额外的控制器方法来处理请求,这样可以简化配置。

@RequestMapping("/view")
public String view() {return "success";
}

通过在 SpringmMVC 的配置文件中添加 <mvc:view-controller> 标签,就可以代替上述控制器方法。

<mvc:view-controller path="/view" view-name="success"></mvc:view-controller>
当 SpringMVC 的配置文件设置了 view-controller 时,其他控制器中的请求映射将全部失效,此时需要在 SpringMVC 的配置文件中设置开启 mvc 注解驱动的标签:<mvc:annotation-driven />

相关文章:

SpringMVC 学习(六)之视图

目录 1 SpringMVC 视图介绍 2 JSP 视图 3 Thymeleaf 视图 4 FreeMarker 视图 5 XSLT 视图 6 请求转发与重定向 6.1 请求转发 (Forward) 6.2 重定向 (Redirect) 7 视图控制器 (view-controller) 1 SpringMVC 视图介绍 在 SpringMVC 框架中&#xff0c;视图可以是一个 J…...

ROS 2基础概念#1:计算图(Compute Graph)| ROS 2学习笔记

在ROS中&#xff0c;计算图&#xff08;ROS Compute Graph&#xff09;是一个核心概念&#xff0c;它描述了ROS节点之间的数据流动和通信方式。它不仅仅是一个通信网络&#xff0c;它也反映了ROS设计哲学的核心——灵活性、模块化和可重用性。通过细致探讨计算图的高级特性和实…...

一本通 1403:素数对

在判断素数对的两个数是否都为素数时可以只判断数的一半 #include<bits/stdc.h> using namespace std; bool su(int a,int b){ for(int i2;i<sqrt(a);i){ if(a%i0){ return 0; } } for(int i2;i<sqrt(b);i){ if(…...

华为---RSTP(四)---RSTP的保护功能简介和示例配置

目录 1. 技术背景 2. RSTP的保护功能 3. BPDU保护机制原理和配置命令 3.1 BPDU保护机制原理 3.2 BPDU保护机制配置命令 3.3 BPDU保护机制配置步骤 4. 根保护机制原理和配置命令 4.1 根保护机制原理 4.2 根保护机制配置命令 4.3 根保护机制配置步骤 5. 环路保护机…...

Android基础控件介绍

在Android应用程序开发中&#xff0c;使用基础控件是非常常见的。这些控件允许您在用户界面中显示文本、图像、按钮等元素&#xff0c;以及接收用户输入。本文将介绍几种常见的基础控件&#xff0c;并给出每个控件在示例XML中使用的属性的详细说明。 1. TextView TextView 是…...

【总结】Maxwell学习笔记

1.Maxwell简介 Maxwell 是一款用Java编写的MySQL变更数据抓取软件&#xff0c;它会实时监控Mysql数据库的数据变更操作&#xff08;包括insert、update、delete&#xff09;&#xff0c;并将变更数据以 JSON 格式发送给 Kafka、Kinesi等流数据处理平台 官网地址&#xff1a;M…...

AFL fork server和fuzzer的交互

看了一些博客&#xff0c;都是在说fuzzer和fork server进行交互&#xff0c;由fork server fork出子进程来执行程序&#xff0c;但是不太明白这两者到底是如何在代码层面进行交互的。 run_target中有这么一段代码&#xff0c;大概意思是fuzzer给fork server传递prev_timed_out…...

Java SE:多线程(Thread)

1. 线程两个基本概念 并发&#xff1a;即线程交替运行多个指令并行&#xff1a;即多个线程同时运行指令 并发并行不矛盾&#xff0c;两者可同时发生&#xff0c;即多个线程交替运行指令 2. 多线程3种实现方式 2.1 直接创建线程对象 /*** 方式1&#xff1a;* 1. 创建thread类的…...

你敢信?软件测试万能面试脚本他来了?

写在前面&#xff1a; 过春节了&#xff0c;四舍五入接下来马上要年底了&#xff0c;新一波的跳槽旺季马上来临&#xff0c;不知道你是不是已经安于现状&#xff0c;还是蓄势待发呢&#xff1f;最近我和我的哈皮群友们一顿讨论&#xff0c;拟写了大家可能会遇到的面试情况&…...

C++/Python简单练手题

前言 最近需要开始使用python&#xff0c;但是对python了解的并不多&#xff0c;于是先从很早之前刚学C时写过的一些练手题开始&#xff0c;使用python来实现相同的功能&#xff0c;在温习python基础语法的同时&#xff0c;也一起来感受感受python的魅力 99乘法表 c&#xf…...

视频在线压缩

video2edit 一款免费的在线视频编辑软件&#xff0c;可以进行视频合并、视频剪辑、视频压缩以及转换视频格式等。 链接地址&#xff1a;在线视频编辑器和转换器 - 编辑&#xff0c;转换和压缩视频文件 打开视频压缩页面&#xff0c;上传想要压缩视频&#xff0c;支持MP4&…...

Python列表的合并、重复、判断与切片操作你学会了吗

1.合并列表 通过 实现 list1 ["佛跳墙", "肠粉", "刀削面", "烤鸭"]list2 [32, 4, 5, 7.43, True]list3 list1 list2print(list3) # [佛跳墙, 肠粉, 刀削面, 烤鸭, 32, 4, 5, 7.43, True] 2.重复输出列表中的元素 通过 * 实…...

Vue(3.3.4)+three.js(0.161.0)实现3D可视化地图

一.前言 由于最近在学习three.js,所以观摩了一下掘金&#xff0c;csdn等网站上的有关这部分的内容&#xff0c;刚好看到一个带你入门three.js——从0到1实现一个3d可视化地图 - 掘金 (juejin.cn)&#xff0c;再加上我的专业属性是地理相关&#xff0c;可以说是专业对口&#xf…...

瑞吉苍穹外卖如何拓展?已经经过不同公司多轮面试。项目中会问到哪些问题?以及问题如何解决?

别催了&#xff0c;别催了&#xff0c;先收藏吧。 作者大大正在加班加点完成。 文章会尽快发布&#xff0c;关注收藏&#xff0c;尽请期待。 想要加入并查阅作者的知识库可以联系作者 不要白嫖&#xff0c;通过后&#xff0c;附上关注和收藏截图。 已有众多小伙伴加入 目前…...

动态内存分配

目录 存在动态内存分配的原因动态内存函数mallocfreecallocrealloc 常见的动态内存错误C/C程序的内存开辟柔性数组柔性数组的特点柔性数组的使用柔性数组的优势 存在动态内存分配的原因 内存开辟方式,例如&#xff1a; int val 20;在栈空间上开辟四个字节 char arr[10] { 0 …...

【C语言】常见的动态内存管理错误

前言 上一篇介绍了C语言中 动态内存管理函数&#xff0c;本片讲解的是 在我们使用动态内存管理时 常见的错误&#xff0c;一起来看看吧~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 1.对NULL指针的解引⽤操作 错…...

数据结构之二叉树的精讲

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…...

ETL是什么

一、ETL概念 ETL&#xff0c;是英文Extract-Transform-Load的缩写&#xff0c;用来描述将数据从来源端经过抽取&#xff08;extract&#xff09;、转换&#xff08;transform&#xff09;、加载&#xff08;load&#xff09;至目的端的过程。ETL一词较常用在数据仓库&#xff…...

华为配置WLAN高密业务示例

配置WLAN高密业务示例 组网图形 图1 配置高密WLAN环境网络部署组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 体育场由于需要接入用户数量很大&#xff0c;AP间部署距离较小&#xff0c;因此AP间的干扰较大&#xff0c;可能导致用户上网网…...

C++——类和对象(1)

1. 类 我们之前提及过C语言是面向过程的语言&#xff0c;其解决问题的方式是关注问题过程&#xff0c;然后逐步解决。而C是面向对象编程&#xff0c;聚焦于对象&#xff0c;依靠多个对象之间的交互关系解决问题。而类这个概念的引入则是面向对象的最深刻体现。 1.1 C中的结构体…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...

2025.6.9总结(利与弊)

凡事都有两面性。在大厂上班也不例外。今天找开发定位问题&#xff0c;从一个接口人不断溯源到另一个 接口人。有时候&#xff0c;不知道是谁的责任填。将工作内容分的很细&#xff0c;每个人负责其中的一小块。我清楚的意识到&#xff0c;自己就是个可以随时替换的螺丝钉&…...

Qwen系列之Qwen3解读:最强开源模型的细节拆解

文章目录 1.1分钟快览2.模型架构2.1.Dense模型2.2.MoE模型 3.预训练阶段3.1.数据3.2.训练3.3.评估 4.后训练阶段S1: 长链思维冷启动S2: 推理强化学习S3: 思考模式融合S4: 通用强化学习 5.全家桶中的小模型训练评估评估数据集评估细节评估效果弱智评估和民间Arena 分析展望 如果…...

Git 命令全流程总结

以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结&#xff0c;按操作场景分类整理&#xff1a; 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...

C#中用于控制自定义特性(Attribute)

我们来详细解释一下 [AttributeUsage(AttributeTargets.Class, AllowMultiple false, Inherited false)] 这个 C# 属性。 在 C# 中&#xff0c;Attribute&#xff08;特性&#xff09;是一种用于向程序元素&#xff08;如类、方法、属性等&#xff09;添加元数据的机制。Attr…...