SpringMVC中静态资源的处理
web项目中web.xml配置
在一个使用springmvc的web项目中,必然在web.xml中要配置前端控制器DispatcherServlet
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 服务器启动的时候,让DispatcherServlet对象创建 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern> <!--注意这里-->
</servlet-mapping>
这里的url-pattern有两种配置方式
- .扩展名,比如.do,古老的方式,不会导致静态资源文件被拦截的问题,但 是不支持RESTful编码风格
- /,支持RESTful风格,但是会导致静态资源文件被拦截
还有一种错误的配置方式
/*,错误的方式,可以请求到Controller方法,但是跳转到JSP时会被拦截,JSP不能正常显示 XX
一般来说,企业中更多的是采用第二种配置方式,但这导致了静态资源被拦截
静态资源为什么会被拦截??
我们知道,我们的web项目最终要部署到服务器上,以我们熟悉的Tomcat服务器为例进行说明。
当我们将web应用部署到tomcat服务器上,服务器是先加载全局的web.xml,即"D:\work_folder\java_studying\java_tools\apache-tomcat-9.0.12\conf\web.xml"这是tomcat自带的web.xml文件,然后才会加载我们自己web项目中的web.xml,当我们加url-pattern配置成 <url-pattern>/</url-pattern>
会覆盖掉全局web.xml中对于静态资源的处理,具体可以参考全局web.xml中:
<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>
<!-- The mapping for the default servlet -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
这就是默认的servlet,发现与我们配置的url-pattern一样了,导致静态资源也被我们自定义的dispatcherServlet所拦截,那这个类就会去找controller里面的映射了,比如我们访问http://localhost:8080/springmvc/img.png,显然是Controller里面是没有这个映射路径的。
如何处理静态资源被拦截
有三种方式:
- 方式一:手动排除法
在我们的web.xml添加如下配置
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
其他地方保持不变,这个粒度显然是比<url-pattern>/</url-pattern>更小的,它会将*.jpg文件交给servlet-name为default的servlet去处理该请求,默认的servlet为什么就没有拦截了呢?因为它是直接访问。
当然不好的地方是,如果你需要拦截*.html又得配一个,所以比较麻烦。一般不采用
- 方式二:在springmvc的配置文件中加入
<mvc:default-servlet-handler/>
<mvc:default-servlet-handler/>
- 方式三:在springmvc配置文件中手动指定静态资源路径
<!-- 设置静态资源不过滤 -->
<mvc:resources location="/css/" mapping="/css/**" />
<mvc:resources location="/img/" mapping="/img/**" />
<mvc:resources location="/js/" mapping="/js/**" />
<mvc:resources location="/plugins/" mapping="/plugins/**" />
,这种方式更灵活,功能更丰富,也是可以的
注意 springmvc配置文件中这个配置<mvc:annotation-driven />推荐每次都加
以上就上springmvc中处理静态资源的三种方式
SpringMVC中静态资源的处理的更多相关文章
- 完美解决SpringMVC中静态资源无法找到(No mapping found for HTTP request with URI)问题
https://blog.csdn.net/kingmax54212008/article/details/79330308 今天遇到一个比较新奇的问题,但是也应该是使用spring MVC框架时由于 ...
- SpringMVC常用配置-添加静态资源处理器-针对SpringMVC中静态资源无法访问的问题
- SpringMVC访问静态资源
SpringMVC访问静态资源 在SpringMVC中常用的就是Controller与View.但是我们常常会需要访问静态资源,如html,js,css,image等. 默认的访问的URL都会被Dis ...
- 【SpringMVC】静态资源访问的问题
在项目中经常会用到一些静态的资源,而一般我们在配置SpringMVC时会让SpringMVC接管所有的请求(包括静态资源的访问), 那么我们怎样才能最简单的来配置静态资源的访问呢? 一,在web.xm ...
- SpringMVC拦截静态资源的处理办法
SpringMVC拦截静态资源导致 JS CSS 无法加载 可以在配置文件中加入以下代码 <mvc:resources location="/statices/" m ...
- IntelliJ IDEA+SpringBoot中静态资源访问路径陷阱:静态资源访问404
IntelliJ IDEA+SpringBoot中静态资源访问路径陷阱:静态资源访问404 .embody{ padding:10px 10px 10px; margin:0 -20px; borde ...
- $ is not defined与SpringMVC访问静态资源
编写前台Jquery代码时,遇到谷歌浏览器报错:Uncaught ReferenceError: $ is not defined 意味着Jquery库并没有导入到页面.这是有几种情况需要考虑: 1. ...
- IDEA中静态资源无法找到的原因
IDEA中静态资源无法找到, 原因1:同名的文件但是在不同的包里. 原因2:IDEA重启,web清空缓存. 原因3:错误的文件及路径. 原因4:其他原因排除后,可使用绝招重启试试.
- springmvc之静态资源访问不到 -记一次惨痛的经历
springmvc之静态资源访问不到 -记一次惨痛的经历 问题描述:项目正常启动,可以访问页面,但是无法找到静态资源文件,如css,js等文件资源. 控制台: $ 未定义 页面: GET http:/ ...
随机推荐
- Tortoise Git 安装 及报错处理
TortoiseGit安装详解: https://www.cnblogs.com/xinlj/p/5978730.html Tortoise Git 错误处理 disconnected no supp ...
- Spring中的applicationContext文件详解
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Java 第12次作业--你的生日
题目:计算自己的出生日期距今天多少天,再将自己的出生日期利用SimpleDateFormat类设定的格式输出显示. 代码: import java.util.*; import java.text.* ...
- axios基本设置
- Net-NTLMv1的利用思路
Net-NTLMv1的加密方法: 客户端向服务器发送一个请求 服务器接收到请求后,生成一个16位的Challenge,发送回客户端 客户端接收到Challenge后,使用登录用户的密码hash对Cha ...
- [Debug] How to Debug a NestJs Backend using the Chrome Dev Tools
TO debug NestJS code with Chrome dev tool, we can run: node --inspect-brk dist/rest-api/src/main.js ...
- LeetCode 1219. Path with Maximum Gold
原题链接在这里:https://leetcode.com/problems/path-with-maximum-gold/ 题目: In a gold mine grid of size m * n, ...
- 多条件查询----补发周一内容(六级让我忽略了JAVA)
周一测试多条件查询 要求仿照知网高级查询页面重构期中考试多条件查询功能,可以根据志愿者姓名.性别.民族.政治面目.服务类别.注册时间六种条件实现模糊查询,输出结果以列表形式显示,显示姓名.性别,民族. ...
- gdb命令行
1.当程序出现core dump时,使用下面的命令调试: gdb 程序名 core.1234 或 gdb core.1234 gdb -c core.1234 程 ...
- SVN 常用 下载仓库
仓库的基本使用: 1.管理仓库的人会给你一个SVN的仓库地址,如: https://192.168.2.98:8443/svn/建筑工程健康监测系统 2.然后就下载仓库里面的所有文件 3.对仓库做增删 ...