现在的网页都很好看,也很人性化,这就需要开发更多的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配置压缩静态文件,这种方式的好处是可以更加自由的自定义要压缩的文件。