Tomcat访问所有的资源,都是用Servlet来实现的,所以Tomcat又叫Servlet容器,什么都交给Servlet来处理。当然,静态资源也不例外。静态资源可以理解为前端的固定页面,如css,html,js,jpg,png等。对于静态资源,Tomcat最后会交由一个叫做DefaultServlet的类来处理,DefaultServlet处理静态资源的过程就是Tomcat响应静态资源。

可能你习惯性的打开Tomcat,在部署了一个应用之后,就开始查看其运行结果,或者更多的关注Servlet内的逻辑是否正确。至于静态资源处理这个事,可能不曾留意过。那我们一起来看看,Tomcat是如何响应静态资源的。

本质上讲,Tomcat对于所有的静态资源,会做统一处理。也就是在所有你没有配置URL匹配的地方,Tomcat这个全局统一处理的配置就开始接管工作了。那么,倘若我们没有配置这个东西,它怎么生效呢?

在Tomcat的conf目录下,就是有全局配置文件server.xml在同一个目录下,有一个web.xml,打开它之后,你会发现这样的说明:

The default servlet for all web applications, that serves static

resources. It processes all requests that are not mapped to other

servlets with servlet mappings.

再向下,你会看到关于这个全局处理的Servlet声明,也就是处理静态资源的DefaultServlet类。此处,它还有一个名为listings的初始化参数,默认值为false。这个参数主要作用,是在没有welcome文件时,控制应用目录内的文件是否允许列表显示。如果设置为true,就会常见的FTP服务器一样,把应用目录下的文件都列了出来,像下面这个样子。当然,这个样式也是可以自已定义的。

那么,既然url-pattern配置的是 / ,那不就应该响应所有的请求了么?

对,我们上面说明中也提到了,是匹配所有你没定义的Servlet-mapping的请求。而之所以自己定义的Servlet可以优先生效,则是因为Tomcat内的Servlet配置,是严格按照声明顺序初始化,并按此顺序响应请求,一层层按此比对,有一个可以响应请求,就用其处理。

下面我们来看DefaultServlet中,静态资源响应处理的部分源码,文件位于org.apache.catalina.servlets.DefaultServlet文件中。首先是这个文件,一般资源请求,都会走GET方法。

protected void doGet(HttpServletRequest request,

HttpServletResponse response)

throws IOException, ServletException {

// Serve the requested resource, including the data content

serveResource(request, response, true, fileEncoding);

}

serveResource这个方法内容较多,放在这里查看不太方便。大致总结下,首先会判断要请求的资源是否存在,文件是否可读,之后,根据资源的类型,设置响应头的content-type,判断文件的时间,设置超时时间等,最终是流的读写。

整个应用内的资源存放在resources这个变量内,声明如下:

/**

  • The complete set of web application resources

*/

protected transient WebResourceRoot resources = null;

这块和上面内容有关联的地方是,读取文件的时候,会判断请求的路径对应的资源是否为一个文件夹,如果是目录,就会判断listings这个参数,为true时才会列出内容,否则直接返回内容找不到,即404。代码如下:

