将压缩后的响应字符串设置为请求对象中的属性,并将控制传递给 JSP
您不应该将 JSON 响应转发到 JSP。您应该已将 JSON 纯文本打印到响应中,并在您的 JSP Android 应用程序中使用 JavaScript/Ajax 代码来调用返回 JSON 的 servlet 的 URL。另见How to use Servlets and Ajax?。
至于 GZIP 压缩,你不应该自己做。让服务器自己做。
修复您的代码以删除所有压缩响应的手动尝试,它最终应该基本上如下所示:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String json = createItSomehow();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
}
就是这样,如果您让 Android 应用调用 servlet 的 URL,它将检索 JSON 字符串。
最后编辑服务器配置以启用自动 GZIP 压缩。以 Tomcat 为例,只需在 Tomcat 的 /conf/server.xml 文件中将 compression="on" 添加到 the <Connector> element 即可:
<Connector ... compression="on">
根据the documentation,可压缩的mime 类型默认为text/html,text/xml,text/plain。您可以将其配置为添加application/json。
<Connector ... compression="on" compressableMimeType="text/html,text/xml,text/plain,application/json">
与具体问题无关,响应字符编码必须设置为UTF-8,这是根据JSON规范。