【SpringMVC】详细了解SpringMVC中WEB-INF 目录资源,视图解析器和静态资源放行的使用。

news2024/11/15 14:06:00

目录

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下的静态资源目录名称一致!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2037943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源网络评论引擎Comentario

什么是 Comentario &#xff1f; Comentario 是一个轻量级评论平台&#xff0c;您可以使用 Docker 轻松自行托管。这一切都是为了简单和隐私。Comentario 是用 Go 编写的&#xff0c;使其快速且易于使用。支持 Markdown 语法、Disqus 导入、评论投票、垃圾邮件和毒性过滤器、审…

【python】python中如何通过ddddocr来识别验证码,突破滑块移动验证

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

zdpgo_cobra_req 新增解析请求体内容

zdpgo_cobra_req 使用Go语言开发的&#xff0c;类似于curl的HTTP客户端请求工具&#xff0c;用于便捷的测试各种HTTP地址 特性 1、帮助文档都是中文的2、支持常见的HTTP请求&#xff0c;比如GET、POST、PUT、DELETE等 下载 git clone https://github.com/zhangdapeng520/z…

Handler 消息处理机制总结

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、Handler 简介二、Handler 消息处理机制原理三、Handler 机制处理的4个关键对象四、 Handler常用方法五、子线程更新UI 异常处理六、主线程给子线程…

1.Java基础概念-注释和关键字

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 Facts speak louder than words&#xff01; 注释是在程序的指定位置…

Shell脚本发送邮件的详细步骤与配置方法?

Shell脚本发送邮件的进阶技巧&#xff1f;怎么配置Shell脚本发信&#xff1f; 使用Shell脚本发送邮件是一种高效的自动化手段&#xff0c;特别是在需要定期发送报告、通知或警告信息时。AokSend将详细介绍Shell脚本发送邮件的步骤与配置方法&#xff0c;帮助您更好地掌握这一技…

java: 程序包org.springframework.boot.autoconfigure不存在

通过 mvn -U idea:idea 命令重新加载maven包&#xff0c;具体操作是这样的&#xff1a; 打开cmd窗口cd 到 工程根目录&#xff0c;比如我的工程是&#xff1a;D:\IdeaProjects\demo&#xff0c; 执行 mvn -U idea:idea 命令&#xff0c;完了以后重新运行项目就正常了&#xff…

2024年哪家蓝牙耳机性价比高?分享四款高性价比精品耳机产品

随着科技的发展&#xff0c;蓝牙耳机在市场上非常火爆&#xff0c;但很多人不知道该如何选一款适合自己的蓝牙耳机&#xff0c;经常被商家所迷惑&#xff0c;所以常入手到了导致品质低劣甚至买了与价格不匹配的耳机&#xff0c;所以说2024年哪家蓝牙耳机性价比高&#xff1f;作…

可调恒流电子负载如何实现的

可调恒流电子负载是模拟真实负载的电子设备&#xff0c;它可以在电源电压和电流范围内提供恒定的电流或电压。其工作原理主要基于欧姆定律和功率守恒定律。欧姆定律指出&#xff0c;电流通过一个电阻体时&#xff0c;电流的大小与电压的大小成正比&#xff0c;与电阻的大小成反…

跨站请求伪造漏洞

1. 跨站请求伪造漏洞 跨站请求伪造Cross-siterequest forgery (也称为CSRF、XSRF)是一种Web安全漏洞&#xff0c;允许攻击者诱导用户执行他们不打算执行的操作。攻击者通过伪造用户的浏览器的请求&#xff0c;向用户自己曾经认证访问过的网站发送出去&#xff0c;使目标网站接收…

【全网最全】sentinel接入gateway网关,使用nacos做sentinel规则的持久化

文章目录 目标官网接入准备环境配置测试环境启动 规则nacos持久化api分组初始化初始化api分组方式 遗留问题 &#xff1f;初始化api分组,会导致服务无法注册到sentinel dashboard 目标 sentinel接入gateway网关&#xff0c;使用nacos做sentinel规则的持久化 官网 https://se…

