通过filter实现对输出内容的压缩处理

在实际当中大量的js和页面内容使得页面呈现要花很长时间,特别是使用ext。如是找到这种办法去处理一下,还没有测试有多大的优化性能。[color=red]全部实现代码在附件中[/color]

public class CompressionFilter implements Filter {
// 适合在上JBoss, Jetty, JOnAS, OC4J, Orion,and Tomcat,其它的可能有bug
static boolean useFilter = true;

public static final String ENCODING = "UTF-8";

private static final String _GZIP = "gzip";

private static final String _ALREADY_FILTERED = CompressionFilter.class.getName() + "_ALREADY_FILTERED";

private static final String _COMPRESS = "compress";

public static String[] BOOLEANS = {"true", "t", "y", "on", "1"};

private static Log _log = LogFactory.getLog(CompressionFilter.class);

public void init(FilterConfig config) {
}

public void doFilter(
ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {

if (_log.isDebugEnabled()) {
if (useFilter) {
_log.debug("Compression is enabled");
}
else {
_log.debug("Compression is disabled");
}
}

HttpServletRequest httpReq = (HttpServletRequest)req;
HttpServletResponse httpRes = (HttpServletResponse)res;

String completeURL = httpReq.getRequestURL().toString();

if (useFilter && isCompress(httpReq) && !isInclude(httpReq) &&
acceptsGzip(httpReq) && !isAlreadyFiltered(httpReq)) {

if (_log.isDebugEnabled()) {
_log.debug("Compressing " + completeURL);
}

httpReq.setAttribute(_ALREADY_FILTERED, Boolean.TRUE);

CompressionResponse compressionResponse =
new CompressionResponse(httpRes);

chain.doFilter(req, compressionResponse);

compressionResponse.finishResponse();
}
else {
if (_log.isDebugEnabled()) {
_log.debug("Not compressing " + completeURL);
}

chain.doFilter(req, res);
}
}

public void destroy() {
}

protected boolean isAlreadyFiltered(HttpServletRequest req) {
if (req.getAttribute(_ALREADY_FILTERED) != null) {
return true;
}
else {
return false;
}
}

protected boolean isCompress(HttpServletRequest req) {
if (!getBoolean(req.getParameter(_COMPRESS), true)) {
return false;
}
else {
return true;
}
}

protected boolean isInclude(HttpServletRequest req) {
String uri = (String)req.getAttribute("javax.servlet.include.request_uri");
if (uri == null) {
return false;
}
else {
return true;
}
}

protected boolean acceptsGzip(HttpServletRequest req) {
String acceptEncoding = req.getHeader("Accept-Encoding");
if ((acceptEncoding != null) &&
(acceptEncoding.indexOf(_GZIP) != -1)) {
return true;
}
else {
return false;
}
}

protected boolean getBoolean(String value, boolean defaultValue) {
if (value != null) {
try {
value = value.trim();

if (value.equalsIgnoreCase(BOOLEANS[0]) ||
value.equalsIgnoreCase(BOOLEANS[1]) ||
value.equalsIgnoreCase(BOOLEANS[2]) ||
value.equalsIgnoreCase(BOOLEANS[3]) ||
value.equalsIgnoreCase(BOOLEANS[4])) {

return true;
}
else {
return false;
}
}
catch (Exception e) {
}
}

return defaultValue;
}
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值