Jér*_*nge 1 java zip caching servlets httpresponse
我有一个小的 servlet 返回几个 html 页面。其中一个页面的内容非常复杂,但每隔一小时左右就会发生变化。但是,它经常被用户请求。我想避免在每次请求时重新计算它。
我想知道是否可以在内存(字节数组)中准备一个 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 ...
}
}
...
}
Run Code Online (Sandbox Code Playgroud)