package com.hundsun.jresplus.web.cache;
import java.io.Serializable;
import java.util.Collection;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 响应工具类
* 参考ehcache
* @author XIE
*
*/
public class ResponseUtil {
private static final Logger LOG = LoggerFactory
.getLogger(ResponseUtil.class);
private static final int EMPTY_GZIPPED_CONTENT_SIZE = 20;
public static boolean shouldGzippedBodyBeZero(byte[] compressedBytes,
HttpServletRequest request) {
if (compressedBytes.length == EMPTY_GZIPPED_CONTENT_SIZE) {
if (LOG.isDebugEnabled()) {
LOG.debug(request.getRequestURL()
+ " resulted in an empty response.");
}
return true;
}
return false;
}
public static boolean shouldBodyBeZero(HttpServletRequest request,
int responseStatus) {
if (responseStatus == 204) {
if (LOG.isDebugEnabled()) {
LOG.debug(request.getRequestURL()
+ " resulted in a "
+ 204
+ " response. Removing message body in accordance with RFC2616.");
}
return true;
}
if (responseStatus == 304) {
if (LOG.isDebugEnabled()) {
LOG.debug(request.getRequestURL()
+ " resulted in a "
+ 304
+ " response. Removing message body in accordance with RFC2616.");
}
return true;
}
return false;
}
public static void addGzipHeader(HttpServletResponse response) {
boolean containsEncoding = response.containsHeader("Content-Encoding");
if (containsEncoding) {
response.setHeader("Content-Encoding", "gzip");
}
}
public static void addVaryAcceptEncoding(PageResponseWrapper wrapper) {
Collection<PageHeader<? extends Serializable>> headers = wrapper
.getAllHeaders();
PageHeader<? extends Serializable> varyHeader = null;
for (PageHeader<? extends Serializable> header : headers) {
if (header.getName().equals("Vary")) {
varyHeader = header;
break;
}
}
if (varyHeader == null) {
wrapper.setHeader("Vary", "Accept-Encoding");
} else {
String varyValue = varyHeader.getValue().toString();
if ((!varyValue.equals("*"))
&& (!varyValue.contains("Accept-Encoding")))
wrapper.setHeader("Vary", varyValue + ",Accept-Encoding");
}
}
}