gpt4 book ai didi

java - 如何使用 Struts 2 gzip ajax 请求?

转载 作者:搜寻专家 更新时间:2023-11-01 01:19:30 24 4
gpt4 key购买 nike

如何使用 Struts2 对 ajax 响应进行 gzip 压缩?我试图创建一个过滤器,但没有成功。在客户端,我使用的是 jQuery,我期望的 ajax 响应是在 json 中。

这是我在服务器上使用的代码:

    ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gz = new GZIPOutputStream(out);
gz.write(json.getBytes());
gz.close();

我正在将响应重定向到在 struts.xml 中定义的虚拟 jsp 页面。

之所以要将数据 gzip 回,是因为有一种情况,我必须将一个相对较大的 json 发送回客户端。

我们将不胜感激您提供的任何引用资料。

谢谢。

最佳答案

你不应该随机 gzip 响应。只有当客户端通知服务器它接受(理解)gzip 压缩响应时,您才能对响应进行 gzip 压缩。您可以通过确定 Accept-Encoding 是否请求 header 包含 gzip .如果它在那里,那么您可以安全地包装 OutputStream GZIPOutputStream 中的响应.您只需要添加 Content-Encoding 预先 header 值为 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"));

(请注意,您还想设置内容类型和字符编码,示例中已考虑到这一点)

您也可以在应用服务器级别配置它。由于不清楚您使用的是哪一个,这里只是一个针对 Tomcat 的示例:检查 compressioncompressableMimeType <Connector> 的属性/conf/server.xml 中的元素: HTTP connector reference .这样您就可以直接写入响应而不必担心 gzip 压缩。

关于java - 如何使用 Struts 2 gzip ajax 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3631676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com