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

【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请求转发和重定向 概念&#xff1a;在一个项目中功能非常多&#xff0c;也就意味着有非常多的Servlet&#xff0c;不同的Servlet的职不 同 &#xff0c;而用户发起…...

如何学好uni-app

学习uni-app需要掌握以下技能&#xff1a; 1. 前端基础&#xff1a;熟悉HTML、CSS和JavaScript等前端开发技术&#xff0c;了解基本的前端框架如Vue.js。 2. Vue.js&#xff1a;因为uni-app是基于Vue.js构建的&#xff0c;所以需要对Vue.js有深入的理解。可以先通过官方文档或者…...

C++ QT使用stackwidget实现页面切换(含源码)

C++ QT使用stackwidget实现页面切换(含源码) 0.前言1.UI布局1.1使用stackwidget2.代码方式添加页面实现页面切换3.源码4.最终效果0.前言 在QT中一个界面中如何实现页面的切换,而不是新弹出的窗口,这里采用的stackwidget,以层叠widget的方式选定页面索引从而实现页面切换。…...

打工人上班适合用的蓝牙耳机推荐?几款开放式耳机推荐

日常工作的话&#xff0c;我还是比较推荐开放式蓝牙耳机的&#xff0c;它特别适合那些需要在长时间工作中保持专注和舒适度的环境&#xff0c;那开放式耳机其实还有一些主要的优点&#xff1a; 减少耳朵疲劳&#xff1a;由于开放式耳机不需要紧密贴合耳朵&#xff0c;因此可以…...

一款.NET开发的AI无损放大工具

一款.NET开发的AI无损放大工具 思维导航 前言项目功能支持语言系统要求项目源代码项目运行小图片进行无损放大项目源码地址优秀项目和框架精选 前言 今天大姚给大家分享一款由.NET开源&#xff08;GPL-3.0 license&#xff09;、基于腾讯ARC Lab提供的Real-ESRGAN模型开发的A…...

编程新手必看:彻底理解!与~的取反操作

在编程和计算机科学的语境中&#xff0c;! 和 ~ 都是取反操作符&#xff0c;但它们的应用方式和效果存在显著的区别。下面将从定义、应用场景、作用原理及示例等方面对 ! 和 ~ 进行详细解析。 一、定义 !&#xff08;逻辑非运算符&#xff09; 在C语言、Java等多数编程语言中&…...

【LeetCode】54. 螺旋矩阵

螺旋矩阵 题目描述&#xff1a; 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5]示例 2&#xff1a;…...

计算机毕业设计 奖学金评定管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

【JavaWeb项目】——外卖订餐系统之商家添加餐品、修改餐品、查询热卖餐品、查询出售车、进行发货操作

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…...

制作抖音私信卡片 - 一键调起并跳转微信二维码

抖音私信图文卡片&#xff0c;点击可以直接一键添加微信 可生成无风险链接&#xff0c;使用苹果手机转发创建出卡片 抖音内点击可以直接调起微信跳入小程序展示微信二维码...

赋能未来园区:TSINGSEE视频AI智能管理平台如何引领园区管理智慧化转型

一、建设背景 随着经济的不断发展&#xff0c;园区产业集聚发展已成为趋势&#xff0c;园区逐渐成为产业聚集的重要载体。目前&#xff0c;国内现有的大部分园区的管理方式比较粗放、单一&#xff0c;范围局限于安全、环境等方面且不成体系&#xff0c;并且没有覆盖到应急、消…...

Linux逻辑卷管理LVM

系列文章目录 提示&#xff1a;仅用于个人学习&#xff0c;进行查漏补缺使用。 1.Linux介绍、目录结构、文件基本属性、Shell 2.Linux常用命令 3.Linux文件管理 4.Linux 命令安装(rpm、install) 5.Linux账号管理 6.Linux文件/目录权限管理 7.Linux磁盘管理/文件系统 提示&a…...

团队诊断工具TDS

希典梁开广老师引进的团队诊断问卷TDS(Team Diagnostic Survey)是基于卓越团队6个条件模型开发的&#xff0c;是用于诊断团队有效性的测评工具&#xff0c;其建构过程严格遵循心理测量学原理。可以帮助企业觉察团队优劣势&#xff0c;找到提升与发展机会&#xff0c;明确和强化…...

DC-5靶机渗透测试

DC-5靶场 文章目录 DC-5靶场信息收集漏洞发现漏洞利用 --- 日志文件包含漏洞利用 --- 文件包含过滤器链的RCEshell反弹权限提升 信息收集 使用--scriptvuln扫描发现了一个thankyou.php界面 感觉会有问题&#xff0c;前往访问网站信息 漏洞发现 来到thankyou.php界面&#xff…...

16、电科院FTU检测标准学习笔记-基本性能2

作者简介&#xff1a; 本人从事电力系统多年&#xff0c;岗位包含研发&#xff0c;测试&#xff0c;工程等&#xff0c;具有丰富的经验 在配电自动化验收测试以及电科院测试中&#xff0c;本人全程参与&#xff0c;积累了不少现场的经验 ———————————————————…...

MySQL——使用Python操作MySQL

文章目录 安装PyMySQL使用PyMySQL操作MySQL 在Python中操作MySQL数据库时&#xff0c;我们使用较多的库是 PyMySQL,如果你选择使用 PyMySQL库&#xff0c;那么首先需要通过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文档因其跨平台的兼容性和格式稳定性而备受青睐。然而&#xff0c;随着文档在不同用户间的流转&#xff0c;累积的注释可能会变得杂乱无章&#xff0c;甚至包含敏感或过时的信息&#xff0c;这不仅影响了文档的清晰度和专业性&#xff0c;还可能引发隐私风险。因此&#xff…...

51单片机—串口

一、 串口基本认知 串行接口简称串口&#xff0c;也称串行通信接口或串行通讯接口&#xff08;通常指COM接口&#xff09;&#xff0c;是采用串行通信方 式的扩展接口。串行接口&#xff08;Serial Interface&#xff09;是指数据一位一位地顺序传送。其特点是通信线路简 单&a…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...