前提
SpringBootにてWebアプリを作成しています。
Eclipseからスタータープロジェクトを作成し、動作確認用のApplicationクラス、Controllerクラス、HTMLファイルを作成しました。
発生している問題・エラーメッセージ
Controller内のメソッドにてhtmlファイル名をreturnにて返していますが、アプリケーションを立ち上げると404エラーになってしまいます。
System.out.println()
よりController内のメソッドを通りreturn文まで読まれていることは確認済みです。
また、関係あるかわかりませんがSpring Security提供の http://localhost:8080/login
のビューは表示されています。
パッケージ構成やhtmlファイルの配置場所も問題なさそうです(Applicationクラスよりも子パッケージにControllerを配置、classpath/templates 配下にhtmlファイルを配置)
これらよりどうやら自前のtop.html
がControllerから認識されていないようです。
エラーメッセージはありませんがログを貼り付けておきます。
[2m2022-11-19 22:51:48.381[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mc.e.urisubtitle.UriSubtitleApplication [0;39m [2m:[0;39m Starting UriSubtitleApplication using Java 11.0.16 on sakuas-Mac2.local with PID xxxxx (ディレクトリ名/bin/main started by ユーザ名 in ディレクトリ名) [2m2022-11-19 22:51:48.382[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mc.e.urisubtitle.UriSubtitleApplication [0;39m [2m:[0;39m No active profile set, falling back to 1 default profile: "default" [2m2022-11-19 22:51:48.443[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36m.e.DevToolsPropertyDefaultsPostProcessor[0;39m [2m:[0;39m Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable [2m2022-11-19 22:51:48.443[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36m.e.DevToolsPropertyDefaultsPostProcessor[0;39m [2m:[0;39m For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' [2m2022-11-19 22:51:49.600[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.b.w.embedded.tomcat.TomcatWebServer [0;39m [2m:[0;39m Tomcat initialized with port(s): 8080 (http) [2m2022-11-19 22:51:49.613[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.apache.catalina.core.StandardService [0;39m [2m:[0;39m Starting service [Tomcat] [2m2022-11-19 22:51:49.614[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36morg.apache.catalina.core.StandardEngine [0;39m [2m:[0;39m Starting Servlet engine: [Apache Tomcat/9.0.68] [2m2022-11-19 22:51:49.707[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.a.c.c.C.[Tomcat].[localhost].[/] [0;39m [2m:[0;39m Initializing Spring embedded WebApplicationContext [2m2022-11-19 22:51:49.708[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mw.s.c.ServletWebServerApplicationContext[0;39m [2m:[0;39m Root WebApplicationContext: initialization completed in 1265 ms [2m2022-11-19 22:51:50.145[0;39m [33m WARN[0;39m [35m84302[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36m.s.s.UserDetailsServiceAutoConfiguration[0;39m [2m:[0;39m Using generated security password: パスワード This generated password is for development use only. Your security configuration must be updated before running your application in production. [2m2022-11-19 22:51:50.270[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.s.web.DefaultSecurityFilterChain [0;39m [2m:[0;39m Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@611787f5, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@d64568f, org.springframework.security.web.context.SecurityContextPersistenceFilter@c29513a, org.springframework.security.web.header.HeaderWriterFilter@45396bfc, org.springframework.security.web.csrf.CsrfFilter@138081e1, org.springframework.security.web.authentication.logout.LogoutFilter@990bbf8, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@6bd39e9b, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@6e799e61, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@15c8c8d, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@300b828a, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@4c2259a1, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@1cb60f40, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@4910b1da, org.springframework.security.web.session.SessionManagementFilter@203f32da, org.springframework.security.web.access.ExceptionTranslationFilter@72abd3b4, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@2785449a] [2m2022-11-19 22:51:50.325[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.b.d.a.OptionalLiveReloadServer [0;39m [2m:[0;39m LiveReload server is running on port 35729 [2m2022-11-19 22:51:50.366[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mo.s.b.w.embedded.tomcat.TomcatWebServer [0;39m [2m:[0;39m Tomcat started on port(s): 8080 (http) with context path '' [2m2022-11-19 22:51:50.381[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[ restartedMain][0;39m [36mc.e.urisubtitle.UriSubtitleApplication [0;39m [2m:[0;39m Started UriSubtitleApplication in 2.429 seconds (JVM running for 3.437) [2m2022-11-19 22:51:54.935[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[nio-8080-exec-1][0;39m [36mo.a.c.c.C.[Tomcat].[localhost].[/] [0;39m [2m:[0;39m Initializing Spring DispatcherServlet 'dispatcherServlet' [2m2022-11-19 22:51:54.935[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[nio-8080-exec-1][0;39m [36mo.s.web.servlet.DispatcherServlet [0;39m [2m:[0;39m Initializing Servlet 'dispatcherServlet' [2m2022-11-19 22:51:54.937[0;39m [32m INFO[0;39m [35m84302[0;39m [2m---[0;39m [2m[nio-8080-exec-1][0;39m [36mo.s.web.servlet.DispatcherServlet [0;39m [2m:[0;39m Completed initialization in 2 ms through check
該当のソースコード
UriSubtitleApplication.java
1package com.example.urisubtitle; 2import org.springframework.boot.SpringApplication; 3import org.springframework.boot.autoconfigure.SpringBootApplication; 4 5@SpringBootApplication 6public class UriSubtitleApplication { 7 public static void main(String[] args) { 8 SpringApplication.run(UriSubtitleApplication.class, args); 9 } 10}
TestController.java
1package com.example.urisubtitle.controller; 2import org.springframework.stereotype.Controller; 3import org.springframework.web.bind.annotation.RequestMapping; 4 5@Controller 6public class TestController { 7 @RequestMapping("/") 8 public String index() { 9 System.out.println("through check"); 10 return "top"; 11 } 12}
top.html
1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4<meta charset="UTF-8"> 5<title th:text="トップページ">トップページ</title> 6</head> 7<body> 8 <h1 th:text="TOP">トップ</h1> 9</body> 10</html>
当方初心者で何が原因になりうるのかわかっておりません。
他に貼り付けるべき情報がありましたら貼付いたします。
試したこと
- Controller内定義メソッドを通っていることを確認(@RequestMappingのURIがあっていることを確認)
- パッケージ構成やhtmlファイルの配置場所の確認
- 類似質問の確認 (https://teratail.com/questions/344666)
回答1件
あなたの回答
tips
プレビュー