java过滤器方式压缩js,css的静态文件gzip压缩用法

java | 2019-09-13 10:02:39

现在的网页都很好看,也很人性化,这就需要开发更多的js来做效果,太多的js又会导致页面加载变慢。于是有的人就想出了把js,css等文件在访问的时候压缩后发送给客户端,比如说启动tomcat的压缩功能(这种方法本站有篇文章讲得很清楚自己去搜索),然后客户端来解压,这是一个很好的办法。但有个问题,动态压缩,加重了服务器的负担。如是在下就用到了一个方法,静态压缩方法:


      1.先把js,css用压缩软件压缩,选择gzip,压缩好了就放在那里。
      2.在页面上调用js页面或css时填你压缩后的文件。
      3.压缩好了,接下来就要告诉浏览器文件是压缩过的,这样浏览器才会解压啊。用filter写入header下面是java代码package filter;


import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 给gzip压缩后的文件添加额外Header的过滤器
*/
public class GzipFilter implements Filter {
        private Map<String, String> headers = new HashMap<String, String>();
        public void init(FilterConfig config) throws ServletException {
                // 获取额外配置的header
                String headersStr = config.getInitParameter("headers");
                String[] headers = headersStr.split(",");
                for (int i = 0; i < headers.length; i++) {
                        String[] temp = headers.split("=");
                        this.headers.put(temp[0].trim(), temp[1].trim());
                }
        }
        public void doFilter(ServletRequest req, ServletResponse res,
                        FilterChain chain) throws IOException, ServletException {
                if (req instanceof HttpServletRequest) {
                        // 仅对Http请求添加该过滤器的处理
                        doFilter((HttpServletRequest) req, (HttpServletResponse) res, chain);
                } else {
                        chain.doFilter(req, res);
                }
        }
        public void doFilter(HttpServletRequest request,
                        HttpServletResponse response, FilterChain chain)
                        throws IOException, ServletException {
                // 将额外配置的header添加到当前Response
                for (Iterator<Map.Entry<String, String>> it = headers.entrySet().iterator(); it.hasNext();) {
                        Map.Entry<String,String> entry = (Map.Entry<String,String>) it.next();
                        response.addHeader((String) entry.getKey(),(String) entry.getValue());
                }
                chain.doFilter(request, response);
        }
        @Override
        public void destroy() {
                // TODO Auto-generated method stub
        }
}

相比于tomcat配置压缩静态文件,这种方式的好处是可以更加自由的自定义要压缩的文件。

登录后即可回复 登录 | 注册
    
关注编程学问公众号