Oi pessoal, tenho uma aplicação jsf rodando no glassfish 4.
O problema é que estou tentando ativar o cache para recursos estáticos (css, png, js) e não estou conseguindo.
Eu coloquei a classe no projeto (conforme orientação da oracle):
`package iwc;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
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.HttpServletResponse;
public class ExpiresFilter implements Filter {
private FilterConfig filterConfig;
private String expires;
private long nextDeploymentTime;
public ExpiresFilter() {
expires = nextDeploymentTime();
}
private String nextDeploymentTime() {
// assume next deployment is M-F at 09:45
Calendar c = Calendar.getInstance();
int dayOffset = 1;
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) {
dayOffset+=2;
}
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
dayOffset++;
}
c.add(Calendar.DAY_OF_MONTH, dayOffset);
c.set(c.get(Calendar.YEAR)+2, c.get(Calendar.MONTH),
c.get(Calendar.DAY_OF_MONTH), 9, 45);
nextDeploymentTime = c.getTimeInMillis();
String pattern = "EEE, dd MMM yyyy HH:mm:ss z";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
return sdf.format(c.getTime());
}
private void addCacheHeaders(ServletRequest request, ServletResponse response)
throws IOException, ServletException {
HttpServletResponse sr = (HttpServletResponse) response;
sr.setHeader("Expires", expires);
long now = (new Date()).getTime();
long expireTime = nextDeploymentTime - now;
expireTime /= 1000;
sr.setHeader("Cache-Control", "max-age="+
Long.toString(expireTime)+";public;must-revalidate;");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
addCacheHeaders(request, response);
chain.doFilter(request, response);
}
private FilterConfig getFilterConfig() {
return filterConfig;
}
private void setFilterConfig(FilterConfig filterConfig) {
this.filterConfig = filterConfig;
}
public void destroy() {
}
public void init(FilterConfig filterConfig) {
setFilterConfig(filterConfig);
}
@Override
public String toString() {
if (getFilterConfig() == null) {
return ("ExpiresFilter()");
}
StringBuffer sb = new StringBuffer("ExpiresFilter(");
sb.append(getFilterConfig());
sb.append(")");
return (sb.toString());
}
}`
Adicionei o filter no web.xml:
<filter> <filter-name>ExpiresFilter</filter-name> <filter-class>iwc.ExpiresFilter</filter-class> </filter> <filter-mapping> <filter-name>ExpiresFilter</filter-name> <url-pattern>/resources/\*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
Mas continua não fazendo cache (Imagem anexo)
O que está faltando ser feito??

