[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 属性,否则无法在动态资源中访问静态资 ...
随机推荐
- vue npm安装指令汇总
1.elmentui:npm i element-ui -S 2.打印插件:npm install vue-print-nb --save 3.时间转换插件Moment:npm install mom ...
- Alibaba Cloud Linux 3.2104 64位安装mydumper-0.9.1
1 下载 wget https://launchpad.net/mydumper/0.9/0.9.1/+download/mydumper-0.9.1.tar.gz tar -zxvf mydumpe ...
- Linux系列---【内存占用过高问题排查思路】
内存占用过高问题排查思路 1.使用top命令查看后台任务 按shift+M使应用按内存使用率排序,定位到第一个使用内存最高的应用,并找到对应的PID. 2.使用ps命令查看对应的pid对应哪个应用 p ...
- 07 HBase操作
1.理解HBase表模型及四维坐标:行键.列族.列限定符和时间戳. 2.启动HDFS,启动HBase,进入HBaseShell命令行. 3.列出HBase中所有的表信息list 4.创建表create ...
- houdini python 配置 vscode 环境
一.在我的文档python文件夹中找到houdini.env文件,打开,加入语句 EDITOR = vscode路径 例如:EDITOR = D:\vscode\Microsoft VS Code\C ...
- go语言读取文件的简单使用
注意:打开文件记得一定要关闭 file, err := os.Open("文件名称") defer file.Close() 一.打开文件 1. file, err := os.O ...
- pretty break
scale_x_continuous( breaks = pretty_breaks(10),labels=scales::comma)+ x <- 1:4 y <- c(0, 0.000 ...
- java 循环删除数据写法
import java.util.ArrayList;import java.util.ConcurrentModificationException;import java.util.List;// ...
- 10.Java中Map的entrySet() 详解以及用法
一.Map.entry是什么? Map是java中的接口,Map.Entry是Map的一个内部接口. 此接口为泛型,定义为Entry<K,V>.它表示Map中的一个实体(一个key-val ...
- 获取UndeclaredThrowableException异常信息
一.堆栈错误信息如下,要获取红框里的message 说明:ValidationException为自定义异常,继承自Exception 二.代码如下