`
独善其身008
  • 浏览: 171704 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论
阅读更多
过滤器 filter
package sttms.backend.view.filter;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

public class GZipFilter implements Filter {

public void destroy() {
// TODO Auto-generated method stub

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse resp = (HttpServletResponse) response;
Wrapper wrapper = new Wrapper(resp);
chain.doFilter(request, wrapper);
byte[] gzipData = gzip(wrapper.getResponseData());
resp.addHeader("Content-Encoding", "gzip");
resp.setContentLength(gzipData.length);
ServletOutputStream output = response.getOutputStream();
output.write(gzipData);
output.flush();
}

public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}

private byte[] gzip(byte[] data) {
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);
GZIPOutputStream output = null;
try {
output = new GZIPOutputStream(byteOutput);
output.write(data);
} catch (IOException e) {
} finally {
try {
output.close();
} catch (IOException e) {
}
}
return byteOutput.toByteArray();
}

}

2.Wrapper.java
package sttms.backend.view.filter;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

public class Wrapper extends HttpServletResponseWrapper
{
public static final int OT_NONE = 0, OT_WRITER = 1, OT_STREAM = 2;
private int outputType = OT_NONE;
private ServletOutputStream output = null;
private PrintWriter writer = null;
private ByteArrayOutputStream buffer = null;
public Wrapper(HttpServletResponse resp) throws IOException {
super(resp);
buffer = new ByteArrayOutputStream();
}
public PrintWriter getWriter() throws IOException {
if(outputType==OT_STREAM)
throw new IllegalStateException();
else if(outputType==OT_WRITER)
return writer;
else {
outputType = OT_WRITER;
writer = new PrintWriter(new OutputStreamWriter(buffer, getCharacterEncoding()));
return writer;
}
}
public ServletOutputStream getOutputStream() throws IOException {
if(outputType==OT_WRITER)
throw new IllegalStateException();
else if(outputType==OT_STREAM)
return output;
else {
outputType = OT_STREAM;
output = new WrappedOutputStream(buffer);
return output;
}
}
public void flushBuffer() throws IOException {
if(outputType==OT_WRITER)
writer.flush();
if(outputType==OT_STREAM)
output.flush();
}
public void reset() {
outputType = OT_NONE;
buffer.reset();
}
public byte[] getResponseData() throws IOException {
flushBuffer();
return buffer.toByteArray();

}
class WrappedOutputStream extends ServletOutputStream {
private ByteArrayOutputStream buffer;
public WrappedOutputStream(ByteArrayOutputStream buffer) {
this.buffer = buffer;
}
public void write(int b) throws IOException {
buffer.write(b);
}
public byte[] toByteArray() {
return buffer.toByteArray();
}
}
}

3.web.xml 配置
<filter>
<filter-name>ecsideExport</filter-name>
<filter-class>sttms.backend.view.filter.GZipFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>ecsideExport</filter-name>
    <url-pattern>*.xml</url-pattern>
    <url-pattern>*.js</url-pattern>
    <url-pattern>*.css</url-pattern>
    <url-pattern>*.html</url-pattern>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>*.action</url-pattern>
    <url-pattern>*.jpg</url-pattern>
    <url-pattern>*.gif</url-pattern>
    <url-pattern>*.png</url-pattern>
  </filter-mapping>
分享到:
评论
1 楼 kettas 2012-08-21  
这样就能实现压缩?可以加点文字说明吗?

相关推荐

    JAVA批量压缩JS

    本篇文章将深入探讨“JAVA批量压缩JS”的主题,以及如何利用工具或自定义程序来实现对JavaScript和CSS的压缩,从而提高网页加载速度和整体性能。 一、JavaScript与CSS压缩的重要性 1. 减少文件大小:未压缩的JS和...

    压缩加密JS脚本C#源码

    这样的工具在开发Web应用程序时非常有用,因为压缩JS可以减少文件大小,提高网页加载速度,而加密则可以保护代码不被轻易读取或修改。 在描述中提到的“自动压缩JS脚本”,意味着该源码实现了自动化处理功能,能够...

    java开发中压缩js,css文件

    首先,我们要了解为什么要压缩js和css文件。在Web应用中,每次用户访问页面时,浏览器都需要下载所有的外部资源,包括js和css文件。如果这些文件较大,会延长加载时间,导致用户体验下降。压缩文件可以显著减少网络...

    maven+yui压缩js,css文件

    将YUI Compressor集成到Maven项目中,可以实现自动化压缩JS和CSS文件的功能,这在部署前是一个非常重要的步骤,可以显著减小文件大小,从而加速网页加载。 ### 配置Maven插件 在给定的部分内容中,可以看到一个`...

    使用Ant构建批量压缩js、css文件脚本

    为了实现批量压缩js和css文件,我们需要引入几个Ant的贡献库(Contrib tasks),其中包括YUI Compressor。YUI Compressor是由Yahoo开发的一款高效的JavaScript和CSS压缩工具,它可以删除代码中的空格、注释,并进行...

    一个专门用来压缩JAVASCRIPT代码的工具

    为了解决这个问题,出现了专门的JavaScript压缩工具,如JsMinGUI.exe,用于优化和压缩JavaScript代码。 JsMinGUI是一个图形用户界面(GUI)版本的JavaScript压缩工具,它基于Doug Crockford的JsMin算法。这个工具的...

    gzip压缩js,csss文件

    总结来说,通过gzip压缩js和css文件,可以有效减小文件大小,提高网页加载速度。在Windows环境下,可以利用CMD和gzip命令进行文件压缩,而在服务器端,需要配置相应的设置以支持gzip压缩。理解并掌握这一技巧,对于...

    压缩JS和CSS工具

    因此,为了提升网页性能,开发者通常会使用"压缩JS和CSS工具"对这些文件进行优化,减少它们的大小,从而加快页面加载速度。本文将深入探讨JS和CSS压缩的原理、方法以及TBCompressor这款工具的应用。 JS和CSS压缩的...

    php gzip 压缩js或css

    这个文件可能包含了读取、压缩JS代码并返回给浏览器的逻辑。例如: ```php header('Content-Type: application/javascript'); // 检查客户端是否支持gzip if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos...

    使用JSA压缩js,包括build文件,JSA的JAR包

    使用JSA压缩js的步骤如下: 1. **获取JSA JAR包**:首先,你需要下载JSA的最新版本JAR文件,这通常可以从项目官方网站或者通过GitHub等开源社区获取。 2. **创建或修改build.xml**:`build.xml`是Ant构建工具的...

    javascript批量压缩工具(JsBatCompress)

    总的来说,JsBatCompress是前端开发中不可或缺的辅助工具,通过批量压缩JS文件,有效地提升了项目的性能和效率。合理使用这类工具,可以显著改善网站的加载速度,提升用户体验,并且在项目管理上也能带来不少便利。

    gzip批量压缩js为gzjs文件

    首先,我们需要理解“gzip批量压缩js为gzjs文件”的概念。这里的“gzjs”并不是一个标准的文件格式,而是将js文件通过Gzip压缩后得到的.gz文件与原始.js文件名相结合的一种命名约定。通常,Gzip压缩后的文件会保留...

    Js压缩工具 对JS文件压缩,缩小文件大小

    为了解决这个问题,"Js压缩工具"应运而生,它能有效地压缩JS文件,减少文件大小,从而提升页面的加载速度。 JS压缩的主要原理是通过删除不必要的空格、换行符和注释,以及通过变量和函数的混淆来减小文件体积。这种...

    压缩CSS/JS等文件的工具

    压缩JS文件的原理类似,但更复杂,因为它需要考虑到代码的可执行性。JS压缩通常包括变量名混淆、去除注释和空白、以及优化代码结构。这些操作可以在不改变代码功能的情况下,大幅度减小文件大小。YUI Compressor也能...

    IDEA类软件,js压缩插件

    "IDEA类软件,js压缩插件" 提供了一种便捷的方式来优化前端项目中的JavaScript(js)和SCSS(一种预处理器CSS的语法)文件,通过自动化压缩来减少文件大小,从而加快页面加载速度,提高用户体验。这款插件适用于那些...

    压缩 jscss

    【标题】"压缩 jscss" 涉及到的知识点主要集中在前端开发中的代码优化与压缩,特别是针对JavaScript (JS) 和 Cascading Style Sheets (CSS) 文件的处理。这一工具因其高效性和用户友好性获得了广泛的认可和使用。 ...

    google的批量压缩JS工具

    Google为此提供了一款批量压缩JS工具,旨在帮助开发者高效地处理大量JS文件。 这款工具主要基于Google的 Closure Compiler 和 UglifyJS 等知名压缩库。Closure Compiler 是一个强大的JavaScript编译器,它能够将源...

    压缩js和css,优化前端资源占用案例

    首先,我们需要理解为什么需要压缩js和css。在未压缩的状态下,这些文件通常包含了大量的空白字符、注释以及可读性较高的代码结构,这无疑增加了文件大小。随着网页复杂性的增加,这些文件可能会变得相当庞大,导致...

    压缩 js脚本 或 css样式表

    压缩js和css文件是一种常见的前端优化策略,其目标是通过减少代码中的冗余部分来缩小文件大小。 yuicompressor是本文提到的一个工具,它是由YUI(Yahoo! User Interface Library)团队开发的开源压缩工具,专门用于...

    JSA压缩javascript

    JSA 压缩 javascript

Global site tag (gtag.js) - Google Analytics