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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

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

Q&A

解決済

2回答

12853閲覧

Spring Boot 実行するも404エラーが表示される

muro678

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

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

0グッド

0クリップ

投稿2021/06/18 02:25

編集2021/06/18 04:49

前提・実現したいこと

SpringBootにてWebアプリを作成しております。
ログイン画面(login.html)とユーザー登録画面(signup.html)を作成している段階で、login.htmlにアクセスgetMappingを用いてアクセスしたいです。

発生している問題・エラーメッセージ

しかし、「http://localhost:8080/login」にアクセスすると作成したlogin.htmlにアクセスできず404エラーが出力されてしまいます。

エラーメッセージ 「Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. There was an unexpected error (type=Not Found, status=404).」

該当のソースコード

LoginController

1 2//LoginController.javaのコード 3 4package com.example.controller; 5 6import org.springframework.stereotype.Controller; 7import org.springframework.web.bind.annotation.GetMapping; 8import org.springframework.web.bind.annotation.RequestMapping; 9import org.springframework.web.bind.annotation.RequestMethod; 10 11@Controller 12public class LoginController { 13 14 15 @GetMapping("/login") 16 public String getLogin() { 17 return "login/login"; 18 } 19} 20

login

SignupController

1 2//SignupController.javaのコード 3package com.example.controller; 4 5import java.util.Map; 6 7import org.springframework.beans.factory.annotation.Autowired; 8import org.springframework.stereotype.Controller; 9import org.springframework.ui.Model; 10import org.springframework.web.bind.annotation.GetMapping; 11import org.springframework.web.bind.annotation.PostMapping; 12import org.springframework.web.bind.annotation.RequestMapping; 13 14import com.example.application.service.UserApplicationService; 15 16@Controller 17@RequestMapping("/user") 18//URLのプリフィックス(接頭辞)として利用できる、クラスではRequestMapping、メソッドでは@GetMapping 19public class SignupController { 20 21 @Autowired 22 private UserApplicationService userApplicationService; 23 24 //RequestMappingでGetMappingを代用することも可能 25 //その場合は@RequestMapping(value="/signup",method=RequestMethod.GET) 26 @GetMapping("/signup") 27 public String getSignup(Model model) { 28 //性別を取得 29 Map<String,Integer> genderMap = userApplicationService.getGenderMap(); 30 31 model.addAttribute("genderMap",genderMap); 32 33 //ユーザー登録画面へ遷移 34 return "user/signup"; 35 } 36 37 //ユーザー登録処理 38 @PostMapping("/signup") 39 public String postSignup() { 40 //リダイレクトしている 41 //リダイレクトとは、ウェブサイト閲覧にて指定したウェブサイトから自動的に他のウェブページに転送されること 42 //ここでは、postメソッドによりsignupに一度飛ぶがすぐにloginページを返却される 43 return "redirect:login"; 44 } 45 46} 47

試したこと

実行したところ、実行時エラーやコンパイルエラーは発生しておりません。

補足情報(FW/ツールのバージョンなど)

ファイル構成は下記のようになります。
イメージ説明

何か考えられる原因がございましたら教えてほしいです!!!!

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

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

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

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

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

muro678

2021/06/18 02:43

コメントありがとうございます。 写真に載っているように「SpringBootSample2」プロジェクトのみを実行している場合でもコンテキストパスは必要なのでしょうか? 複数プロジェクトを作成している際にはコンテキストパスをURLに入れるのが常識となる感じでしょうか、、 基本的な質問でしたら申し訳ございません、、
K_3578

2021/06/18 02:50

え、いや場所を指し示すパスな訳ですから、 コンテキストパスなしでやろうと思えばできますけど、わざわざやる意味ありますかね?
muro678

2021/06/18 04:04

application.propertiesのほうでコンテキストパスを設定せずに実行していたのでコンテキストパスなしで実行できるのでは?と考えた次第になります。 application.propertiesの方で「server.servlet.context-path=/sample」を新たに追加し、「http://localhost:8080/sample/login」と致しましたが404エラーが出力されてしまいました、、 すみません、やり方が間違っていますでしょうか、、?
muro678

2021/06/18 06:12

自己解決いたしました! ミスが多く何度もご対応頂き申し訳ございません。 ありがとうございました!
guest

回答2

0

自己解決

自己解決いたしました!!

原因は、パッケージ構成にありました。
com.example.hello内にプロジェクトのmain.javaが格納されていたことが原因でcom.exampleパッケージ内にSpringBootSample2Applicationを作成しなおしたところ「http://localhost:8080/sample/login」で無事login.htmlの内容を表示することが出来ました。

誤っていたファイル構成
com.example.application.service
|_UserApplicationSerivice.java
com/example.controller
|_LoginController
|_SignupController
com.example.hello
|_SpringBootSample2Application

