SpringMVC集成静态资源

news2024/11/23 4:01:41

集成静态资源

静态资源&jsp是被谁处理的

tomcat是一个servlet容器,servlet容器中通常有servlet来处理各种请求,那么当访问静态资源或者jsp的时候,当然也是有servlet来处理这些请求的,但是并未在web.xml中配置哪个servlet来处理这些请求,是因为tomcat中自动配置了一些默认的servlet来处理这类的请求

tomcat的安装目录中有个web.xml文件,apache-tomcat-8.5.82\conf\web.xml,这个文件相当于对发布到tomcat中的所有web项目的默认配置,

    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

 <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>
<!-- The mapping for the default servlet -->
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- The mappings for the JSP servlet -->
<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>*.jspx</url-pattern>
</servlet-mapping>

配置中主要定义了2个servlet

  1. JspServlet用来处理jsp文件
  2. DefaultServlet会处理/开头的请求,它会处理所有其他servlet不匹配的请求,当一个请求过来之后,会先去匹配其他的servlet,当找不到匹配的servlet的时候,才会走DefaultServlet
  3. 可以在项目中的web.xml中对tomcat/config/web.xml中的配置进行覆盖,即项目中的web.xml相对于tomcat中的web.xml有更高的优先级

如何让SpringMVC处理所有的请求

