【SpringMVC】详细了解SpringMVC中WEB-INF 目录资源,视图解析器和静态资源放行的使用。
目录
1. 回顾SpringMVC请求转发和重定向
2. WEB-INF资源目录
3. 视图解析器
4. 静态资源放行
1. 回顾SpringMVC请求转发和重定向
- 概念:
- 在一个项目中功能非常多,也就意味着有非常多的Servlet,不同的Servlet的职不 同 ,而用户发起的请求,在服务器端接收到后需要多个Servlet之间的协同处理来共同 完 成!
- 特点:
请求转发: 一次请求,浏览器地址栏地址不改变!
重定向: 两次请求,浏览器地址栏地址为最后一次请求的地址!
- 使用场景:
查询请求: 请求转发,Servlet负责请求数据的处理,转发到Jsp进行页面的拼接,然后 后响应!
增删改请求: 重定向,避免表单的重复提交。
在 Spring MVC 框架中,默认情况下都使用转发进行寻找资源。如下图

等同于下面的写法:

解释:在资源路径前面添加 forward: 表示转发。因为写不写 forward: 都是转发,所以为了代码写起 来简单一些,多省略 forward:
如果希望使用重定向跳转到其他资源,只能在资源路径最前面明确添加 redirect:,下面代码就 是使用重定向方式的写法,不可省略。

2. WEB-INF资源目录
- 在平时学习过程中,我们多会把 JSP 文件直接放入到 webapp 目录中,或在 webapp 下新建一个目录把页面资源放入到目录中,这种情况 JSP 都是可以通过浏览器直接访问的。
- 如果从安全性等方面考虑不希望客户端通过浏览器直接访问对应的资源。 我们就可以把资源放入到 WEB-INF 目录中。 Java Web 项目中规定:WEB-INF 中资源是不允许被客户端直接访问,需要先访问控制器,通过控制器的转发来访问这些资源 。
如下图所示,通过浏览器我们不能直接访问add.jsp页面。


下面通过控制层发出请求去访问,如下图所示,访问成功!


但是现在又有一个麻烦,看到下面很长的路径没有,如果每访问一个页面都要写这样长的路径,又重复又麻烦,这可不是一个高级程序员写的代码,所以下面有了视图解析器。

3. 视图解析器
- Spring MVC 定义了 ViewResolver 和 View 接口,实现在浏览器中呈现模型,而无需绑定到 特定的视图技术。 提供视图名称和实际视图之间的映射。
- DispatcherServlet 在接收到请求后调用单元方法处理请求,然后接收单元方法的返回值后 DispatcherServlet 会将 model 对象和单元方法的返回值封装到 modelAndView 对象中,然后 调用 ViewResolver 视图解析器的实现类对象的 buildView 方法来解析 ModelAndView 对象生 成对用的 View 视图对象,然后再调用 View 对象的 render 方法完成物理视图跳转的准备工作 并跳转真正的物理视图。在这里要注意,我们使用不同的视图技术,需要调用不同的视图解析 器来解析 modelAndView。【了解即可】
使使用:只需在springMVC的配置文件中配置视图解析器即可,如下。
<!--配置视图解析器--><bean id="resourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/page/"/><property name="suffix" value=".jsp"/></bean>
如下图,然后再在浏览器中访问同样可以到页面 ,这是因为配置视图解析器之后,当请求转发时,会走视图解析器,自动会给你在前面拼接 /WEB-INF/page/ 在后面拼接 .jsp,然后整体的路径就是webapp/WEB-INF/page/add.jsp,因此简洁了很多。


注意:
- 当自定义视图解析器后,返回值前面和后面都会固定拼接字符串(在没有使用其他注解情况 下)。但是如果控制单元执行完,并不希望跳转到视图,而是跳转到控制器,这时需要在返回 值前面明确添加 forward: 或 redirect: ,这样就不走视图解析器了
上面表述可以总结为:
如果单元方法的返回值没有使用forward关键字,则会触发视图解析的二次拼接功能
如果单元方法的返回值使用了forward关键字,则单元方法的返回值就是要请求转发的资源路径!

