Tomcat和Spring MVC对静态文件的处理

本文详细介绍了SpringMVC和Tomcat如何处理静态文件,包括配置和内部处理流程,并对比了两者在处理静态资源时的不同方式。
[b]Spring MVC 和Tomcat对 静态文件的处理:[/b]

[b]• 当spring这样配置的时候,我们会拦截所有的request其中也包括了js,css和image文件[/b]
<servlet>
<servlet-name>xx</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>xx</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

那么我们会在xx-servlet.xml中加入下面几个配置达到对静态文件的处理
<mvc:annotation-driven/>
<mvc:resources mapping="/img/**" location="/img/" />
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/css/**" location="/css/" />

具体处理的流程:
1) ResourceHttpRequestHandler会拦截静态文件的请求
2) checkAndPrepare
检查request的类型
检查session是否过期
检查是否需要缓存
3)getResource得到资源
3) setHeaders处理header
4) writeContent把resource的资源写到response中去

[b]• 当然你也可以在web.xml中配置默认的处理了[/b]
<servlet>
<servlet-name>static</servlet-name>
<servlet-class>
org.apache.catalina.servlets.DefaultServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name> static </servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name> static </servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
[b]
• 那我们在来看看tomcat的DefaultServlet做了些什么事情[/b]
1) tomcat的默认拦截器拦截了你的请求org.apache.catalina.servlets.DefaultServlet
2) serveResource处理你的资源
3) DirContext resources = getResources();得到tomcat的上下问资源
4) ResourceInfo resourceInfo = new ResourceInfo(path, resources);得到请求的资源
5) 吧资源写到response中去
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值