圣凤凌霜 发表于 2017-2-2 12:27:53

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

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

·当spring这样配置的时候,我们会拦截所有的request其中也包括了js,css和image文件
<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中去

·当然你也可以在web.xml中配置默认的处理了
<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>

·那我们在来看看tomcat的DefaultServlet做了些什么事情
1)tomcat的默认拦截器拦截了你的请求org.apache.catalina.servlets.DefaultServlet
2)serveResource处理你的资源
3)DirContext resources = getResources();得到tomcat的上下问资源
4)ResourceInfo resourceInfo = new ResourceInfo(path, resources);得到请求的资源
5)吧资源写到response中去
页: [1]
查看完整版本: Tomcat和Spring MVC对静态文件的处理