これがキャッシュフィルターの書き方です。魅力のように機能します。
JSF/サーブレット画面の静的コンテンツのパフォーマンスを向上させるためのキャッシュ フィルターの作成
web.xml に以下を追加します
<filter>
<filter-name>cache</filter-name>
<filter-class>au.com.webapp.config.CacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cache</filter-name>
<url-pattern>*.xhtml</url-pattern>
</filter-mapping>
au.com.webapp.config パッケージで、次のようにクラス CacheFilter を作成します。
package au.com.webapp.config;
import java.io.IOException;
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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CacheFilter implements Filter {
private static long maxAge = 86400 * 30; // 30 days in seconds
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
String uri = ((HttpServletRequest) request).getRequestURI();
if (uri.contains(".js") || uri.contains(".css") || uri.contains(".svg") || uri.contains(".gif")
|| uri.contains(".woff") || uri.contains(".png")) {
httpResponse.setHeader("Cache-Control", "max-age=" + maxAge);
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Cache Filter started: ");
}
@Override
public void destroy() {
}
}
画面がキャッシュを使用しているかどうかを確認する方法
コンテンツが既に gzip とキャッシュを使用しているかどうかを確認するには、Google Chromeブラウザで -> 画面を右クリック -> 検査 -> ネットワーク タブをクリック -> 画面を更新します。画像、アイコン、スタイルシートをクリックして、応答ヘッダーに次のように表示されるかどうかを確認します
Cache-Control:max-age=2592000
また、ページを更新したときに、要素のステータスが 200 (キャッシュから取得) ではなく 304 の場合は、完了です。
gzip などのその他のパフォーマンスの改善
gzip や JQuery UI コンポーネントなど、Web アプリケーションまたは Web サイトのパフォーマンスを大幅に変更できる追加の単純なパフォーマンス改善については、次のリンクを参照してください。
https://stackoverflow.com/a/35567464/5076414