【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…...
信息系统项目管理师核心知识点精讲
一、项目整合管理(重点:项目章程与项目管理计划) 知识点详解: 项目整体管理是项目管理知识体系的核心,它确保项目各要素协调统一。在考试中,特别要掌握项目章程和项目管理计划的区别与联系。 项目章程是项目的“出生证明”,由项目发起人发布。它正式授权项目,赋予项…...
从入门到上岗,Java+AI 复合型人才养成攻略
当下编程行业格局正在悄然改变,纯 Java 后端岗位内卷日趋严重,薪资增长逐步放缓;纯粹的 AI 算法岗门槛居高不下,对学历、数理功底要求严苛,普通开发者很难入局。 而Java+AI 复合型开发顺势成为行业刚需岗位,既依托成熟的 Java 体系承接业务开发,又能融入人工智能技术实…...
基于Max78000与规则引导的音频数据集构建:边缘AI声音识别实战
1. 项目概述:当边缘AI遇见棕榈树里的“窃听者”在边缘计算和物联网设备大行其道的今天,我们常常面临一个核心矛盾:一方面,我们希望设备足够“聪明”,能实时识别并响应特定的声音模式,比如工厂里高压阀门的异…...
Lovable电商网站搭建:如何用不到3人技术团队,72小时内上线PCI-DSS合规MVP版本?
更多请点击: https://codechina.net 第一章:Lovable电商网站搭建 Lovable 是一个面向中小商户的轻量级电商解决方案,采用现代 Web 技术栈构建,强调可扩展性、用户体验与快速部署能力。本章将指导你从零开始搭建一个具备商品展示、…...
JMeter实现RSA签名验签全流程实战
1. 为什么RSA加密接口测试总卡在“连通但失败”这一步? 你有没有遇到过这种情况:接口文档写得清清楚楚,Postman里填好URL、Header、Body,一发请求——返回 {"code":4001,"msg":"签名验证失败"} …...
MPC Video Renderer终极指南:如何在Windows上实现专业级视频渲染体验
MPC Video Renderer终极指南:如何在Windows上实现专业级视频渲染体验 【免费下载链接】VideoRenderer Внешний видео-рендерер 项目地址: https://gitcode.com/gh_mirrors/vi/VideoRenderer MPC Video Renderer是一款专为Windows平台设计…...
3步掌握OpenSpeedy:免费开源游戏加速工具使用指南
3步掌握OpenSpeedy:免费开源游戏加速工具使用指南 【免费下载链接】OpenSpeedy 🎮 An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy 你是否曾为游戏卡顿而烦恼?是否希望在单机游戏中加快…...
面试官问LinkedBlockingQueue和ArrayBlockingQueue区别?别只答有界无界了,这3个实战坑才是重点
面试官追问LinkedBlockingQueue与ArrayBlockingQueue?别只答基础区别,这3个实战陷阱才是关键 当面试官抛出"LinkedBlockingQueue和ArrayBlockingQueue有什么区别"这个问题时,80%的候选人会条件反射般回答"一个有界一个无界&qu…...
022、FFT加速卷积:何时使用?何时不用?
022、FFT加速卷积:何时使用?何时不用? 去年调一个边缘检测模型,在Cortex-M7上跑3x3卷积,帧率死活上不去。同事说“试试FFT加速”,我心想3x3这种小核用FFT不是脱裤子放屁?结果他真改了一版,跑出来比直接卷积还慢三倍。后来查ARM CMSIS-DSP的文档,发现人家明确写了:FF…...
QQ群数据采集终极教程:5分钟掌握批量抓取技巧
QQ群数据采集终极教程:5分钟掌握批量抓取技巧 【免费下载链接】QQ-Groups-Spider QQ Groups Spider(QQ 群爬虫) 项目地址: https://gitcode.com/gh_mirrors/qq/QQ-Groups-Spider 还在为手动收集QQ群信息而烦恼吗?QQ-Groups…...
