静的ファイル (Resource ファイル) のキャッシュについて
jsファイルやcssファイルなどの静的ファイルは,一度サーバーを立ち上げるとサーバーにキャッシュが残ってしまうため,静的ファイルに変更を加えたとしても前のバージョンが適用されてしまうということが多々あります.
Webアプリケーションが運用できるまで出来上がっていればよいのですが,開発中だといちいちサーバーをクリーンしなければいけないのでかなり面倒ですね.
僕もこの壁に当たったことがあり,自動的に静的ファイルが更新されるようにクラスを作成しました.
1つ重要なのが,静的ファイルに異なるパラメータを渡すと,違うファイルとして扱われるということです.
以下に例を示します.
style.css
style.css?20190526
実はこの2つのファイルは,参照は同じだけど違うファイルとしてみなされます.
これを利用して,自動的に現在時刻をパラメータとして渡せば,新しいバージョンの静的ファイルが適用されるというわけです.
以下のようなクラスを作成します.
この戻り値が,パラメータ付き静的ファイル名となります.
あとは,これをアプリケーションスコープに格納すれば万事OKです.
HTML側で格納された値を取り出しましょう.
今回はThymeleafを使って取り出してあります.
cssの配置は
webapp -> resources -> css -> ~.css
って感じです.(maven)
とまぁ,自作で静的ファイルにパラメータを渡していたわけですが...
数週間後にSpring管理下でできる実装クラスを見つけてしまいました笑
VersionResoruceResolverという実装クラスは,その名の通りリソースファイルのバージョン管理をしてくれるクラスです.
原理はさっき僕が作ったパラメータ付きの静的ファイルを作るのと同じで,乱数がcssファイルの末尾に自動的に付加されます.
web.xmlとservlet.xmlの設定は以下のようになります.
web.xmlではリソースファイルのURLフィルターを追加し,servlet.xmlではVersionResourceResolverを実装します.
もちろんJavaファイルでも実装できますよ!
あとは,呼び出すだけです.
今回はThymeleafで実装したのでよくわからない感じでcssを参照することになりましたが,jspの場合はもう少し簡単なコードになってた気がします.
結論:Spring最強