经典算法题总结:数组常用技巧(双指针,二分查找和位运算)篇

双指针 在处理数组和链表相关问题时&#xff0c;双指针技巧是经常用到的&#xff0c;双指针技巧主要分为两类&#xff1a;左右指针和快慢指针。所谓左右指针&#xff0c;就是两个指针相向而行或者相背而行&#xff1b;而所谓快慢指针&#xff0c;就是两个指针同向而行&#xf…

夏季养宠难题,浮毛异味难消?别担心,一篇文章帮你解决烦恼

新手铲屎官们最近是不是饱受猫咪浮毛异味困扰&#xff1f;正值夏季&#xff0c;一些猫咪还处于换毛季&#xff0c;疯狂的掉毛加难耐的高温&#xff0c;稍不注意清理&#xff0c;家里就被浮毛异味双重攻击。别担心&#xff0c;那是因为你们少了宠物空气净化器这个好帮手。作为宠…

【机器学习】混淆矩阵(Confusion Matrix)

一、混淆矩阵 True Negative (TN)&#xff1a; 真负类&#xff0c;样本的真实类别是负类&#xff0c;并且模型将其识别为负类&#xff0c;cm[0][0]。False Positive (FP)&#xff1a; 假正类&#xff0c;样本的真实类别是负类&#xff0c;但是模型将其识别为正类&#xff0c;cm…

见合八方发布国产1060nm保偏SOA

天津见合八方光电科技有限公司(以下简称“见合八方”)日前发布新款1060nm保偏半导体光放大SOA蝶形器件。该半导体光放大器SOA具有高饱和输出功率、宽光谱、保偏等特性。主要用于星载空间光通信、空间激光探测、OCT医疗成像等领域。 产品介绍 我司1060nm蝶形器件&#xff0c;具有…

期货的种类之什么是股指期货的类型?

期货可以分为商品期权和股指期货&#xff0c;商品期货的标的物主要是现货&#xff0c;而股指期货的标的物主要是指数。简单来说&#xff0c;就是一种基于股票指数未来的价格变动来进行交易的金融衍生品。它的全称是“股票价格指数期货”&#xff0c;英文简称SPIF。 股指期货怎…

P3957 [NOIP2017 普及组] 跳房子(青春版代码)

[NOIP2017 普及组] 跳房子 - 洛谷 核心思路 单调队列优化dp 顺序 先让合法答案入队 再删去越界答案 判断非空 后 求 答案 一个答案合法 当且仅当 l < dis < r 记 调了n久&#xff0c;找题解调。 竟发现几乎没有用 STL deque 的。 故写了个青春版题解。 AC 代码…

思科RIP动态路由配置3

#路由协议实现# #任务三RIP动态路由配置3# 路由信息协议&#xff08;Routing Information Protocol&#xff0c;RIP&#xff09;是应用较早、使用较普遍的动态路由协议&#xff0c;也是内部网关协议&#xff0c;由于RIP以跳数作为衡量路径的开销&#xff0c;且规定最大跳数为…

zip压缩包的格式不标准导致C++开源unzip.cpp解压失败问题的排查

目录 1、问题描述 2、初步排查 3、查看错误码512对应的含义 4、直接将解压zip包的函数拷贝过来,并将无法解压的zip取来,直接编写测试代码去调试解压过程,最终定位问题 4.1、调试开源unzip.cpp源码的准备工作 4.2、刚解压zip包中最顶层的文件夹就失败了 4.3、是不是zi…

Java如何实现拼音排序?

在我们国家&#xff0c;按拼音进行排序是很常见的需求&#xff0c;比如姓名&#xff0c;那如何按拼音进行排序呢&#xff1f; 假如我们有以下List&#xff1a; List<String> list new ArrayList<>(); list.add("周瑜"); list.add("大都督")…