java压缩html_java web应用中,怎样压缩响应的html文件

在这篇文章中,我们将学到怎样在java应用中压缩响应的html文件

1. 简介

现在,访问一个网站的页面大小对于访问速度和宽带需求是非常重要的。在这篇文章中,我们将使用[weblink url="http://code.google.com/p/htmlcompressor"]htmlcompressor[/weblink] 来压缩我们的java web项目,提高访问的效率。

我们这里采用maven来加载我们的 htmlcompressor:

maven的依赖关系:

javax

javaee-api

6.0

provided

com.googlecode.htmlcompressor

htmlcompressor

1.5.2

2. html 压缩

htmlcompressor 有很多配置选项。你可以在上面介绍的文章中的 htmlcompressor主页中看到。下面是一个简单的初始化例子: HtmlCompressor compressor = new HtmlCompressor(); 文中所声明的 htmlcompressor 是十分消耗资源的,所以每使用一次都应该重新初始化一个实例。并使他完成多个请求。

这里的 compressor只要不是static 生成,他就是线程安全的,你可以使用它来同时处理多个请求。

3. compression filter

我们这里将采用java web的过滤器来压缩我们的项目: Compression filter

package com.byteslounge.web.filter;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.annotation.WebFilter;

import javax.servlet.http.HttpServletResponse;

import com.googlecode.htmlcompressor.compressor.HtmlCompressor;

@WebFilter(

filterName = "CompressResponseFilter",

urlPatterns = { "/pages/*" }

)

public class CompressResponseFilter implements Filter {

private HtmlCompressor compressor;

@Override

public void doFilter(ServletRequest req, ServletResponse resp,

FilterChain chain) throws IOException, ServletException {

CharResponseWrapper responseWrapper = new CharResponseWrapper(

(HttpServletResponse) resp);

chain.doFilter(req, responseWrapper);

String servletResponse = new String(responseWrapper.toString());

resp.getWriter().write(compressor.compress(servletResponse));

}

@Override

public void init(FilterConfig config) throws ServletException {

compressor = new HtmlCompressor();

compressor.setCompressCss(true);

compressor.setCompressJavaScript(true);

}

@Override

public void destroy() {

}

}

可以在上面的过滤器中看到,我们配置了CSS和JavaScript的压缩。 文章中不包括fileter的所有细节。但你可以猜到,当文件经过这个过滤器以后,会在chain.doFilter()之后将响应信息返回客户端。所以我们需要重写一下这个方法,我们应在在返回之前就将文件压缩。 这是基于HttpServletResponseWrapper 实现。使用CharResponseWrapper 的定义如下:

CharResponseWrapper

package com.byteslounge.web.filter;

import java.io.CharArrayWriter;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpServletResponseWrapper;

public class CharResponseWrapper extends HttpServletResponseWrapper {

private final CharArrayWriter output;

@Override

public String toString() {

return output.toString();

}

public CharResponseWrapper(HttpServletResponse response) {

super(response);

output = new CharArrayWriter();

}

@Override

public PrintWriter getWriter() {

return new PrintWriter(output);

}

}

经过我们的重写,我们能在发送到客户端之前将文件压缩。

4. 示例下载

下面给出实例项目源码[weblink url="http://download.csdn.net/detail/yyw258520/6872077"] how-to-compress-response-html-in-java-web-application.zip[/weblink]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值