当前位置: 首页 > 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中的结构体…...

005、大模型基础:AI 应用开发者真正需要懂什么,才不至于只会调接口

很多开发者在接触 AI 应用开发时,最开始都会有一种错觉: 只要我会调用模型接口,会写几句 Prompt,会把结果展示到页面上,我是不是就已经算会做 AI 应用了? 短期看,这样当然能做出一点东西。 你可以很快接一个接口,做一个聊天框,甚至做一个会议总结、文章润色、知识问答…...

PlayCover终极指南:3个步骤让你的Mac变身iOS游戏主机

PlayCover终极指南&#xff1a;3个步骤让你的Mac变身iOS游戏主机 【免费下载链接】PlayCover Community fork of PlayCover 项目地址: https://gitcode.com/gh_mirrors/pl/PlayCover 还在为Mac无法畅玩热门iOS游戏而烦恼吗&#xff1f;想要在更大屏幕上体验《原神》《崩…...

一次看懂 C# TimeSpan:时间差操作的完整指南

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

租户上下文污染、模型缓存穿透、向量库跨租户泄漏……AIAgent架构中5大隐性隔离漏洞(附可审计的OpenTelemetry追踪模板)

第一章&#xff1a;AIAgent架构多租户隔离方案 2026奇点智能技术大会(https://ml-summit.org) 在面向企业级服务的AIAgent平台中&#xff0c;多租户隔离不仅是安全合规的硬性要求&#xff0c;更是资源调度、模型推理与上下文管理的核心设计约束。隔离需贯穿数据层、运行时环境…...

VeraCrypt加密U盘实战:从创建加密卷到日常使用的完整指南

VeraCrypt加密U盘实战&#xff1a;从零开始打造移动数据保险箱 在这个数据泄露事件频发的时代&#xff0c;我们随身携带的U盘和SD卡就像一个个行走的数据炸弹。想象一下&#xff0c;当你遗失了存有客户资料、财务报告或个人隐私的移动存储设备时&#xff0c;那种头皮发麻的感觉…...

事件抽取:触发词检测、论元角色填充与篇章级事件理解

点击 “AladdinEdu&#xff0c;你的AI学习实践工作坊”&#xff0c;注册即送-H卡级别算力&#xff0c;沉浸式云原生集成开发环境&#xff0c;80G大显存多卡并行&#xff0c;按量弹性计费&#xff0c;教育用户更享超低价。 一、引言 在人类语言所传递的信息中&#xff0c;事件处…...

企微工具对比:第三方SCRM与自动化工作流集成

摘要 &#x1f504;将企微私域与公司CRM、工单系统打通&#xff0c;往往需要大量胶水代码。本文通过 AI私域实测 对比5款企微工具的Webhook与触发器能力&#xff0c;展示如何利用脚本实现“客户发关键词→自动创建工单→同步CRM”的全自动化&#xff0c;降本增效。正文一、问题…...

Golang怎么实现RBAC权限控制_Golang如何用casbin实现基于角色的访问控制系统【教程】

Casbin是Go生态最稳妥的RBAC方案&#xff0c;避免手写权限逻辑引发的角色继承断裂、通配符匹配不一致、策略未刷新等问题&#xff1b;需严格匹配model与policy格式、注意参数顺序、路径匹配函数及热更新机制。Casbin 是目前 Go 生态里最稳妥的 RBAC 实现方案&#xff0c;不用自…...

别只把它当查询器!DataGrip 2026.1 深度实测:AI Agent 时代的数据库工作流质变

DataGrip 2026.1部署工具包 &#x1f680; 前言&#xff1a;工具只是表象&#xff0c;思维才是降维打击 我发现很多同学还在把 DataGrip 当成一个“换了皮的 Navicat”。 如果 2026 年你还没发现 DataGrip 的进化逻辑&#xff0c;那你每天至少在 CRUD 上浪费了 2 小时。 一、…...

全文降AI的好处有哪些?推荐3款支持全文处理的降AI工具

全文降AI的好处有哪些&#xff1f;推荐3款支持全文处理的降AI工具 2026年的毕业季&#xff0c;AI检测已经不是"可能查"而是"一定查"。从知网到维普&#xff0c;从万方到大雅&#xff0c;几乎所有主流检测平台都上线了AIGC检测功能。面对这种局面&#xff0…...