servlet 以 gzip 格式 返回结果
servlet 可以通过 gzip 格式返回结果,前提是 浏览器支持 gzip 格式,
------
gzip 格式返回数据的 步骤:
* 判断浏览器是否支持 gzip 格式
根据 header 中的 accept-encoding 属性 是否包含 "gzip" 字符 进行判定,
* 设置 返回的编码为 gzip 格式
设置 header 的 content-encoding 属性 的值为 "gzip",
* 创建支持 gzip 格式的输出流对象
可以通过 GZIPOutputStream 这个适配器类 创建 PrintWriter 对象,实现 gzip 格式输出,
例子:
PrintWriter pw = new PrintWriter(new GZIPOutputStream(resp.getOutputStream()));
* 输出内容
* 关闭 输出流
一定要调用 PrintWriter 对象的 close() 方法关闭输出流,否则 数据不能返回到浏览器端,
*
------
servlet gzip 工具类:
* 逻辑:
提供2个方法:
* 判断浏览器是否支持 gzip 压缩
* 返回支持 gzip 压缩的 PrinterWriter 对象,如果浏览器不支持 gzip 则返回普通的 PrinterWriter 对象,
*
* 工具类 代码:
ServletGzipUtil.java
package eric.servlet.util;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.zip.GZIPOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* servlet 的 gzip 工具类
* @author eric
* @date 2010-9-14 下午07:53:20
*/
public class ServletGzipUtil {
/**
* 判断浏览器是否支持 gzip 压缩
* @param req
* @return boolean 值
*/
public static boolean isGzipSupport(HttpServletRequest req) {
String headEncoding = req.getHeader("accept-encoding");
if (headEncoding == null || (headEncoding.indexOf("gzip") == -1)) { // 客户端 不支持 gzip
return false;
} else { // 支持 gzip 压缩
return true;
}
}
/**
* 创建 以 gzip 格式 输出的 PrintWriter 对象,如果浏览器不支持 gzip 格式,则创建普通的 PrintWriter 对象,
* @param req
* @param resp
* @return
* @throws IOException
*/
public static PrintWriter createGzipPw(HttpServletRequest req, HttpServletResponse resp) throws IOException {
PrintWriter pw = null;
if (isGzipSupport(req)) { // 支持 gzip 压缩
pw = new PrintWriter(new GZIPOutputStream(resp.getOutputStream()));
// 在 header 中设置返回类型为 gzip
resp.setHeader("content-encoding", "gzip");
} else { // // 客户端 不支持 gzip
pw = resp.getWriter();
}
return pw;
}
}
------
firefox 中查看 gzip 结果:
在 firebug 中可以通过 网络 tab 看到 请求的细节,
可以看到 响应头信息 中的 Content-Encoding 值为 gzip,且 Content-Length 的值比不使用 gzip 时要小,
------
例子:
* 代码写在 servlet 中
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter pw = null;
// gzip test
String headEncoding = req.getHeader("accept-encoding");
if (headEncoding == null || (headEncoding.indexOf("gzip") == -1)) { // 客户端 不支持 gzip
pw = resp.getWriter();
} else { // 支持 gzip 压缩
pw = new PrintWriter(new GZIPOutputStream(resp.getOutputStream()));
resp.setHeader("content-encoding", "gzip");
}
pw.write("<table>");
pw.write("<tr><td>name:</td><td>" + name + "</td></tr>");
pw.write("<tr><td>sex:</td><td>" + sex + "</td></tr>");
pw.write("<tr><td>habits:</td><td>" + Arrays.toString(habits) + "</td></tr>");
pw.write("</table>");
pw.write("><∧");
// 这里一定要关闭
pw.close();
}
* 使用 工具类 的 servlet:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter pw = ServletGzipUtil.createGzipPw(req, resp);
pw.write("<table>");
pw.write("<tr><td>name:</td><td>" + name + "</td></tr>");
pw.write("<tr><td>sex:</td><td>" + sex + "</td></tr>");
pw.write("<tr><td>habits:</td><td>" + Arrays.toString(habits) + "</td></tr>");
pw.write("</table>");
pw.write("><∧");
// 这里一定要关闭
pw.close();
}
------
分享到:
相关推荐
总结,"超强过滤器"是解决JSP-Servlet之间中文参数GET-POST传递问题的有效手段,通过统一设定请求的字符编码,确保在整个Web应用中中文数据能够正确无误地传输和处理。对于大型项目,这样的全局解决方案可以大大提升...
4. **将显式数据(即文档)发送回客户端**:响应可以以多种格式发送,包括文本(HTML或XML)、二进制(如GIF图像)或gzip等压缩格式。HTML是最常见的格式,因此Servlet经常需要将处理后的结果转化为HTML文档。 **...
文档可以以多种格式发送,包括文本(HTML或XML)、二进制(如GIF图像)或压缩格式(如gzip)。其中,HTML是最常见的格式,因此Servlet/JSP的一个重要任务是将结果包裹在HTML中。 1.5 **发送隐式数据** 隐式数据...
Servlet是Java Web开发中的核心组件,它是一种Java类,用于扩展服务器的功能,处理来自客户端(通常是Web浏览器)的请求,并返回响应。在本教程中,我们将深入探讨Java Web的Servlet技术,基于提供的J2EE 1.5和Java ...
- 对于大量数据的返回,考虑分页和延迟加载以减少传输的数据量。 - 使用GZIP压缩可以减小网络传输的大小,提高性能。 综上所述,SSM框架中的JSON数据返回涉及SpringMVC的配置、Controller的编写、前端与后端的...
4. Filter过滤器:在Servlet之前或之后拦截请求,实现登录检查、GZIP压缩等功能。 5. RequestDispatcher:用于转发或重定向请求,比如从一个Servlet跳转到另一个Servlet或JSP页面。 通过实践和练习,你可以在一天内...
Servlet是Java平台上的一个核心技术,全称为Java Servlet,它是一种服务器端的Java应用程序,用于扩展Web服务器的功能,处理来自客户端(通常是Web浏览器)的HTTP请求,并返回响应。Servlet-4.1.34.jar是Java ...
8. **性能优化**:为了提高性能,服务器端可以使用压缩(如GZIP)来减少传输的数据量,同时客户端需要解压这些数据。此外,合理的缓存策略也可以减少不必要的网络请求。 9. **安全考虑**:在传输敏感数据时,应使用...
例如,CompressionFilter可能会检查响应的大小,如果超过一定阈值,则会使用GZIP等算法对内容进行压缩,以减少传输的数据量。 `beerV2_strutsV1.3`则涉及到Struts框架的应用。在Struts中,一个典型的流程是用户发送...
Java Servlet中的过滤器(Filter)是Java Web开发中一个非常重要的概念,它是Servlet API的一部分,主要用于在请求被发送到目标Servlet或JSP之前对请求进行预处理,以及在响应返回给客户端之前对响应进行后处理。...
Gzip是一种广泛使用的数据压缩格式,它能够有效地减小文件大小,从而加快了文件在网络上的传输速度。本文将详细介绍如何使用Gzip来打包JS和CSS文件,并在Java后台通过Filter实现解压缩。 首先,我们需要了解Gzip的...
10. **异步处理**:Servlet 3.0引入了异步处理能力,允许Servlet在`service()`方法中启动一个异步操作,然后返回给容器,等待后续事件完成后再进行处理。 在实际开发中,Servlet API与JSP(JavaServer Pages)常...
Servlet过滤器是Java Web开发中的一个重要组件,它允许开发者在请求到达Servlet之前或者响应离开Servlet之后进行拦截处理。本教程将深入讲解如何配置和使用Servlet过滤器,以及介绍五个经典的过滤器实例。 首先,让...
GZIP是一种广泛使用的数据压缩算法,它能够有效地减小HTTP响应的大小,从而提高网页加载速度,降低网络带宽的消耗。在Tomcat中,GZIP压缩通常通过一个过滤器(Filter)实现,该过滤器会在HTTP响应发送到客户端之前对...
过滤器是Servlet规范的一部分,它可以在请求到达目标Servlet或JSP之前,以及在响应返回给客户端之后处理请求和响应。WebLogic提供了名为`GZIPOutputStreamFilter`的内置过滤器,专门用于实现GZip压缩。 以下是配置...
Servlet通常与JSP配合使用,JSP负责展示视图,而Servlet则处理业务逻辑和数据操作。 在“jsp+servlet 万能模板”中,常见的架构模式是MVC(Model-View-Controller)。模型(Model)代表数据和业务逻辑,视图(View...
`ServletRequest`和`ServletResponse`分别代表请求和响应,用于获取和设置客户端的数据。 4. `getServletInfo()`: 返回关于Servlet的信息,如作者、版本等。 5. `destroy()`: 当Servlet不再需要时,容器调用此方法...
可以创建一个自定义的Filter,该Filter负责在将数据从EhCache返回给客户端之前对其进行gzip压缩。当数据经过Filter时,如果发现请求头中的`Accept-Encoding`字段包含`gzip`,则对数据进行压缩,并在响应头中添加`...
文件列表中提到的《JAVA算法100例_全源码.doc》和《数据结构与算法(JAVA语言版).pdf》表明学习Servlet的同时,了解和掌握基本的算法和数据结构也是很重要的,因为它们是编写高效Web应用的基础。《Servlet.pdf》...
在Java Web中,Servlet扮演着服务器端的中间件角色,接收HTTP请求,进行业务逻辑处理,然后返回结果。 2. **Servlet生命周期**:Servlet经历初始化、服务、销毁三个阶段。初始化阶段,Servlet被加载并实例化;服务...