GZIPは/seam/resource/*を圧縮していません


容器にgzipを設定しても/seam/resource/*を圧縮することはできません.ブロックを使用して圧縮を実現する必要があります.ie 5でも発見されました.xで/seam/resource/*を圧縮し、解凍後jsファイルが間違っています.これはIEの問題です.以下は私が使用しているコードです.

public class GzipSeamResourceServlet implements Filter {
	
	public static final String gzip="gzip";
	public static final String transferEncoding = "transferEncoding";
	
	public void init(FilterConfig filterConfig) {
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		
		HttpServletRequest httpRequest = (HttpServletRequest) request;

		HttpSession session = httpRequest.getSession();
		
		if (session.getAttribute(gzip) == null) {
			
			final String gzipStr = getGZIPEncoding((HttpServletRequest) request);
			if(gzipStr!=null){
				session.setAttribute(transferEncoding,gzipStr );
				session.setAttribute(gzip,true );
				String s = ((HttpServletRequest)request).getHeader("user-agent") ;
				if((s.indexOf("MSIE 5.")+s.indexOf("MSIE 4.")+s.indexOf("MSIE 3."))>0){
					session.setAttribute(gzip,false );
					YcEJB_INFO.logger.info("      :"+s);
				}
			}else{
				session.setAttribute(gzip,false );
			}
		}
		

		if ((Boolean)session.getAttribute(gzip) ) {
			HttpServletResponse hsr=((HttpServletResponse) response);
			hsr.setHeader("Content-Encoding", (String)session.getAttribute(transferEncoding));
			GZIPEncodableResponse wrappedResponse = new GZIPEncodableResponse(hsr);
			chain.doFilter(request, wrappedResponse);
			wrappedResponse.flush();
		} else {
			chain.doFilter(request, response);

		}
	}

	public void destroy() {
	}

	private static String getGZIPEncoding(HttpServletRequest request) {
		String acceptEncoding = request.getHeader("Accept-Encoding");
		if (acceptEncoding == null)
			return null;
		acceptEncoding = acceptEncoding.toLowerCase();
		if (acceptEncoding.indexOf("x-gzip") >= 0) {
			return "x-gzip";
		}
		if (acceptEncoding.indexOf("gzip") >= 0) {
			return "gzip";
		}
		return null;
	}

	private class GZIPEncodableResponse extends HttpServletResponseWrapper {
		private GZIPServletStream wrappedOut;

		public GZIPEncodableResponse(HttpServletResponse response) throws IOException {
			super(response);
			wrappedOut = new GZIPServletStream(response.getOutputStream());
		}

		public ServletOutputStream getOutputStream() throws IOException {
			return wrappedOut;
		}

		private PrintWriter wrappedWriter;

		public PrintWriter getWriter() throws IOException {
			if (wrappedWriter == null) {
				wrappedWriter = new PrintWriter(new OutputStreamWriter(getOutputStream(), getCharacterEncoding()));
			}
			return wrappedWriter;
		}

		public void flush() throws IOException {
			if (wrappedWriter != null) {
				wrappedWriter.flush();
			}
			wrappedOut.finish();
		}
	}

	private class GZIPServletStream extends ServletOutputStream {
		private GZIPOutputStream outputStream;

		public GZIPServletStream(OutputStream source) throws IOException {
			outputStream = new GZIPOutputStream(source);
		}

		public void finish() throws IOException {
			outputStream.finish();
		}

		public void write(byte[] buf) throws IOException {
			outputStream.write(buf);
		}

		public void write(byte[] buf, int off, int len) throws IOException {
			outputStream.write(buf, off, len);
		}

		public void write(int c) throws IOException {
			outputStream.write(c);
		}

		public void flush() throws IOException {
			outputStream.flush();
		}

		public void close() throws IOException {
			outputStream.close();
		}
	}

}

web.ini増加

	<filter>
		<filter-name>GZIPEncoder</filter-name>
		<filter-class>filters.GzipSeamResourceServlet</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>GZIPEncoder</filter-name>
		<url-pattern>/seam/resource/*</url-pattern>
	</filter-mapping>