`

javaweb静态资源文件(.jpg;,css;.js等)处理

阅读更多
在使用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
分享到:
评论

相关推荐

    JavaWeb12-文件上传.rar

    JSP+servlet+javabean学习 里面有PDF文件对该章节的详细讲解,培训老师才讲的到的,非常详细......资源内容如下: JavaWeb02-request与response.rar ...JavaWeb12-文件上传.rar JavaWeb13-过滤器与监听器.rar

    JavaWeb05-购物车.rar

    JSP+servlet+javabean学习 里面有PDF文件对该章节的详细讲解,培训老师才讲的到的,非常详细......资源内容如下: JavaWeb02-request与response.rar ...JavaWeb12-文件上传.rar JavaWeb13-过滤器与监听器.rar

    JavaWeb06-Servlet.rar

    JSP+servlet+javabean学习 里面有PDF文件对该章节的详细讲解,培训老师才讲的到的,非常详细......资源内容如下: JavaWeb02-request与response.rar ...JavaWeb12-文件上传.rar JavaWeb13-过滤器与监听器.rar

    JavaWeb08-DBUtil.rar

    JSP+servlet+javabean学习 里面有PDF文件对该章节的详细讲解,培训老师才讲的到的,非常详细......资源内容如下: JavaWeb02-request与response.rar ...JavaWeb12-文件上传.rar JavaWeb13-过滤器与监听器.rar

    狂神说javaweb实战静态资源.rar

    知道的应该都学到p28了

    java源码 仿360buy京东商城源码 京东JavaWeb项目源代码.zip

    java源码 仿360buy京东商城源码 京东JavaWeb项目源代码.zipjava源码 仿360buy京东商城源码 京东JavaWeb项目源代码.zipjava源码 仿360buy京东商城源码 京东JavaWeb项目源代码.zipjava源码 仿360buy京东商城源码 京东...

    (JavaWeb基于SSM框架的毕业设计)仿360buy京东商城源码 京东JavaWeb项目源代码.zip

    (JavaWeb基于SSM框架的毕业设计)仿360buy京东商城源码 京东JavaWeb项目源代码.zip(JavaWeb基于SSM框架的毕业设计)仿360buy京东商城源码 京东JavaWeb项目源代码.zip(JavaWeb基于SSM框架的毕业设计)仿360buy京东商城...

    校园帮项目源码-毕业设计课程设计-采用javaWeb&SSM架构.zip

    该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,...

    javaweb网上书店系统源码+数据库javaweb网上书城系统.zip

    javaweb网上书店系统源码+数据库javaweb网上书城系统.zip 代码完整下载可用,已获导师指导并通过的97分高分课程大作业项目。 javaweb网上书店系统源码+数据库javaweb网上书城系统.zip 代码完整下载可用,已获导师...

    基于javaweb的点餐系统源码+数据库(javaweb毕业设计).zip

    基于javaweb的点餐系统源码+数据库(javaweb毕业设计).zip 获得导师指导并通过的高分项目,下载即用无需修改,代码完整确保项目可以运行。 基于javaweb的点餐系统源码+数据库(javaweb毕业设计).zip 获得导师指导...

    基于JavaWeb的火车订票系统源码+数据库(javaweb毕业设计).zip

    基于JavaWeb的火车订票系统源码+数据库(javaweb毕业设计).zip 已获导师指导并高分毕业项目,代码完整确保可以运行,下载即用无需修改。 基于JavaWeb的火车订票系统源码+数据库(javaweb毕业设计).zip 已获导师...

    JavaWeb07-javaWeb模式.rar

    JSP+servlet+javabean学习 里面有PDF文件对该章节的详细讲解,培训老师才讲的到的,非常详细......资源内容如下: JavaWeb02-request与response.rar ...JavaWeb12-文件上传.rar JavaWeb13-过滤器与监听器.rar

    基于JavaWeb的点餐系统.zip

    基于JavaWeb的点餐系统.zip

    JavaWeb11-图片验证码.rar

    JSP+servlet+javabean学习 里面有PDF文件对该章节的详细讲解,培训老师才讲的到的,非常详细......资源内容如下: JavaWeb02-request与response.rar ...JavaWeb12-文件上传.rar JavaWeb13-过滤器与监听器.rar

    基于jsp+servlet+jdbc+dao+mvc的名片管理系统源码(javaweb高分课设).zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现...

    Javaweb JavaScript EChart echarts.min.js 图表插件

    Javaweb JavaScript EChart echarts.min.js 图表插件EChart 图表制作插件Javaweb前端PC端移动端使用的图表插件echarts.min.js压缩文件v5.0

    基于jsp+servlet的宿舍管理系统源码+数据库+设计说明书(javaweb高分课设).zip

    基于jsp+servlet的宿舍管理系统源码+数据库+设计说明书(javaweb高分课设).zip基于jsp+servlet的宿舍管理系统源码+数据库+设计说明书(javaweb高分课设).zip基于jsp+servlet的宿舍管理系统源码+数据库+设计说明书...

    基于Java+servlet的网上图书商城源码+sql数据库(javaweb课程作业).zip

    基于Java+servlet的网上图书商城源码+sql数据库(javaweb课程作业).zip基于Java+servlet的网上图书商城源码+sql数据库(javaweb课程作业).zip基于Java+servlet的网上图书商城源码+sql数据库(javaweb课程作业).zip基于...

Global site tag (gtag.js) - Google Analytics