spring-boot における静的ファイルのアクセスについてのメモです。
Spring boot における静的ファイルの配置可能な場所
spring boot は、デフォルトの設定だと、
projectDirectory/src/main/resources/META-INF/resources/
projectDirectory/src/main/resources/
projectDirectory/src/main/resources/static/
projectDirectory/src/main/resources/public/
の下に配置することで、アクセスが可能となる。
例として、
それぞれのディレクトリに、下記のようにHTMLを配置した場合
project root
└─ src
└─ main
└─ resources
├─ static
| └─ html
| └─ 1.html
├─ public
| └─ html
| └─ 2.html
├─ resources
| └─ html
| └─ 3.html
└─ META-INF
└─ resources
└─ html
└─ 4.html
それぞれのHTMLへは、
http://localhost:8080/1.html
http://localhost:8080/2.html
http://localhost:8080/3.html
http://localhost:8080/4.html
という形でアクセスが可能となる。
Spring boot における静的ファイルのアクセス優先順位
下記のように、それぞれのディレクトリに同じ名前のファイルが存在した場合
project root
└─ src
└─ main
└─ resources
├─ static
| └─ html
| └─ test.html
├─ public
| └─ html
| └─ test.html
├─ resources
| └─ html
| └─ test.html
└─ META-INF
└─ resources
└─ html
└─ test.html
http://localhost:8080/test.html
とアクセスすると、
META-INF/resources/html/test.html
が返される
静的ファイルの検索順は、
resources/META-INF/resources/
resources/
resources/static/
resources/public/
の順で検索され、先に見つかったものが画面に返される。
プロジェクトで使用する場合について考えてみる
resources/META-INF/resources/
resources/
は、設定ファイルも置かれるので、静的ファイルを配置するには、適していないと思われる。
実際にプロジェクトで使用する場合には、
resources/static/
resources/public/
に配置することになるかと思う。
名称的に、
resources/static/
に、ライブラリなど変化しないもの。
resources/public/
プロジェクト固有のcssやjs などを配置
って感じだろうか。。。
うーむ。この辺ベストプラクティス的なものを知らないので、これでいいのかわからん。
教えて知ってる人( ;∀;)