Как установить фильтр, который будет применяться ТОЛЬКО к контенту типа «html / text»?

1

Я написал следующий код.

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;

public class CacheFilter implements Filter {

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

    HttpServletResponse resp = (HttpServletResponse) response;
    resp.setHeader("Cache-Control", "no-store, no-cache,must-revalidate,max-age=0");
    resp.setHeader("Pragma", "no-cache");

    chain.doFilter(request, response);
}

public void destroy() {
//delegate.destroy();
}
public void init(FilterConfig filterConfig) {
//delegate.destroy();
}
}

и здесь код сопоставления в файле web.xml

  <filter>
     <filter-name>CacheFilter</filter-name>
     <filter-class>com.util.CacheFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>CacheFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

Эта вещь работает, но этот фильтр применяется для всего содержимого, что замедляет работу моего сайта. Я хочу, чтобы этот фильтр применялся только для типа контента "text/html". Это может быть легко достигнуто через ExpiresFilter, как это

 <init-param>
     <param-name>ExpiresByType text/html</param-name>
     <param-value>access plus 0 seconds</param-value>
</init-param>

но как добиться этого в этом коде? Буду признателен за вашу самую раннюю помощь.

Теги:
filter
cache-control
servlet-filters
content-type

1 ответ

0

Я думаю, вам нужно написать Response Wrapper, чтобы изменить ответ от servlet-
См. Это links- http://www.java2s.com/Tutorial/Java/0400__Servlet/Filterthatusesaresponsewrappertoconvertalloutputtouppercase.htm

http://sqltech.cl/doc/oas10gR31/web.1013/b28959/filters.htm

http://software.it168.com/manual/servlet/0596005725_jsvltjspckbk-chp-19-sect-7.html

-Thanks

Ещё вопросы

Сообщество Overcoder
Наверх
Меню