我想Expires为所有image/*和设置标题text/css。我在做这个Filter。然而:
Expires
image/*
text/css
Filter
chain.doFilter(..)
我可以使用所请求资源的扩展名,但是由于某些css文件是由richfaces通过从jar文件中获取它们而生成的,因此文件名不是x.css,而是/xx/yy/zz.xcss/DATB/...。
x.css
/xx/yy/zz.xcss/DATB/...
因此,有没有一种方法可以在提交响应之前获取Content-type。
是的,实施HttpServletResponseWrapper并覆盖setContentType()。
HttpServletResponseWrapper
setContentType()
class AddExpiresHeader extends HttpServletResponseWrapper { private static final long ONE_WEEK_IN_MILLIS = 604800000L; public AddExpiresHeader(HttpServletResponse response) { super(response); } public void setContentType(String type) { if (type.startsWith("text") || type.startsWith("image")) { super.setDateHeader("Expires", System.currentTimeMillis() + ONE_WEEK_IN_MILLIS); } super.setContentType(type); } }
并如下使用它:
chain.doFilter(request, new AddExpiresHeader((HttpServletResponse) response));