我有一个返回几个 html 页面的小 servlet。其中一个页面的内容相当复杂,但大约每隔一小时就会发生变化。然而,用户经常要求这样做。我想避免在每次请求时重新计算它。
我想知道是否可以在内存中准备一个 gzip 版本(字节数组),并将其设置为对此页面的所有 HTML 请求的响应。我还会每小时重新计算一个新的缓存 gzip 版本。
如果可以的话,我该怎么做?我应该使用过滤器吗?对于这个问题,我们可以假设所有浏览器都可以处理 gzip 响应。我正在寻找代码示例。
最佳答案
经过一番谷歌搜索后,这似乎是解决方案:
public class MyFilter implements Filter {
private byte[] my_gzipped_page = ....
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
if (req instanceof HttpServletRequest) {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String ae = request.getHeader("accept-encoding");
if (ae != null && ae.indexOf("gzip") != -1) {
response.addHeader("Content-Length",
Integer.toString(my_gzipped_page.length));
response.addHeader("Content-Encoding", "gzip");
OutputStream output = response.getOutputStream();
output.write(my_gzipped_page);
output.flush();
output.close();
return;
} else ...
}
}
...
}
关于java - 如何将缓存的 gzipped html 页面返回到 http servlet 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7948555/