4. 静态资源放行
- 按照 SpringMVC 的使用流程,在 web.xml 文件中配置 DispatcherServlet 的拦截范围, 而我们配置的拦截范围为 ”/” , 表示拦截除 jsp 请求以外的所有请求。这样 js,css, 图片等静态资源的请求,也会被拦截。
- 因此Spring MVC 支持静态资源配置,当 URL 满足指定路径要求时不再去找控制单元,而是直接转发到特定路径中静态资源。
在SpringMVC.xml中配置如下,但请求css,js等资源时,不会被拦截。
<!--01 配置静态资源放行-->
<!--mapping:当URI是什么样格式时,不再执行控制器,而是寻找静态资源。 ** 是通配符,
表示任意层路径 -->
<!--location:去哪个目录中寻找静态资源。mapping中**的值是什么,就去location目录中
找对应资源-->
<!--例如URL是http://localhost:8080/wollo/js/jquery.js 其中mapping的**就是j
query.js,就会去location的/js/目录中寻找jquery.js -->
<mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
<mvc:resources mapping="/css/**" location="/css/"></mvc:resources>
<mvc:resources mapping="/images/**" location="/images/"></mvc:resources
><!--02 配置静态资源放行,将上面的统一放到static中一起放行--><mvc:resources mapping="/static/**" location="/static/"></mvc:resources>
如下图所示,访问my.css正常情况会被拦截,配置之后成功访问。


