优化性能:将大型JSON从Servlet传递到JSP

时间:2014-06-05 09:41:36

标签: json performance jsp servlets

我必须将一个由servlet的json对象组成的json数组传递给jsp页面。此数据传输会降低页面响应速度。有什么方法可以在将大型json从servlet传递给jsp时优化性能。

代码如下:

    request.setAttribute("jsonStringForDataTable", jsonArrayForDataTable);
    response.setContentType("text/plain");             
    response.setContentLength(jsonArrayForDataTable.toString().getBytes().length);
    ServletOutputStream out=response.getOutputStream();
    out.print(jsonArrayForDataTable.toString().replace('_',' '));
    out.close();
...

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

你正在使用ajax,对吗?由于您正在设置该请求属性,因此很难判断,就好像要转发到jsp一样,但之后您将直接写入响应。如果这是ajax,则可以使用gzip压缩响应(如果客户端接受它)。您必须尝试知道它是否会在您的情况下加快速度。您将通过取决于原始内容的比率来减小响应的大小,但是您将增加服务器(以及必须解压缩响应的客户端上的处理器工作量)。

ServletOutputStream out = response.getOutputStream();
response.setContentType("application/json");
String strVal = jsonArrayForDataTable.toString().replace('_',''));

if (request.getHeader("Accept-Encoding") != null && request.getHeader("Accept-Encoding").contains("gzip"))
{
    ByteArrayOutputStream baos = new ByteArrayOutputStream(strVal.length());
    GZipOutputStream gzip = new GZIPOutputStream(baos);
    gzip.write(strVal.getBytes());
    gzip.close();

    response.setHeader("Content-Encoding", "gzip");
    out.write(baos.toByteArray());
    baos.close();
}
else
{
    out.print(strVal);
}

在客户端,您必须通过将Accept-Encoding XMLHttpRequest标头设置为gzip来为gzip压缩响应做好准备。浏览器会将其解压缩为json字符串。