我正在从码头9.0.x
迁移到9.4.x
org.eclipse.jetty.server.ResourceCache
已从码头9.4.x
中删除
问题:
1)9.4.x
中此类的替代品是什么?
2)我发现CachedContentFactory
是该类的最接近等价物,但是该类的构造函数需要一个额外的参数CompressedContentFormat[] precompressedFormats
。如果这是正确的替代品,那么我不确定应该将此参数传递给什么?可以是空数组吗?抱歉,javadocs也没有太大帮助。
答案 0 :(得分:1)
首先介绍一些历史。
在主要版本Jetty 9.0.0中,有两种处理静态内容的主要方法:
DefaultHandler
(和下级ResourceHandler
)。
当主要版本Jetty 9.4.0推出时(这是Jetty的4个主要版本,随后是Jetty 9.0.0),我们努力使这两个组件都使用通用代码库,因此ResourceService
创建是为了在一个地方标准化静态内容的服务。现在DefaultHandler
和ResourceHandler
之间的差异已大大减少。 (注意:DefaultHandler
仍支持其自身的更多功能以及各种HTTP规范的更多功能。)
接下来,Issue #539已解决,允许ResourceHandler
(现在DefaultHandler
)具有自定义目录列表。为此,引入了HttpOutput.ContentFactory
接口。
新的HttpOutput.ContentFactory
负责返回代表提供的路径的HttpContent
(和可选的最大缓冲区大小配置选项)。
因此,这意味着我们有...
DefaultServlet
(或ResourceHandler
)ResourceService
HttpOutput.ContentFactory
获得内容的HttpContent
可以是静态资源,目录列表或欢迎文件。当需要发送静态内容时,采取的步骤是...
HttpContent
请求HttpOutput.ContentFactory.getContent(path, maxBufferSize)
对象HttpContent
的表示形式,以下内容之一(按此顺序):
HttpChannel
配置为使用“直接缓冲区”,则要求HttpContent.getDirectBuffer()
代表整个内容。 (这可能是使用很少量的堆内存的内存映射文件)HttpContent.getIndirectBuffer()
代表整个内容。 (这可能是使用很少量的堆内存的内存映射文件)HttpContent.getReadableByteChannel()
发送内容。 HttpContent.getInputStream()
发送内容。 Jetty 9.4.0+中存在HttpOutput.ContentFactory
的2种主要实现方式
ResourceContentFactory
处理临时内容(未缓存)-如果内容超过maxBufferSize
,则将不返回原始ByteBuffer
版本。CachedContentFactory
,将缓存从先前的ByteBuffer
返回的各种HttpOutput
值。 CachedContentFactory
有一个isCacheable(Resource)
方法,该方法被询问以了解所提供的资源是否应进入内存缓存。
关于CompressedContentFormat[] precompressedFormats
构造函数中的CachedContentFactory
参数,指的是ResourceService
和CachedContentFactory
都支持的“预压缩”格式。 / p>
典型情况下,默认设置为...
CompressedContentFormat[] precompressedFormats = {
CompressedContentFormat.GZIP, // gzip compressed
CompressedContentFormat.BR, // brotli compressed
new CompressedContentFormat("bzip", ".bz") // bzip compressed
};
CachedContentFactory cachedContentFactory = new CachedContentFactory(parentContentFactory,
resourceFactory, mimeTypes, useFileMappedBuffers,
useEtags, precompressedFormats);
resourceService.setContentFactory(cachedContentFactory);
这些precompressedFormats
指的是在服务器启动之前已预先压缩的静态(和不可变)内容。
这使客户端可以发送请求...
GET /css/main.css HTTP/1.1
Host: example.hostname.com
Accept-Encoding: gzip, deflate
,如果“基础资源”目录中有一个${resource.basedir}/css/main.css
和一个${resource.basedir}/css/main.css.gz
,则响应将从main.css.gz
(而不是{{ 1}}),导致HTTP响应,如...
main.css