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不能正常显示

一般来说,企业中更多的是采用第二种配置方式,但这导致了静态资源被拦截

静态资源为什么会被拦截??

我们知道,我们的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配置成/

会覆盖掉全局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>

其他地方保持不变,这个粒度显然是比/更小的,它会将*.jpg文件交给servlet-name为default的servlet去处理该请求,默认的servlet为什么就没有拦截了呢?因为它是直接访问。

当然不好的地方是,如果你需要拦截*.html又得配一个,所以比较麻烦。一般不采用

方式二:在springmvc的配置文件中加入以下代码

<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中处理静态资源的三种方式

推荐文章:https://blog.csdn.net/xingkongdeasi/article/details/79557198

SpringMVC 中静态资源的处理相关推荐

  1. SpringMVC中静态资源的处理

    web项目中web.xml配置 在一个使用springmvc的web项目中,必然在web.xml中要配置前端控制器DispatcherServlet <servlet><servle ...

  2. SpringMVC常用配置-添加静态资源处理器-针对SpringMVC中静态资源无法访问的问题...

    转载于:https://www.cnblogs.com/weilu2/p/springmvc_resourcehandler_registry.html

  3. SpringMVC访问静态资源

    鸣谢:http://blog.163.com/koko_qiang/blog/static/207213184201382091154584/ ---------------------------- ...

  4. spring mvc 中静态资源404、302错误

    [求教]spring mvc 中静态资源404.302错误 (2019/3/22补充)在新的项目中也偶尔遇到资源被拦截的情况(前提我已经设置了各种静态资源不被拦截的措施),至今仍然没能找到具体原因,所 ...

  5. SpringBoot项目中静态资源加载失败,那可能是自定义配置类继承了WebMvcConfigurationSupport这个类

    1.跟着视频课学SpringBoot,自己的一个html登录页面就是在浏览器中渲染不出来效果,很郁闷.我的项目结构如下: 2.想要打开login.html页面,该页面用到了静态资源中的css文件及sv ...

  6. Spring MVC中静态资源的处理

    Spring MVC中静态资源的处理 REST风格的资源URL中不带后后缀,比如 /blog/tom -> 用户tom的blog资源 /order/1234 -> 订单号为1234的订单资 ...

  7. SpringMVC拦截静态资源的解决方法

    本文中的各软件版本简要信息: IDE:Myeclise17 JDK:1.8.0_111 spring:5.1.8 springMVC:5.1.8 mybatis:3.2.2 Tomcat:9.0 在使 ...

  8. SpringMVC访问静态资源的三种方式

    如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截"/",拦截了所有的请求,同时对 ...

  9. SpringMVC处理静态资源

    若将DispatcheServlet请求映射设置为/,则SpringMvc将捕获WEB容器的所有请求,包括静态资源的请求,SpringMvc会将它们当成一个普通的请求处理,那么将会出现因找不到对应的处 ...

最新文章

  1. sqlserver查询自定义的函数
  2. 2022 AI趋势8大预测!
  3. PHP基础1--环境搭建
  4. 视频直播关键技术:流畅、拥塞和延时追赶
  5. 解决java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor问题
  6. spring aop实例讲解_Spring框架核心知识点
  7. python模板模式_python-模板方法模式
  8. ejb构建_如何使用单例EJB和MBean构建和清除参考数据缓存
  9. SpringBoot+MyBatis+Mysql 6.X 版本日期型数据获,时间错乱,jason序列化时间相差8小时问题...
  10. Django REST Framework API Guide 02
  11. mpls 跨域 optionA 配置实例
  12. win10分屏快捷键无法使用_Win10系统Win快捷键不能用怎么办_win10 Win快捷键无法使用如何解决-系统城...
  13. iredmail mysql 配置_Iredmail各大组件连接Mysql配置说明
  14. 小说app开发功能及盈利方式
  15. 蓝牙标准协议免费下载
  16. 15个经典面试问题及回答思路,经典好文
  17. 系统无法以在此计算机上安装,windows无法完成安装若要在此计算机上安装怎么办...
  18. python 100days github_GitHub - 2668599092/Python-100-Days: Python - 100天从新手到大师
  19. 瞳孔特征值提取,blink frequency,fixation frequency,saccad extent, pupil diameter等
  20. <一>Android Audio音频框架

热门文章

  1. py爬取英文文档学习单词
  2. Windows phone 应用开发[2]-数据缓存
  3. squid ldap认证(AD)
  4. 用PQ的Windows版完成分区的一些调整工作
  5. linux下使用gdb调试崩溃和死锁实例
  6. C/S+P2P网络模型(二)--上传下载文件
  7. pythonista3使用说明_pythonista3都能做什么
  8. redis代码 数据超时实现
  9. python数据库操作之pymysql模块和sqlalchemy模块(项目必备)
  10. ubuntu9.10 安装 eclipse3.5 的问题