if (resource.isDirectory()) {

// Skip directory listings if we have been configured to

// suppress them

if (!listings) {

response.sendError(HttpServletResponse.SC_NOT_FOUND,

request.getRequestURI());

return;

}

简而言之,Tomcat响应静态资源主要还是依靠着DefaultServlet类进行的。只有熟练掌握DefaultServlet类的用法,自然而然也就掌握了Tomcat响应静态资源的方法。想要学习更多的Tomcat服务器相关的知识,可以观看本站的Tomcat服务器教程,让我们熟悉Tomcat理论知识的同时,还提供有大量的源码让我们进行实战演练。

本文来自千锋教育,转载请注明出处。

什么是Tomcat响应静态资源?相关推荐

  1. 升级tomcat导致静态资源报错400

    先上结论:tomcat7.0-106之后的版本(包括8.5xx之后的版本,只是下了个较新的测试)改了DefualtServerlet类checkIfNoneMatch方法中的比较逻辑,导致用java中 ...

  2. Nginx+Tomcat动静态资源分离

    1 创建用户.用户组 useradd -g users www passwd www //设置密码,否则该用户不可用 groupadd -g 888 www //创建用户组 gpasswd -a ww ...

  3. tomcat配置静态资源访问

    第一种:复制要访问的文件a.txt至tomcat安装路径下的webapps/ROOT文件夹下:              访问路径为:localhost:8080/a.txt              ...

  4. IDEA配置tomcat静态资源目录

    笔记:如何在IDEA中配置Tomcat的静态资源目录 先找到本地的Tomcat目录,(everything里搜索Tomcat) \ 打开tomcat目录,找到并进入conf目录 \ 需要修改两个文件s ...

  5. 【原创】分布式之缓存击穿 【原创】自己动手实现静态资源服务器 【原创】自己动手实现JDK动态代理...

    [原创]分布式之缓存击穿 什么是缓存击穿 在谈论缓存击穿之前,我们先来回忆下从缓存中加载数据的逻辑,如下图所示 因此,如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查询, ...

  6. nginx配置静态资源html,通过nginx服务器访问静态资源(示例代码)

    通过nginx服务器访问静态资源 引言 之前在做毕设的时候接触过nginx,那时候是用来做前后端分离的.一转眼都快一年了,nginx的相关内容也忘的差不多了. 有过接触前端的同学都知道,直接在标签的s ...

  7. 静态资源请求被拦截问题

    SpringMVC中配置URL拦截,非常简单.网上找个示例,就能通过.但是,在我做了好几个Web项目,又参与了别人主导的Web项目时,发现URL配置也非常有学问. 先说说一种比较常见的: <se ...

  8. SpringMVC-开启静态资源访问权限

    1.配置 <mvc:resources mapping="/js/**" location="/js/"/> mapping:代表js目录下的所有文 ...

  9. (静态资源处理)nginx 比tomcat强在哪

    nginx有多牛逼 序言 安装 反向代理 静态资源服务器 nginx vs tomcat压测对比 并发结果对比 对服务器影响对比 说在后面的话 序言 对于常用的服务器,大家可能更多的知道apache, ...

最新文章

  1. mysql主从复制,半同步,主主复制架构的实现
  2. pandas把索引变成列
  3. 天玑机器人颈椎_天玑骨科手术机器人亮相机器人大会 误差不到1毫米
  4. python 选择多个文件夹_如何同时选择多个文件?
  5. 调整linux块大小,Linux系统之更改默认块大小
  6. 2048java课程设计报告_2048小游戏-Java-课程设计报告书
  7. 京东家电渠道赋能战略加速落地,助力家电品牌打通人、货、场间隔
  8. OpenStack OVSGRE/VXLAN网络
  9. C++在windows下获得运行主机的硬件信息:CPU序列号、MAC地址、硬盘序列号、主板序列号
  10. mhdd测试hdd硬盘软件,HDD坏道检测软件比较(DiskGenius/HdTunePro/MHDD等)
  11. 关于微信各名词的英文翻译
  12. wps页眉怎么设置不同页码_WPS中怎么给单独一页设置页眉?
  13. android连接wifi不能上网,手机已经连接wifi但无法上网的详细解决方法
  14. Unity平行光源方向_WorldSpaceLightPos0自定义
  15. 错误记录:java.lang.IllegalStateException:Duplicate key
  16. 负载,吞吐量,最大转发速率,带宽,线
  17. 计算机数据采集 的优点,数据采集器的作用_数据采集器硬件特点
  18. SQL语句的约束条件
  19. JavaFX七巧板游戏:布局控件
  20. js字符串转与json对象类型转换

热门文章

  1. 深度长文 | 复旦大学肖仰华:领域知识图谱落地实践中的问题与对策
  2. 05丨深入浅出索引(下)
  3. 【JVM调优工具篇】jvisualvm工具导出dump文件教程
  4. SpringMVC-开启静态资源访问权限
  5. classpath和读取resources目录下的文件
  6. Mybatis实现多表关联多条件查询
  7. LeetCode 8 字符串转换整数 (atoi)
  8. Sonya and Informatics
  9. Salem and Sticks
  10. 高校学院计算机实验室管理系统概述,高校实验室管理系统