服务来自Servlet的已经gzipped响应

时间:2015-04-09 21:59:45

标签: java servlets gzip

我的应用程序中有一个gzip压缩的JSON资源,我想通过servlet提供服务。浏览器不确定原因,但实际上没有一个会加载我的内容。这段代码出了什么问题吗?

public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setStatus(200);

        InputStream in = <get an input stream to my gzipped data>;

        resp.setIntHeader("Content-Length", in.available());
        OutputStream out = resp.getOutputStream();

        out.write(IOUtils.toByteArray(in));
        out.close();

        resp.setHeader("Content-Encoding", "gzip");
        resp.setHeader("Content-Type", "application/json");
    }
}

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找的答案可以在此主题中接受的答案的链接中找到 - Serve Gzipped content with Java Servlets

这包括来自O'Reilly网站的工作示例。

但是我会质疑你是否需要引入这种交叉卷曲问题并手动gzip内容。假设您正在使用Apache或其分支,我建议您查看mod_deflate它是可配置且功能强大的,并使您无需编写用于gzipping响应的样板代码。