kan*_*eda 4 java jquery json gzip
如何使用Struts2 gzip ajax响应?我试图创建一个过滤器,但它不起作用.在客户端我使用jQuery和我期待的ajax响应是在json中.
这是我在服务器上使用的代码:
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gz = new GZIPOutputStream(out);
gz.write(json.getBytes());
gz.close();
Run Code Online (Sandbox Code Playgroud)
我正在将响应重定向到struts.xml中定义的虚拟jsp页面.
我之所以要重新gzip数据是因为我必须将一个相对较大的json发送回客户端.
任何参考提供将不胜感激.
谢谢.
你不应该随机gzip响应.当客户端通知服务器它接受(理解)gzipped响应时,您只能gzip响应.您可以通过确定Accept-Encoding请求标头是否包含来执行此操作gzip.如果它在那里,那么你可以安全地将OutputStream响应包装在一个GZIPOutputStream.您只需要Content-Encoding预先添加标头值,gzip以通知客户端发送内容的编码,以便客户端知道它需要对其进行解压缩.
简而言之:
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
OutputStream output = response.getOutputStream();
String acceptEncoding = request.getHeader("Accept-Encoding");
if (acceptEncoding != null && acceptEncoding.contains("gzip")) {
response.setHeader("Content-Encoding", "gzip");
output = new GZIPOutputStream(output);
}
output.write(json.getBytes("UTF-8"));
Run Code Online (Sandbox Code Playgroud)
(请注意,您还要设置内容类型和字符编码,在示例中将其考虑在内)
您也可以在appserver级别配置它.由于目前还不清楚你用哪一个,这里只是一个Tomcat的针对性例如:检查compression和compressableMimeType的属性<Connector>元素/conf/server.xml:HTTP连接器的参考.这样你就可以写回应而不用担心压缩它.
小智 6
如果您的响应是JSON,我建议使用struts2-json插件 http://struts.apache.org/2.1.8/docs/json-plugin.html并将enableGZIP参数设置为true.