質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

2回答

15720閲覧

SpringBoot2で静的コンテンツ(cssなど)が読み込めない。404が出てしまう問題について

spring_boot

総合スコア12

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

1クリップ

投稿2018/09/29 05:56

編集2018/09/29 16:27

SpringBootにてcssが読み込めません。あらゆる記事の情報を試しました失敗でした。試したこと(太文字にしてます)の一覧を書きますので他にも方法があるようならぜひとも教えてください。もしくは該当のドキュメントでもあればよいのですが私が探したところどこにも載っておりませんでした。この件に関するSpringのドキュメントがあるようならリンクをいただけると大変助かります。

現在のファイル配置は
イメージ説明
以上のようになっています。

Bootstrap4の参考例をそのまま反映させようとしました。
これまでのところ1枚も読み取れません。

エラー画面
404が出てしまいます。

http://localhost:8080/css/album.cssに直接アクセスしても404

他の記事でstaticをつけるようにあったので

http://localhost:8080/static/css/album.css
にアクセス
したがこれも404

resourcesの下にさらにresourcesを作るとあったのでこれも試しましたが失敗してます。

ちなみにhtmlはthymeleafを使っていて

html

1<!doctype html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<html lang="jp"> 4 <head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 7 <meta name="description" content=""> 8 <meta name="author" content=""> 9 <link rel="icon" href="../../../../favicon.ico"> 10 11 <h1 th:text="${title}">ようこそ</h1> 12 13 <!-- Bootstrap core CSS --> 14 <link href="../../dist/css/bootstrap.min.css" th:href="@{/bootstrap/css/bootstrap.min.css}" rel="stylesheet"/> 15 <link th:href="@{/static/css/color.css}" rel="stylesheet"/> 16 <!-- Custom styles for this template --> 17 <link href="album.css" th:href="@{/css/album.css}" rel="stylesheet" media="screen" /> 18 </head> 19 20 21 <body> 22省略 23 </body> 24 <!-- Bootstrap core JavaScript 25 ================================================== --> 26 <!-- Placed at the end of the document so the pages load faster --> 27 <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> 28 <script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery-slim.min.js"></script>')</script> 29 <script src="../../assets/js/vendor/popper.min.js" th:src="@{/js/popper.min.js}"></script> 30 <script src="../../dist/js/bootstrap.min.js" th:src="@{/bootstrap/bootstrap.min.js}"></script> 31 <script src="../../assets/js/vendor/holder.min.js" th:src="@{/bootstrap/bootstrap.min.js}"></script> 32 </body> 33</html> 34

上記のようになっています。コントローラからのアクセスは可能です。
出力されたhtmlは
イメージ説明
上記のようになっています。

デフォルトでstaticフォルダにアクセスできないという記事を発見しWebSecurityConfigurerAdapterを拡張して以下のように設定。

java

1 2@Configuration 3@EnableWebSecurity 4public class DemoSecurityConfig extends WebSecurityConfigurerAdapter { 5 6 @Autowired 7 private UserInfoService userInfoService; 8 9 //@Override 10 public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 11 configurer.enable(); 12 } 13 14 //@Override 15 public void addResourceHandlers(ResourceHandlerRegistry registry) { 16 registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); 17 } 18 19 @Override 20 protected void configure(AuthenticationManagerBuilder auth) throws Exception { 21 auth.authenticationProvider(createAuthProvider()); 22 23 } 24 25 26 27 @Override 28 protected void configure(HttpSecurity http) throws Exception { 29 30 http.authorizeRequests() 31 .antMatchers("/register/**").permitAll()//**はそれより下の階層全て 32 .anyRequest().authenticated() 33 .and() 34 .formLogin() 35 .loginPage("/showMyLoginPage") 36 .loginProcessingUrl("/authenticateTheUser") 37 .permitAll() 38 .and() 39 .logout().permitAll() 40 .and() 41 .exceptionHandling().accessDeniedPage("/access-denied"); 42 43 } 44 45 @Override 46 public void configure(WebSecurity web) { 47 web.ignoring().antMatchers("/css/**", "/js/**", "/img/**","/bootstrap/**"); 48 } 49 50 51 52 53 54}

java

1 public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 2 configurer.enable(); 3 } 4 5 //@Override 6 public void addResourceHandlers(ResourceHandlerRegistry registry) { 7 registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); 8 }

上記コードでアクセス可能になるらしいが失敗。

また、配置場所自体をsrc/main/webapp/resourcesに変更すると動作するという記事を発見し試しましたが失敗。

そもそも静的コンテンツへのアクセスなんて大事な項目がドキュメントですぐに見つからないのはどういうことなんでしょう。
解決策のヒントがあるという方はぜひともコメントをお願いいたします!

追記
以下のようなエラーがでております。

2018-09-29 15:49:16.461 WARN 10836 --- [nio-8080-exec-1] o.s.web.servlet.PageNotFound : No mapping found for HTTP request with URI [/bootstrap/css/bootstrap.min.css] in DispatcherServlet with name 'dispatcherServlet'

