[J2EE]Spring MVC中访问静态资源[转]
1 文献来源
- SpringMVC访问静态资源的三种方式(转) - 博客园
- SpringMVC访问静态资源的三种方式
+ 提供解决方案的原作者

2 前言
2.1 访问不到静态资源起因
如果web.xml:DispatcherServlet配置".do"这样的URL拦截器,就不存在访问不到静态资源的问题。
如果web.xml:DispatcherServlet配置"/"拦截了所有的请求,同时对.js,*.jpg的访问自然也就被拦截了。
<!-- 前端控制器/中央控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
<!--<param-value>classpath:applicationContext.xml,classpath:spring-security.xml</param-value>-->
</init-param>
<!-- ↓加载 /WEB-INF/[servlet-name]-servlet.xml -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 所有匹配'/'的请求都进入SpringMVC -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
2.2 讨论范围
本文仅讨论第二种情况下,当Spring MVC 的拦截路径配置为'/'(拦截所有请求)时,访问静态资源的解决方案。
3 解决方案
3.1 方案1:[web.xml]激活Tomcat的defaultServlet来处理静态文件
建议:可写在DispatcherServlet的前面, 让defaultServlet先拦截
- Tomcat, Jetty, JBoss, and GlassFish 默认 Servlet的名字 — "default"
- Google App Engine 默认 Servlet的名字 — "_ah_default"
- Resin 默认 Servlet的名字 — "resin-file"
- WebLogic 默认 Servlet的名字 — "FileServlet"
- WebSphere 默认 Servlet的名字 — "SimpleFileServlet"
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
3.2 方案2:[springmvc-servlet.xml]激活defaultServlet - <mvc:default-servlet-handler />
defaultServlet配置:
(1)加入对静态资源的处理:js,gif,png.docx等
(2)允许使用"/"做整体映射
<!-- 会把 "/**" url,注册到 SimpleUrlHandlerMapping 的 urlMap 中,
把对静态资源的访问由 HandlerMapping 转到 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler 处理并返回.
DefaultServletHttpRequestHandler 使用就是各个 Servlet 容器自己的默认 Servlet. -->
<mvc:default-servlet-handler />
3.3 方案3:[springmvc-servlet.xml]Spring 3.0.4以后支持<mvc:resources location mapping />
- location元素: webapp目录下的 static 包下的所有文件/目录不被拦截
- mapping元素: 以/static 开头的所有请求路径,如/static/a 或者/static/a/b
- 使用 < mvc:resources / > 元素,把 mapping 的 URI 注册到 SimpleUrlHandlerMapping的urlMap 中
- DispatcherServlet不会拦截以/static开头的所有请求路径,并当作静态资源交由Servlet处理
<!-- ↓如此就不必另外添加一个mvc来处理静态资源,而mvc知道静态资源所处的位置为resources文件夹↓ -->
<mvc:resources location="/resources/" mapping="/resources/**"/>
<!-- ↓在SpringMVC3.0之后推荐使用↓ -->
<!-- 将 /img/** 映射到 ResourceHttpRequestHandler 进行处理,location指定静态资源的存储位置 -->
<!-- 作用: DispatcherServlet不会拦截以/static开头的所有请求路径,并当作静态资源交由Servlet处理 -->
<mvc:resources location="/img/" mapping="/img/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>
- /webapp/WEB-INF目录:
WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。当然,你非要放在WEB-INF中,则必须修改resources映射,如:
<mvc:resources location="/WEB-INF/js/" mapping="/js/**" />
[J2EE]Spring MVC中访问静态资源[转]的更多相关文章
- Spring MVC中处理静态资源的多种方法
处理静态资源,我想这可能是框架搭建完成之后Web开发的”头等大事“了. 因为一个网站的显示肯定会依赖各种资源:脚本.图片等,那么问题来了,如何在页面中请求这些静态资源呢? 还记得Spring MVC中 ...
- Spring Boot 中的静态资源到底要放在哪里?
当我们使用 SpringMVC 框架时,静态资源会被拦截,需要添加额外配置,之前老有小伙伴在微信上问松哥Spring Boot 中的静态资源加载问题:"松哥,我的HTML页面好像没有样式?& ...
- Spring Boot中的静态资源文件
Spring Boot中的静态资源文件 1.SSM中的配置 2.Spring Boot 中的配置 2.1 整体规划 2.2 源码解读 2.3 自定义配置 2.3.1 application.prope ...
- spring boot默认访问静态资源
演示spring boot默认可以直接访问静态资源的2种方法: 第一种:在src/main/resources资源目录下创建一个名为"static"的文件夹(该文件夹的名称是规定死 ...
- 在Asp.net MVC中访问静态页面
有时候由于一些特殊的需要,我们需要在MVC中访问HTML页面,假如您将这个页面放在Views中的话,去访问将会收到一个404,但是放在Views外面的目录则不受此限制. 那么我们就来解决View里面的 ...
- spring mvc 配置对静态资源的访问
在spring mvc的配置文件中做如下配置: 1. <?xml version="1.0" encoding="UTF-8"?> <bean ...
- springMvc里的mvc:resources与静态资源的访问
在进行Spring MVC的配置时,通常我们会配置一个dispatcher servlet用于处理对应的URL.配置如下: <servlet> <servlet-name&g ...
- spring-mvc里的 <mvc:resources> 及静态资源访问
在进行Spring MVC的配置时,通常我们会配置一个dispatcher servlet用于处理对应的URL.配置如下: <servlet> <servlet-name>Sp ...
- Spring Boot2 系列教程(十一)Spring Boot 中的静态资源配置
当我们使用 SpringMVC 框架时,静态资源会被拦截,需要添加额外配置,之前老有小伙伴在微信上问松哥 Spring Boot 中的静态资源加载问题:"松哥,我的 HTML 页面好像没有样 ...
- 解决SpringBoot页面跳转无法访问静态资源的问题
初学SpringBoot,写项目的时候遇到了问题,原本的页面是这样的 但启动项目后是这样的 这是因为thymeleaf中引入静态资源及模板需要使用到 th:xxx 属性,否则无法在动态资源中访问静态资 ...
随机推荐
- layui相关问题总结
1.layui table回显选中 1) radio: done:function(res, curr, count){ for(var i = 0; i < res.data.length; ...
- List的初始化方式
在LinkedIn考试考到了,很遗憾没考过,特意记录一下,下次再战!文章不是我写的,看到别人的总结,发在我这里自己看看 在 Java 中几种初始化 List 的方法: 1. List<Strin ...
- JS笔记(三):函数与对象
镇楼图 Pixiv:torino 四.Function类型 Rest语法 一些函数如Math.max可以支持任意数量的参数,JS中对于这样的参数可以简单使用...来实现,使用剩余参数,它支持收集剩余的 ...
- Java (新)将Excel数据读取到ListMap
Java (新)将Excel数据读取到ListMap Maven依赖: pom.xml <!-- excel --> <dependency> <groupId>o ...
- 字节码 看 new String("abc")创建了几个对象
感谢博主分享:https://www.cnblogs.com/zhaideyou/p/5875175.html 但是如果代码是这样子的: String str1 = "abc"; ...
- 2html5
多媒体标签 <audio> <audio src='../audio/bxb.mp3' controls="controls" autoplay="au ...
- Promise 一些注意点
Promise是一个构造函数,其身上有all.race.resolve.reject这些方法,都可以通过 Promise. 调用. 注意点1 Promise构造函数接受一个参数 => funct ...
- 『教程』mariadb的主从复制
一.MariaDB简介 MariaDB数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据库文件,而是通过binlog日志复制到需要同步的从服务器上. MariaDB数据库支持单向 ...
- Scrapy框架报错:Ignoring non-200 response
1.当爬取页面状态码是异常状态码,但response是正常的时候,正常情况Scrapy框架会判断状态码,如果不是正常状态码会停止后续操作 解决方案: 在meta"handle_httpsta ...
- linux修改用户密码期限
1. https://www.cnblogs.com/wwwcf1982603555/p/15474557.html 设置密码复杂度: http://events.jianshu.io/p/533d3 ...