//trim the milliseconds off the value since the header is only accurate down to the second
long lastModified = pageInfo.getCreated().getTime();
lastModified = TimeUnit.MILLISECONDS.toSeconds(lastModified);
lastModified = TimeUnit.SECONDS.toMillis(lastModified);
headers.add(new Header
headers.add(new Header
headers.add(new Header
headers.add(new Header
return pageInfo;
}
@Override
protected void writeResponse(HttpServletRequest request, HttpServletResponse response, PageInfo pageInfo)
throws IOException, DataFormatException, ResponseHeadersNotModifiableException {
final List
for (final Header< extends Serializable> header : headers) {
if ("ETag".equals(header.getName())) {
String requestIfNoneMatch = request.getHeader("If-None-Match");
if (header.getValue().equals(requestIfNoneMatch)) {
response.sendError(HttpServletResponse.SC_NOT_MODIFIED);
// use the same date we sent when we created the ETag the first time through
//response.setHeader("Last-Modified", request.getHeader("If-Modified-Since"));
return;
}
break;
}
if ("Last-Modified".equals(header.getName())) {
if (requestIfModifiedSince != -1) {
final Date requestDate = new Date(requestIfModifiedSince);
final Date pageInfoDate;
switch (header.getType()) {
case STRING:
pageInfoDate = this.getHttpDateFormatter().parseDateFromHttpDate((String)header.getValue());
break;
case DATE:
pageInfoDate = new Date((Long)header.getValue());
break;
default:
throw new IllegalArgumentException("Header " + header + " is not supported as type: " + header.getType());
}
if (!requestDate.before(pageInfoDate)) {
response.sendError(HttpServletResponse.SC_NOT_MODIFIED);
response.setHeader("Last-Modified", request.getHeader("If-Modified-Since"));
return;
}
}
}
}
super.writeResponse(request, response, pageInfo);
}
}
这个类对于缓存的内容的头信息 Last-Modified Expires Cache-Control ETag删除,替换成当前encache里面的系统信息,输出的时候也输出encache处理过的头信息,这样我们就不管浏览器的缓存处理了,只能等待encache的缓存过期。
4.PageFragmentCachingFilter的简单处理
[java]
protected PageInfo buildPage(final HttpServletRequest request, final HttpServletResponse response,