2018-09-29 15:49:16.463 WARN 10836 --- [nio-8080-exec-3] o.s.web.servlet.PageNotFound : No mapping found for HTTP request with URI [/css/album.css] in DispatcherServlet with name 'dispatcherServlet'
2018-09-29 15:49:16.469 WARN 10836 --- [nio-8080-exec-3] o.s.web.servlet.PageNotFound : No mapping found for HTTP request with URI [/bootstrap/bootstrap.min.js] in DispatcherServlet with name 'dispatcherServlet'
2018-09-29 15:49:16.471 WARN 10836 --- [nio-8080-exec-2] o.s.web.servlet.PageNotFound : No mapping found for HTTP request with URI [/css/color.css] in DispatcherServlet with name 'dispatcherServlet'
2018-09-29 15:49:16.476 WARN 10836 --- [nio-8080-exec-4] o.s.web.servlet.PageNotFound : No mapping found for HTTP request with URI [/js/popper.min.js] in DispatcherServlet with name 'dispatcherServlet'
2018-09-29 15:49:16.486 WARN 10836 --- [nio-8080-exec-4] o.s.web.servlet.PageNotFound : No mapping found for HTTP request with URI [/css/album.css] in DispatcherServlet with name 'dispatcherServlet'
2018-09-29 15:49:16.922 WARN 10836 --- [nio-8080-exec-7] o.s.web.servlet.PageNotFound : No mapping found for HTTP request with URI [/js/popper.min.js] in DispatcherServlet with name 'dispatcherServlet'
2018-09-29 15:49:16.931 WARN 10836 --- [nio-8080-exec-8] o.s.web.servlet.PageNotFound : No mapping found for HTTP request with URI [/bootstrap/bootstrap.min.js] in DispatcherServlet with name 'dispatcherServlet'
2018-09-29 15:49:16.939 WARN 10836 --- [nio-8080-exec-9] o.s.web.servlet.PageNotFound : No mapping found for HTTP request with URI [/bootstrap/bootstrap.min.js] in DispatcherServlet with name 'dispatcherServlet'

DispatcherServletのマッピングをいじればよいようですが該当のドキュメントが見当たりません。

さらに追記
試したこと
WebMvcConfig.java

java

1@Configuration 2public class WebMvcConfig implements WebMvcConfigurer { 3 4 @Override 5 public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 6 configurer.enable(); 7 } 8 9 @Override 10 public void addResourceHandlers(ResourceHandlerRegistry registry) { 11 registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 12 // to serve static .html pages... 13 registry.addResourceHandler("/static/**").addResourceLocations("/resources/static/"); 14 } 15} 16

DispatcherServletとデフォルトサーブレットを併用したい場合は、DispatcherServletで受けたリクエストをデフォルトサーブレットにフォワードする機能(org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler)を有効にしてください。

下の記事を参考に追加
Spring MVC(+Spring Boot)上での静的リソースへのアクセスを理解する

依然として変化なし。
CSSを反映させたいだけで激苦労。SpringBoot2、いったいどうなってるの?
一応マニュアルの該当する箇所は探したが解決法は無し。
27.1.5 Static Content

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

SpringBoot2での読み込みに成功してました。
単純にSpringSecurityを取り外したらCSSなどのコンテンツにアクセスできるようになりました。
依然として問題は解決してないのですがSpringSecurityという別問題でしたので新たに質問を投げるとともにそちら方面で再び調べてみようと思います。ご協力ありがとうございました。

投稿2018/09/30 01:59

spring_boot

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ちょこっと調べてみた感じ相対パスだとダメみたいですが、いかがでしょう。
参考サイト

このサイトに合わせると、こういう書き方になるんじゃないかなーと思います。
試してないのでスミマセン。

修正前

<!-- Bootstrap core CSS --> <link href="../../dist/css/bootstrap.min.css" th:href="@{/dist/css/bootstrap.min.css}" rel="stylesheet"/> <link th:href="@{/static/css/color.css}" rel="stylesheet"/> <!-- Custom styles for this template --> <link href="album.css" th:href="@{/css/album.css}" rel="stylesheet" media="screen" />

修正後

<!-- Bootstrap core CSS --> <link href="/dist/css/bootstrap.min.css" th:href="@{/dist/css/bootstrap.min.css}" rel="stylesheet"/>   ↑これってspring boot専用のやつかなんかですか?ファイル配置になかったのでちょっと想像で直してしまいました。 <link href="/static/css/color.css" th:href="@{/static/css/color.css}" rel="stylesheet"/> <!-- Custom styles for this template --> <link href="/css/album.css" th:href="@{/css/album.css}" rel="stylesheet" media="screen" />

投稿2018/09/29 06:29

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

spring_boot

2018/09/29 06:56

ご回答ありがとうございます! そちらの記事も確認済みでした。 th:hrefで要素が置き換わるので通常のhrefはHTMLのコーダーさん用のようです。 いずれにせよ置き換えてもダメでした。 DispatcherServletがマップが無いとエラーをはじいてますが修正方法のドキュメントがみあたりません。
hichon

2018/09/29 07:22

サーバーのOSとデプロイ先の絶対パスを教えて下さい。
spring_boot

2018/09/29 07:27

こちらSpring専用のSTS(EclipseをもとにSpring用にしたもの)を使ってまして現在学習用に作っているので不随の内部サーバというものを使ってます。デプロイしなくても試せるようにしてあるということでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問