如果想让SpringMVC来处理所有的请求,只需要修改web.xml中的配置,将springmvc这个servlet的url-pattern的值设置为*/*就可以了,此时所有的请求都会被SpringMVC处理,即所有的请求都会被DispatcherServlet处理

在这里插入图片描述

SpringMVC如何处理静态资源

当我们将上面的SpringMVC的url-pattern改为/时,此时在访问静态资源的时候,会报404,这请求被DispatcherServlet接收了,但时这个Servlet默认情况下并没有处理静态资源的能力,即找不到资源,所有才会报404
在这里插入图片描述

SpringMVC处理静态资源的2中方法,区别,原理详细

方案1:使用mvc:default-servletHandler/

在SpringMVC的配置文件中添加配置

<mvc:annotation-driven/>
<mvc:default-servlet-handler/>

在这里插入图片描述

原理:

  1. 加入< mvc:default-servlet-handler/>配置后,框架会创建DefaultServletHttpRequestHandler对象,这个对象会将请求转发给tomcat的default这个servlet处理,所以静态资源就可以访问了
  2. 配置中的第一行< mvc:annotation-driven/>也必须加上,如果不加,@RequestMapping的请求就无法处理了
  3. 这个用法的前提时,web容器中需要有default这个servlet,且servlet可以处理静态资源

方案二:使用mvc:resources

从Spring3.0版本后,spring定义了专门处理静态资源访问请求的处理器,ResourceHttpRequestHandler,并且添加了mvc:resources/标签来处理静态资源无法访问的问题

需要在SpringMVC配置文件中添加如下配置

<!-- 添加mvc注解驱动 -->
<mvc:annotation-driven/>
<mvc:resources mapping="/updateFile/**" location="/updateFile/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/jsp/**" location="/jsp/"/>
  • mvc:resource:标签用来指定请求的静态资源的url和本地地址的映射关系
  • mapping:用来指定请求的地址的比如/updateFile/**,可以匹配任何的以updateFile开头的url,比如/updateFile/1.jgp
  • location:用来指定静态资源所在项目中的目录
  • 配置中的第一行必须加上,如果不加,@RequestMapping的请求就无法处理
  • 这种用法不依赖于web容器,所以比第一种方案要好一下,

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

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

相关文章

SpringBoot+Vue项目小区疫苗接种管理系统的设计与实现

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JDK版…

MySQL数据库JDBC编程

目录 前言&#xff1a; 项目中导入驱动包 插入记录 创建数据源 连接数据库 构造sql语句 执行sql语句 释放资源 整体代码展示 查看数据 代码展示 小结&#xff1a; 前言&#xff1a; MySQL为Java提供了驱动包。通过Java程序实现的客户端&#xff0c;可以通过这个驱动…

JavaWeb以Maven整合Mybatis报错java.lang.NoClassDefFoundError(Web项目未能完全加载Maven下的依赖)

问题描述 为完成学校课程一个javaweb的demo&#xff0c;想着对数据库的访问能够更加简洁&#xff0c;所以用了Mybatis。因为之前有过Springboot整合Mybatis经验&#xff0c;所以本以为事情会简单。在Junit的测试类中是能够正常对数据库进行CRUD。在Javaweb的Servlet类中调用数据…

应用层协议之DNS、DHCP

运输层为应用进程提供了端对端的通信服务&#xff0c;但不同的网络应用的应用进程之间&#xff0c;还需要有不同的通信规则。因此在运输层协议之上&#xff0c;还需要有应用层协议。 应用层中有这些常见的协议 域名系统&#xff1a;DNS动态主机配置&#xff1a;DHCP超文本传输…

数据结构之栈

文章目录前言一、栈二、栈应该如何实现1.顺序表or链表2.静态or动态三、栈的实现1.栈的定义2.接口&#xff08;声明&#xff09;3.接口的实现初始化栈销毁栈获取栈顶元素获取栈中有效元素个数入栈出栈检测栈是否为空4.主函数&#xff08;测试&#xff09;总结前言 今天这篇文章…

云原生系列 二【轻松入门容器基础操作】

✅作者简介&#xff1a; CSDN内容合伙人&#xff0c;全栈领域新星创作者&#xff0c;阿里云专家博主&#xff0c;华为云云 享专家博主&#xff0c;掘金后端评审团成员 &#x1f495;前言&#xff1a; 最近云原生领域热火朝天&#xff0c;那么云原生是什么&#xff1f;何为云原生…

excel的frequency函数的用法和实例

目录 1.语法和用法 &#xff08;1&#xff09;语法&#xff1a;frequency(data_array,bins_array) &#xff08;2&#xff09;用法&#xff1a;用于统计指定分组区间的频率&#xff0c;以已裂垂直数组返回一组数据的频率分布。 2.实例 &#xff08;1&#xff09;分组统计各…

【WxPusher消息推送平台】js版对接发送消息教程实战案例,JavaScript版调用axios发送消息实例。保姆级教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、WxPusher消息推送平台是什么1、注册自己的WxPusher2、扫码关注应用&#xff0c;获得你的UID二、使用步骤1.封装axios方法2.编写发送消息方法总结前言 WxPus…

Thymeleaf th:insert、th:replace、th:include的使用

参考资料 八、模板布局&#xff08;Template Layout&#xff09;Thymeleaf中th:include、th:replace、th:insert、th:fragment用法及区别Thymeleaf参考手册&#xff08;八&#xff09;&#xff1a;模板布局 目录一. 前期准备二. th:insert三. th:include四. th:replace一. 前期…

【云原生-Docker】常用的 Docker Compose 配置项

&#x1f341;博客主页&#xff1a;&#x1f449;不会压弯的小飞侠 ✨欢迎关注&#xff1a;&#x1f449;点赞&#x1f44d;收藏⭐留言✒ ✨系列专栏&#xff1a;&#x1f449;Docker学习专栏 ✨学习社区&#xff1a;&#x1f449;不会压弯的小飞侠 ✨知足上进&#xff0c;不负…

Animation Rigging 如何让你的Avatar人物更具灵活性

文章目录&#x1f388; 简介&#x1f388; 基本组件&#x1f388; 应用Aim ConstraintTwo Bone IK Constraint&#x1f388; 简介 Animation Rigging是Unity官方发布的可以对Avatar人物骨骼进行约束的工具&#xff0c;已经有稳定的经过验证的Vertified包体&#xff0c;可以将其…

认知无线电网络的服务质量——蜻蜓算法的应用(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

【深入浅出Spring6】第七期——使用JDBC模板与代理模式

一、JDBCTemplate JdbcTemplate 是Spring提供的一个JDBC模板类&#xff0c;是对JDBC的封装&#xff0c;简化JDBC代码Spring也继承了其他持久化的框架&#xff0c;比如 MyBatis 等本篇我们从简单的增删改查角度介绍如何使用Spring提供的这个模板类 $ 准备工作 创建一个新的模块…

livekit 简单上手教程

什么是livekit&#xff1f; livekit是一个开源的webrtc项目&#xff0c;基于pion实现了SFU架构的go程序。 它主要有以下几个特性&#xff1a; 可以水平扩展的sfu架构。有完整的sdk程序接口供开发人员使用。基于JWT进行身份验证&#xff0c;可与大部分系统进行权限集成。内置Tur…

SpringCloud学习笔记 - 分布式配置中心 - config

1. 简介 Spring Cloud Config是用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持的。 它由服务端和客户端构成&#xff1a; 其中&#xff0c;服务端也称为分布式配置中心&#xff0c;是一个独立的微服务应用&#xff0c;用来连接配置仓库、为客户端提供支持…

32.nacos配置文件中心,使用实例(springcloud)

1.为什么使用Nacos 配置文件中心1.如果在生产情况下&#xff0c;修改了配置文件&#xff0c;项目需要下架&#xff0c;重新打包&#xff0c;重新发布。这在单机模式下影响不会太大&#xff0c;但如果过在一个集群项目中就会照成很大的影响&#xff0c;需要停掉多个项目。因此&a…

字节研发之道

前言 字节的迅速崛起缔造了一个互联网的神话&#xff0c;堪称火箭般的蹿升。当阿里来到第十八个年头时&#xff0c;员工人数还不足6万。老牌互联网腾讯现在也不过11万左右人数。但字节发展到七个年头时&#xff0c;人数就突破了10万。曾经入职阿里是一票难求&#xff0c;但现在…

基于51单片机的音乐盒播放器proteus仿真

资料编号&#xff1a;092 下面是相关功能视频演示&#xff1a; 92-基于51单片机的音乐盒播放器proteus仿真&#xff08;源码仿真全套资料&#xff09;功能介绍&#xff1a;使用51单片机&#xff0c;采用蜂鸣器进行音乐播放&#xff0c;提供了音乐代码生成器软件&#xff0c;可…

JavaWeb运行环境安装教程以及各个安装包

文章目录安装包下载安装教程一、JDK安装1、下载2、安装3、配置环境4、验证环境配置二、IDEA安装下载链接三、MySQL安装1、下载2、安装四、Navicat安装五、Tomcat安装1、下载2、环境配置3、修改编码4、启动六、Maven安装1、下载2、环境配置3、新建本地仓库4、修改镜像5、添加IDE…

Design Compiler工具学习笔记(1)

本人做过FPGA设计的项目&#xff0c;后面想转 IC 设计方向。现在从 DC 工具的使用开始学起&#xff0c;DC 是新思科技的EDA软件&#xff0c;具体的安装见下面的文章&#xff1a; Synopsys EDA Tools 安装问题记录https://blog.csdn.net/qq_43045275/article/details/127630241…