注意:静态资源放行的目录必须和webpp下的静态资源目录名称一致!!
相关文章:
【SpringMVC】详细了解SpringMVC中WEB-INF 目录资源,视图解析器和静态资源放行的使用。
目录 1. 回顾SpringMVC请求转发和重定向 2. WEB-INF资源目录 3. 视图解析器 4. 静态资源放行 1. 回顾SpringMVC请求转发和重定向 概念:在一个项目中功能非常多,也就意味着有非常多的Servlet,不同的Servlet的职不 同 ,而用户发起…...
如何学好uni-app
学习uni-app需要掌握以下技能: 1. 前端基础:熟悉HTML、CSS和JavaScript等前端开发技术,了解基本的前端框架如Vue.js。 2. Vue.js:因为uni-app是基于Vue.js构建的,所以需要对Vue.js有深入的理解。可以先通过官方文档或者…...
C++ QT使用stackwidget实现页面切换(含源码)
C++ QT使用stackwidget实现页面切换(含源码) 0.前言1.UI布局1.1使用stackwidget2.代码方式添加页面实现页面切换3.源码4.最终效果0.前言 在QT中一个界面中如何实现页面的切换,而不是新弹出的窗口,这里采用的stackwidget,以层叠widget的方式选定页面索引从而实现页面切换。…...
打工人上班适合用的蓝牙耳机推荐?几款开放式耳机推荐
日常工作的话,我还是比较推荐开放式蓝牙耳机的,它特别适合那些需要在长时间工作中保持专注和舒适度的环境,那开放式耳机其实还有一些主要的优点: 减少耳朵疲劳:由于开放式耳机不需要紧密贴合耳朵,因此可以…...
一款.NET开发的AI无损放大工具
一款.NET开发的AI无损放大工具 思维导航 前言项目功能支持语言系统要求项目源代码项目运行小图片进行无损放大项目源码地址优秀项目和框架精选 前言 今天大姚给大家分享一款由.NET开源(GPL-3.0 license)、基于腾讯ARC Lab提供的Real-ESRGAN模型开发的A…...
编程新手必看:彻底理解!与~的取反操作
在编程和计算机科学的语境中,! 和 ~ 都是取反操作符,但它们的应用方式和效果存在显著的区别。下面将从定义、应用场景、作用原理及示例等方面对 ! 和 ~ 进行详细解析。 一、定义 !(逻辑非运算符) 在C语言、Java等多数编程语言中&…...
【LeetCode】54. 螺旋矩阵
螺旋矩阵 题目描述: 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示例 2:…...
计算机毕业设计 奖学金评定管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...
【JavaWeb项目】——外卖订餐系统之商家添加餐品、修改餐品、查询热卖餐品、查询出售车、进行发货操作
🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL࿰…...
制作抖音私信卡片 - 一键调起并跳转微信二维码
抖音私信图文卡片,点击可以直接一键添加微信 可生成无风险链接,使用苹果手机转发创建出卡片 抖音内点击可以直接调起微信跳入小程序展示微信二维码...
赋能未来园区:TSINGSEE视频AI智能管理平台如何引领园区管理智慧化转型
一、建设背景 随着经济的不断发展,园区产业集聚发展已成为趋势,园区逐渐成为产业聚集的重要载体。目前,国内现有的大部分园区的管理方式比较粗放、单一,范围局限于安全、环境等方面且不成体系,并且没有覆盖到应急、消…...
Linux逻辑卷管理LVM
系列文章目录 提示:仅用于个人学习,进行查漏补缺使用。 1.Linux介绍、目录结构、文件基本属性、Shell 2.Linux常用命令 3.Linux文件管理 4.Linux 命令安装(rpm、install) 5.Linux账号管理 6.Linux文件/目录权限管理 7.Linux磁盘管理/文件系统 提示&a…...
团队诊断工具TDS
希典梁开广老师引进的团队诊断问卷TDS(Team Diagnostic Survey)是基于卓越团队6个条件模型开发的,是用于诊断团队有效性的测评工具,其建构过程严格遵循心理测量学原理。可以帮助企业觉察团队优劣势,找到提升与发展机会,明确和强化…...
DC-5靶机渗透测试
DC-5靶场 文章目录 DC-5靶场信息收集漏洞发现漏洞利用 --- 日志文件包含漏洞利用 --- 文件包含过滤器链的RCEshell反弹权限提升 信息收集 使用--scriptvuln扫描发现了一个thankyou.php界面 感觉会有问题,前往访问网站信息 漏洞发现 来到thankyou.php界面ÿ…...
16、电科院FTU检测标准学习笔记-基本性能2
作者简介: 本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验 在配电自动化验收测试以及电科院测试中,本人全程参与,积累了不少现场的经验 ———————————————————…...
MySQL——使用Python操作MySQL
文章目录 安装PyMySQL使用PyMySQL操作MySQL 在Python中操作MySQL数据库时,我们使用较多的库是 PyMySQL,如果你选择使用 PyMySQL库,那么首先需要通过pip安装它。pip install pymysql命令就是用来安装PyMySQL的。 安装PyMySQL 1.打开你的命令行工具&…...
Flink的DataStream状态管理
目录 键控数据流(Keyed DataStream) 键控状态(Keyed State) 值状态(ValueState) 列表状态(ListState) 归约状态(ReducingState) 聚合状态(AggregatingState) 映射状态(MapState) 状态生存时间(TTL) 算子状态(Operator State) 广播状态(Broadcast S…...
Daiqile SQL注入绕过
上源码。 <?php header("Content-type: text/html; charsetutf-8"); require db.inc.php;function dhtmlspecialchars($string) {if (is_array($string)) {foreach ($string as $key > $val) {$string[$key] dhtmlspecialchars($val);}}else {$string str_…...
用Python轻松移除PDF中的注释
PDF文档因其跨平台的兼容性和格式稳定性而备受青睐。然而,随着文档在不同用户间的流转,累积的注释可能会变得杂乱无章,甚至包含敏感或过时的信息,这不仅影响了文档的清晰度和专业性,还可能引发隐私风险。因此ÿ…...
51单片机—串口
一、 串口基本认知 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简 单&a…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
