Tomcat静态资源加载

         今天在和朋友交流技术时证实了以前一直模糊的一件事。那就是所有经过Tomcat的请求都是有一个servlet来处理的。如果一个请求没有匹配到任何应用指定的servlet,那么就会流到Tomcat的默认的servlet来处理。默认的DefaultServlet是配置在$catalina/conf/web.xml里面的相关servlet配置如下:

<servlet>
        <servlet-name>default</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>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>

servlet的mapping映射关系如下: 

    <!-- The mapping for the default servlet -->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

 (因为注释太多在此隐去,建议感兴趣的看客可以到$catalina/conf/web.xml目录下看看,很有用的)

     默认情况下,DefaultServlet是映射到根目录的。可能有人会问“<url-pattern>/</url-pattern>”这个和我们应用配置的不会冲突吗?有相关疑问的可以查看以下博文:

http://k1121.iteye.com/blog/1564241

 

       当我们浏览器输入“http://localhost:8080/test.html” 向tomcat容器发送一个静态文件请求时,就会调用tomcat的org.apache.catalina.servlets.DefaultServlet类的doGet()方法进而通过serveResource()等方法取出需要的资源,然后加载进来,并且判断相应的mime类型设置不同的HTTP head,然后输出到页面上。

     

  <!-- ===================== Default MIME Type Mappings =================== -->
  <!-- When serving static resources, Tomcat will automatically generate    -->
  <!-- a "Content-Type" header based on the resource's filename extension,  -->
  <!-- based on these mappings.  Additional mappings can be added here (to  -->
  <!-- apply to all web applications), or in your own application's web.xml -->
  <!-- deployment descriptor.                                               -->

    <mime-mapping>
        <extension>html</extension>
        <mime-type>text/html</mime-type>
    </mime-mapping>

    

 实验:

如果按照以下内容修改$catalina/conf/web.xml中的servlet-mapping: 

    <!-- The mapping for the default servlet -->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.test</url-pattern>
    </servlet-mapping>

 则当我们浏览器输入“http://localhost:8080/test.html” 向tomcat容器发送一个静态文件请求时则会报“HTTP/1.1 404 Not Found”

 

你可能感兴趣的:(tomcat)