正しいファイル構成
com.example.application.service
|_UserApplicationSerivice.java
com/example.controller
|_LoginController
|_SignupController
com.example
|_SpringBootSample2Application

解決に向けてご協力頂きましたm.ts10806さん、K_3578さんありがとうございました!
コンテキストパスなど勉強になりました!ありがとうございます!

投稿2021/06/18 06:10

編集2021/06/18 07:00
muro678

総合スコア0

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

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

m.ts10806

2021/06/18 06:19

解決されたようで何よりです。 細かいですがlocaltになってます。 ただ、Application.javaの配置が違ったとなると、そもそもSpringプロジェクトとしてビルドできないように思いました。 あ、いや、違うか。トップパッケージがcom.example.helloになっていたということか。理解しました。 パッケージ構成についてはサブドメインをつけてアプリ名とするプロジェクトもあるので、今回の対応が全てではないという点はご認識ください。 あくまで「Application.javaの配置によってプロジェクトとしての管理ルートが決まる」ということで。
K_3578

2021/06/18 06:28 編集

ん?SpringBootSample3Application?SpringBootSample2Applicationじゃなかったのか・・・? 追記 com.example |_SpringBootSample3Application ←これもでは?
muro678

2021/06/18 06:59

m.ts10806さん ご指摘ありがとうございます!修正させて頂きました。 実際の業務状況なども教えて頂きありがとうございます。 Application.javaの配置に関して注意を怠らずにこれからも取り組んでいきたいと思います。
muro678

2021/06/18 07:01

K_3578さん ご指摘ありがとうございます!2点修正させて頂きました!
K_3578

2021/06/18 07:03

解決したなら良かったっす。 (最近フレームワーク使わずにプライベートでいじくり回して遊んでるからSpring Bootあんまり 覚えてなかった)
m.ts10806

2021/06/18 07:09 編集

>実際の業務状況 いえ、特に業務状況については言及しておりません。Spring FrameworkとJavaの慣習の仕様の話です。
K_3578

2021/06/18 07:15 編集

>パッケージ構成についてはサブドメインをつけてアプリ名とするプロジェクトもあるので、 ここの「プロジェクト」を誤解しているのでは? 文脈的には結構誤解しそうな気はします。
m.ts10806

2021/06/18 07:13

↑そうですね。表現が広すぎました。
guest

0

/loginでアクセスしたいなら
@GetMapping("/login")が必要では。

application.propertiesにserver.servlet.context-pathを設定していたらそちらも影響します。
設定ないなら直で問題ないはず。

投稿2021/06/18 02:49

編集2021/06/18 05:18
m.ts10806

総合スコア80871

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

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

muro678

2021/06/18 02:55

コメントありがとうございます。 色々とソースコードを触っているうちに間違って消してしまっていました。 こちら、再度@GetMapping("/login")と修正し、実行したのですがやはりエラーが表示されてしまいました、、
m.ts10806

2021/06/18 03:00

application.propertiesなどにcontext-pathの設定していればそちらも必要です。
muro678

2021/06/18 04:07

ありがとうございます。 application.propertiesの方で「server.servlet.context-path=/sample」を新たに追加し、「http://localhost:8080/sample/login」と致しましたが404エラーが出力されてしまいました、、 また、application.propertiesの「server.servlet.context-path=/sample」を削除して実行し「http://localhost:8080/login」へアクセスした際も404エラーが出力されてしまいました、、 変更箇所はapplication.propertiesのコンテキストパスに関するプロパティと、URLのみになりますがやり方が間違っていますでしょうか、、?
m.ts10806

2021/06/18 04:14

いえ、合ってます。 ただ loginと /login は別物ですよ。
m.ts10806

2021/06/18 05:08

定義としては問題ないとは思います。 ちなみに他のページはどうですか?
muro678

2021/06/18 05:21

ありがとうございます! 他ページですが、下記のような方法で実行してみました! ・SignupController.javaの@GetMapping("/signup")の部分をコメントアウト ・LoginController.javaにてGetMappingを、下記コードに変更 public String getLogin() { return "user/signup"; } 再度プロジェクトを実行し、「http://localhost:8080/sample/signup」へアクセスしたのですが同じく404エラーとなってしまいました、、
m.ts10806

2021/06/18 05:23

signupのほうはコントローラにもマッピング付いてるので /user も必要です。
muro678

2021/06/18 05:32

ありがとうございます。 ご指摘頂いた@RequestMapping("/user")部分もコメントアウトし、実行しましたが404エラーとなってしまいました、、
muro678

2021/06/18 06:12

自己解決いたしました! ミスが多く何度もご対応頂き申し訳ございません。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問