在使用SpringMVC时,在web.xml文件中,我们经常会这样配置DispatcherServlet:
<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:config/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
注意:
<url-pattern>/</url-pattern>,这里配置的是“/”,因此该servlet会匹配诸如/images/login.jpg, /css/login.css,/css/login.js 等这些静态资源,
甚至包括 /jsp/index.jsp 这些 jsp 也会匹配。但是并没有定义相应的 Controller 来处理这些资源,因此这些请求通常是无法完成的。
第一种方式:
如果改为*.do或者*.action等,这样就类似于Struts的filter 的 url-pattern 是 *.action一样,这样就不会影响操作静态资源文件了。
<url-pattern>*.do</url-pattern>
第二种方式:
在DispatcherServlet的前面启用defaultServlet,让 defaultServlet先拦截请求,这样请求就不会进入Spring了,性能应该也是最好的吧。
在web.xml中添加:
<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>*.gif</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>
简单写法:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
<url-pattern>*.jpeg</url-pattern>
<url-pattern>*.png</url-pattern>
<url-pattern>*.gif</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
注:Tomcat, Jetty, JBoss, and GlassFish 自带的默认Servlet的名字 -- "default"
Google App Engine 自带的 默认Servlet的名字 -- "_ah_default"
Resin 自带的 默认Servlet的名字 -- "resin-file"
WebLogic 自带的 默认Servlet的名字 -- "FileServlet"
WebSphere 自带的 默认Servlet的名字 -- "SimpleFileServlet"
第三种方式:
在spring3.0.4以后版本提供了mvc:resources ,使用方法:
<mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/>
<mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"/>
<mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"/>
或者
<mvc:resources mapping="/js/*.js" location="/js/" />
/images/** 映射到 ResourceHttpRequestHandler 进行处理,location 指定静态资源的位置,可以是 web application 根目录下、jar 包里面,这样可以把静态资源压缩到 jar 包中。cache-period 可以使得静态资源进行 web cache。
使用 <mvc:resources /> 元素,会把 mapping 的 URI 注册到 SimpleUrlHandlerMapping 的 urlMap 中,key 为 mapping 的 URI pattern 值,而 value 为 ResourceHttpRequestHandler,这样就巧妙的把对静态资源的访问由 HandlerMapping 转到 ResourceHttpRequestHandler 处理并返回,所以就支持 classpath 目录, jar 包内静态资源的访问。
第四种方式:
<mvc:default-servlet-handler/>
<mvc:default-servlet-handler /> 会把 "/**" url 注册到 SimpleUrlHandlerMapping 的 urlMap 中,把对静态资源的访问由 HandlerMapping 转到 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler 处理并返回。DefaultServletHttpRequestHandler 使用就是各个 Servlet 容器自己的默认 Servlet。
补充说明下以上提到的 HandlerMapping 的 order 的默认值:
DefaultAnnotationHandlerMapping:0
<mvc:resources /> 自动注册的 SimpleUrlHandlerMapping:2147483646
<mvc:default-servlet-handler/> 自动注册的 SimpleUrlHandlerMapping:2147483647
Spring 会先执行 order 值比较小的。当访问一个 a.jpg 图片文件时,先通过 DefaultAnnotationHandlerMapping 来找处理器,一定是找不到的,我们没有叫 a.jpg 的 Controller。再按 order 值升序找,由于最后一个 SimpleUrlHandlerMapping 是匹配 "/**" 的,所以一定会匹配上,再响应图片。
Spring MVC 中,访问一个图片,还要走层层匹配。性能肯定好不到哪里去。不仅仅是 Spring MVC,即便 Struts,它们毕竟存活于 servlet 容器,只要由 servlet 容器处理这些静态资源,必然要将这些资源读入 JVM 的内存区中。所以,处理静态资源,我们通常会在前端加 apache 或 nginx。
其中处理静态资源的类是org.springframework.web.servlet.resource.ResourceHttpRequestHandler,而且在location的描述中说明Each location must point to a valid directory. 即每个location都必须指向一个有效的目录。
参考:
http://www.cnblogs.com/weidiao/p/5517645.html
分享到:
相关推荐
springMVC3学习(四)--访问静态文件如js,jpg,css(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/25987411
在IT行业中,静态资源通常包括HTML、CSS、JavaScript、图片和其他不涉及服务器端动态处理的文件,它们是用户浏览器直接下载并呈现的部分。 【描述】中的反复提及"超市管理系统静态资源,smbms静态资源"表明这个系统...
在IT行业中,静态资源是指那些不涉及服务器端动态处理的文件,它们通常包括HTML、CSS、JavaScript、图片、字体文件等。这些文件是网站或应用程序的基础组成部分,为用户提供界面展示和交互功能。在这个名为"静态原型...
assets文件夹可能包含了项目中使用的静态资源,如图片、JavaScript和CSS文件。src文件夹存放源代码,是项目的核心区域,其中包含多个子文件夹,分别对应不同的技术或功能模块。.idea文件夹包含IDEA的项目相关配置...
在这个项目中,JavaScript文件很可能是用于实现用户交互逻辑、页面特效、数据处理等功能,这些文件的存在进一步证明了该项目的实践性和综合性。 CSS文件有5个,它们的作用是美化网页界面,提供视觉上的设计和布局。...
5. **图片和其他静态资源**:项目可能包含`.png`、`.jpg`等图像文件,以及其他所需的静态资源。 6. **构建脚本**:如`build.xml`(Ant)或`pom.xml`(Maven),用于自动化构建过程。 7. **文档**:可能包含README...
在Java Web开发中,处理静态文件(如图片、JavaScript、CSS等)是非常常见的任务,因为它们构成了用户界面的基础。以下是一些在Java Web应用程序中处理静态文件的常用方法: 1. **激活Tomcat的defaultServlet处理...
images和code目录可能分别存储了项目的静态资源和额外的代码文件。 8. **文档编写**: java课程设计.docx可能是关于项目的设计文档,详细解释了项目的目标、功能需求、系统架构和技术实现。 9. **前端技术**: 项目...
JavaScript文件和JSON、AJAX等技术的运用,说明项目在实现前后端分离、异步数据交互和国际化处理上的考量。 源码中包含的目录结构,如pom.xml、book、EL_JSTL、src、book_static、cookie_session、servlet、out、...
WebContent文件夹则包含了所有与网站用户界面相关的文件,包括静态资源和JSP页面。 该项目的目的是作为网络应用开发课程的作业,通过设计和实现一个简单但功能齐全的电子商务网站,为学生提供实践JavaWeb开发技能的...
该系统由192个JavaScript文件、192个CSS文件、110个GIF图片、92个JAR包、74个CSS样式文件、50个JSP页面文件、50个HTML文件、28个JPG图片文件以及21个XML配置文件等组成,总共包含了895个文件。项目的设计和实现是...
7. **JavaScript文件(dataTables.bootstrap.js、dataTables.bootstrap.css等)**:`assets/js/dataTables`目录下的文件与数据表格插件有关,例如`dataTables.bootstrap.js`和`dataTables.bootstrap.css`,它们提供...
"build"文件夹可能包含编译和构建过程中生成的中间文件,而"WebContent"则可能包含了静态资源文件和部署后的Web应用文件。 本项目是一个综合性的JavaWeb应用开发实例,它不仅涉及到了后端开发的各个方面,还包括了...
首先,该系统的前端设计包含了大量的图片资源,其中包括173个GIF动图和155个JPG静态图片。这些图片用于商品展示、页面美化和用户交互界面,使得整个商城界面生动、直观。为了实现美观和易用性,系统还包含了29个CSS...
2. 静态资源:如CSS样式表(.css)、JavaScript脚本(.js)、图片文件(.jpg, .png)等,用于页面美化和交互功能。 3. 数据库脚本:可能包含SQL文件,用于创建和初始化数据库,存储用户信息、项目数据等。 4. README...
静态资源包括html、css、js、txt、mp4、jpg等文件,而动态资源主要指的是那些需要通过服务器端程序处理才能生成的资源,比如JSP页面和Servlet程序。Tomcat的启动通常通过运行`catalina run`命令,而停止可以通过关闭...
5. `更多javaweb免费资料以及相关视频下载学习.html.url`:这是一个链接文件,可能指向与JavaWeb相关的免费学习资源。 这个模板适用于希望快速搭建一个专业且具有24小时客户支持功能的网站的企业或个人。通过这个...
例如,GIF图片可能被用作网站的动态标识或者小动画,而PNG和JPG格式的图片则可能用于显示书籍封面或用户头像等静态图像。 此外,XML配置文件用于网站的配置管理,它存储了网站运行时所需的各种配置信息,包括但不...
它的开发采用Java、JavaScript和CSS等编程语言,总共包含98个文件,分为多个类型,包括34个Java源文件,19个JSP文件,16个PNG图片,8个XML配置文件,8个JavaScript文件,3个CSS文件,2个JPG图片,2个WOFF字体文件,1...
项目概述:基于SSM...技术栈详情:开发语言以Java为主,前端交互采用JavaScript,页面布局与样式设计依赖于CSS,视图层使用JSP,配置文件以XML格式进行管理,同时包含了必要的静态资源如图片(PNG、JPG、GIF)等。