我必须将一个由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();
...
非常感谢任何帮助
答案 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字符串。