[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 属性,否则无法在动态资源中访问静态资 ...
随机推荐
- daimayuan第三课(哈希,堆)
1:哈希 建立:拉链法: a:数组 #include <bits/stdc++.h> using namespace std; const int md = 1e9; int h[1000 ...
- ceph PG 故障状态
PG 故障状态 Creating(创建中)在创建POOL时,需要指定PG的数量,此时PG的状态便处于creating,意思是Ceph正在创建PG Peering(互联中)peering的作用主要是在P ...
- ajax高级(请求服务器脚本,数据库, ajxa xml文件)
请求jsp与请求普通文件不通过的地方,请求jsp可能会传参,比如搜索,用户名,页码这些 html部分:<input type="text" id="txt1&quo ...
- PHP操作MySQL批量Update的写法,各框架通用防注入版
使用别人的扩展遇到了问题,发现没有做SQL注入的处理.我又写了个轮子,根据自己需求扩展了下,有需要的小伙伴可以直接取用. 这里就直接粘贴源码了,会用PHPD ,基本都会如何把它运用到各个框架里的. 本 ...
- C++语法难点
virtual 实现类的多态性:基类定义虚函数,子类可以重写该函数:如果使用了virtual关键字,程序将根据引用或指针指向的 对象类型 来选择方法,否则使用引用类型或指针类型来选择方法 实现虚继承, ...
- Angular 管道和路由
管道pipe: 要在HTML模板中指定值转换,请使用管道运算符(|). {{interpolated_value | pipe_name}} 您可以链接管道,发送一个管道功能的输出以被另一个管道功能转 ...
- 在linux下创建KVM虚拟机
Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调度器进行管理,所 ...
- Qt中的渲染
Qt中3种不同的渲染方式 1 )Qt::AA_UseDesktopOpenGL 使用显卡的openGL库,且要求支持openGL 2.1及以上的版本.因此很多老旧设备是不满足版本要求的(windows ...
- bind、call、apply区别
bind.call.apply都是用来改变函数内部this指向的方法,使用上仅有细微差别 一.代码 function person(p1, p2, p3) { console.log('this: ' ...
- kettle连接oracle
连接oracle 10g 驱动classes12.jar 配置一下三项即可: 1.数据库名称:ip:端口/实例 2.用户名 3.密码