介绍
重要说明:使用这些功能需要使用 HTTP 连接器。AJP 连接器不支持它们。
异步写入
使用 HTTP 连接器时,Tomcat 支持使用 sendfile 发送大型静态文件。
一旦系统负载增加,这些写入将以最有效的方式异步执行。
可以将内容写入静态文件,然后使用 sendfile 代码写入内容,而不是使用阻止写入来发送大型响应。
缓存 valve 可以利用这一点将响应数据缓存在文件中,而不是将其存储在内存中。
如果请求属性 org.apache.tomcat.sendfile.support
设置为 Boolean.TRUE
,则 Sendfile 支持可用。
任何 Servlet 都可以通过设置适当的请求属性来指示 Tomcat 执行 sendfile 调用。 还需要正确设置响应的内容长度。使用 sendfile 时,最好确保请求或响应均未包装, 因为响应正文稍后将由连接器本身发送,因此无法过滤。 除了设置 3 个所需的请求属性外,servlet 不应发送任何响应数据, 但它可以使用任何会导致修改响应标头的方法(如设置 cookie)。
-
org.apache.tomcat.sendfile.filename
:将作为 String 发送的文件的规范文件名 -
org.apache.tomcat.sendfile.start
:起始偏移量为 Long -
org.apache.tomcat.sendfile.end
:结束偏移量为 Long
除了设置这些参数之外,还需要设置 content-length 标头。 Tomcat 不会执行此操作,因为可能已经将数据写入了 output 流。
请注意,使用 sendfile 将禁用 Tomcat 可能对响应执行的任何压缩。