Tomcat中对静态资源的处理教程-创新互联

前言

成都创新互联公司专注于企业成都营销网站建设、网站重做改版、库车网站定制设计、自适应品牌网站建设、html5成都做商城网站、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为库车等各大城市提供网站开发制作服务。

Tomcat 中的请求都是由 Servlet 处理,静态资源也不例外。在默认的 web.xml 中,配置了一个 DefaultServlet 用于处理静态资源,它支持缓存和断点续传。

DefaultServlet 的基本处理过程如下:

  • 查找资源是否存在缓存
  • 检查是否满足可选 If 头域指定的条件
  • 设置响应头域,如 Content-Type、Content-Length、ETag、Last-Modified
  • 检查是否满足 Sendfile 的条件,否则将内容拷贝到输出流中

接下来主要分析资源缓存的设计和实现,以及 If 头域的处理。

1. 资源缓存的设计

访问磁盘的速度远远低于访问内存的速度,所以适当的缓存一部分静态资源能够让系统快速响应。

Tomcat 在 6.0.53 版本实现静态资源的处理时,借助了 JNDI 的一些 API(但在使用时感觉与 JNDI 的关系不大),相关类图及核心方法和属性如下:

Tomcat中对静态资源的处理教程

缓存相关的类:

  • ResourceCache: 缓存实现,提供了资源查找、加载、销毁的功能
  • CacheEntry: 一个缓存条目,包含缓存名称,如 /tomcat.gif,资源和资源的属性以及对应的目录

资源目录相关的类是:

  • EmptyDirContext: 主要用于嵌入式模式,行为就像没有可用资源一样
  • FileDirContext: 基于文件系统的资源目录服务
  • WARDirContext: 基于 war 文件的目录服务
  • Resource: 封装了资源内容,主要有字节数据和输入流
  • ResourceAttributes: 资源属性,主要有内容长度和最后修改时间
  • ProxyDirContext: 资源缓存和目录服务的代理,提供查找资源缓存、校验缓存是否过期等功能

默认情况下,缓存大为 10 MB,单个缓存资源大为 512 KB,缓存的 TTL 为 5s。

一般的,在 Mapper 映射到处理静态资源的 Wrapper 时,会引起资源的加载,基本的方法调用情况如下:

Mapper.map(MessageBytes, MessageBytes, MappingData)
└─Mapper.internalMap(CharChunk, CharChunk, MappingData)
 └─Mapper.internalMapWrapper(Mapper$Context, CharChunk, MappingData)
 └─ProxyDirContext.lookup(String)
 └─ProxyDirContext.cacheLookup(String)
 └─ResourceCache.lookup(String)
  └─ResourceCache.find(CacheEntry[], String)

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:Tomcat中对静态资源的处理教程-创新互联
网页地址:http://azwzsj.com/article/ccdcsj.html