カテゴリ: SpringのWeb開発(Spring MVC) 更新日: 2025/02/24

@Controllerとは?基本概念と役割を完全ガイド!初心者でもわかるSpring MVCの使い方

@Controllerとは?基本概念と役割
@Controllerとは?基本概念と役割

新人と先輩の会話形式で理解しよう

新人

「先輩、SpringでWebアプリケーションを作るときに@Controllerってよく見かけるんですけど、これは何ですか?」

先輩

「いい質問だね!@Controllerは、Spring MVCでWebページを表示するためのクラスを作るときに使うアノテーションなんだ。ユーザーからのリクエストを受け取って、適切なHTMLを返す役割があるんだよ。」

新人

「なるほど、リクエストを受け取るってどういうことですか?」

先輩

「じゃあ、これから@Controllerの基本的な使い方と役割について詳しく見ていこう!」

1. @Controllerとは?

1. @Controllerとは?
1. @Controllerとは?

@Controllerは、Spring FrameworkのMVCアーキテクチャで使用されるアノテーションで、ユーザーからのHTTPリクエストを受け取り、適切なビュー(HTMLページなど)を返すための役割を持っています。これにより、Webアプリケーションの画面表示やデータのやり取りがスムーズに行えます。

例えば、Webブラウザで「http://localhost:8080/hello」にアクセスしたときに、画面に「こんにちは、Spring!」と表示させることができます。これを実現するのが@Controllerです。

2. @Controllerの役割と基本的な使い方

2. @Controllerの役割と基本的な使い方
2. @Controllerの役割と基本的な使い方

ここでは、実際に@Controllerを使って簡単なWebページを表示させる方法を解説します。開発環境はPleiadesを使用し、ビルドツールはGradleを利用します。

2.1 プロジェクトの作成方法(Pleiades使用)

  1. Pleiadesを起動し、新規Springプロジェクトを作成します。
  2. プロジェクト名を入力し、ビルドツールはGradleを選択します。
  3. 依存関係の設定画面で、Spring Webにチェックを入れて追加します。
  4. 完了をクリックしてプロジェクトを生成します。

2.2 コントローラクラスの作成

次に、リクエストを受け取るためのコントローラクラスを作成します。以下が基本的なコード例です。


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "hello"; // hello.htmlを表示
    }
}

2.3 Viewファイルの作成

リクエストに対応するHTMLファイルを作成します。src/main/resources/templatesフォルダにhello.htmlを作成してください。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Hello Page</title>
</head>
<body>
    <h1>こんにちは、Spring!</h1>
</body>
</html>

2.4 アプリケーションの実行と確認

  1. Pleiadesの左側のパッケージエクスプローラーでDemoApplication.javaを右クリック。
  2. 実行 > Spring Boot アプリケーションを選択して実行します。
  3. ブラウザでhttp://localhost:8080/helloにアクセス。

ブラウザに「こんにちは、Spring!」と表示されれば成功です。


こんにちは、Spring!

3. @Controllerを使った基本的なルーティングの方法

3. @Controllerを使った基本的なルーティングの方法
3. @Controllerを使った基本的なルーティングの方法

@Controllerを使用すると、ユーザーがWebブラウザからアクセスしたURLに応じて、特定のメソッドを実行させることができます。これを「ルーティング」と呼びます。ルーティングは、ユーザーからのリクエストを正しい処理に結び付ける重要な仕組みです。

Spring MVCでは、@GetMapping@PostMappingなどのアノテーションを使用してルーティングを設定します。今回は、ブラウザからのアクセスを想定した@GetMappingの基本的な使い方を解説します。

3.1 単純なルーティングの例

以下のコードでは、ブラウザで/welcomeにアクセスすると、welcome.htmlが表示されます。


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class WelcomeController {

    @GetMapping("/welcome")
    public String showWelcomePage() {
        return "welcome";
    }
}

このコードのポイントは以下の通りです。

  • @Controller:クラスがコントローラであることを示します。
  • @GetMapping("/welcome")/welcomeへのGETリクエストを受け付けます。
  • return "welcome"welcome.htmlというテンプレートを表示します。

3.2 Viewファイルの作成と確認

src/main/resources/templatesディレクトリに以下のwelcome.htmlを作成してください。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Welcome Page</title>
</head>
<body>
    <h1>ようこそ、Spring MVCの世界へ!</h1>
</body>
</html>

Pleiadesでプロジェクトを実行後、ブラウザでhttp://localhost:8080/welcomeにアクセスすると以下のように表示されます。


ようこそ、Spring MVCの世界へ!

4. Viewへのデータの渡し方(Modelの使い方)

4. Viewへのデータの渡し方(Modelの使い方)
4. Viewへのデータの渡し方(Modelの使い方)

Webアプリケーションでは、ユーザーに単純なHTMLを表示するだけでなく、データを画面に渡すことがよくあります。Spring MVCでは、Modelクラスを使ってデータをViewに渡すことができます。

4.1 Modelを使った基本的な例

以下のコードでは、ユーザー名を画面に表示させる例を示しています。


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class UserController {

    @GetMapping("/user")
    public String showUserPage(Model model) {
        model.addAttribute("username", "太郎");
        return "user";
    }
}

model.addAttribute("username", "太郎")は、usernameというキーで「太郎」という値をViewに渡しています。

4.2 Viewでデータを表示

上記のコントローラに対応するuser.htmlを作成します。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>User Page</title>
</head>
<body>
    <h1>ユーザー情報</h1>
    <p>ユーザー名: <span th:text="${username}"></span></p>
</body>
</html>

Pleiadesでプロジェクトを実行し、ブラウザでhttp://localhost:8080/userにアクセスすると、以下のように表示されます。


ユーザー情報
ユーザー名: 太郎

5. 実際のコード例とその解説

5. 実際のコード例とその解説
5. 実際のコード例とその解説

ここでは、ユーザーが名前を入力して挨拶を表示する簡単なWebアプリケーションを作成します。フォームの入力値を受け取り、画面に反映させる方法を解説します。

5.1 コントローラの作成


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class GreetingController {

    @GetMapping("/greeting")
    public String showForm() {
        return "greetingForm";
    }

    @PostMapping("/greeting")
    public String submitForm(@RequestParam("name") String name, Model model) {
        model.addAttribute("greetingMessage", "こんにちは、" + name + "さん!");
        return "greetingResult";
    }
}

5.2 入力フォームの作成

次に、名前を入力するフォームを作成します。greetingForm.htmlを作成してください。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>挨拶フォーム</title>
</head>
<body>
    <h1>名前を入力してください</h1>
    <form action="/greeting" method="post">
        <label for="name">名前:</label>
        <input type="text" id="name" name="name" required>
        <button type="submit">送信</button>
    </form>
</body>
</html>

5.3 結果表示ページの作成

入力された名前を表示する結果用ページを作成します。greetingResult.htmlを以下の内容で作成してください。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>挨拶結果</title>
</head>
<body>
    <h1 th:text="${greetingMessage}">ここに挨拶が表示されます</h1>
</body>
</html>

5.4 実行と確認

  1. Pleiadesでアプリケーションを実行します。
  2. ブラウザでhttp://localhost:8080/greetingにアクセスします。
  3. 名前を入力し、「送信」をクリックします。
  4. 次のように入力した名前が表示されます。

こんにちは、花子さん!

6. 実践!簡単なWebアプリケーションの作成手順

6. 実践!簡単なWebアプリケーションの作成手順
6. 実践!簡単なWebアプリケーションの作成手順

ここでは、実際に簡単なWebアプリケーションを作成する手順を詳しく解説します。Pleiadesを使用して、ユーザーが自分の名前を入力し、挨拶を表示するアプリケーションを作成します。

6.1 プロジェクトの作成(Pleiades使用)

  1. Pleiadesを起動し、新規Springプロジェクトを作成します。
  2. プロジェクト名をgreeting-appと入力します。
  3. ビルドツールはGradleを選択します。
  4. 依存関係の画面で、Spring Webにチェックを入れて追加します。
  5. 「完了」をクリックし、プロジェクトを生成します。

6.2 コントローラの作成

次に、GreetingControllerクラスを作成し、ルーティングを設定します。


package com.example.greetingapp.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class GreetingController {

    @GetMapping("/greeting")
    public String showForm() {
        return "greetingForm";
    }

    @PostMapping("/greeting")
    public String submitForm(@RequestParam("name") String name, Model model) {
        model.addAttribute("greetingMessage", "こんにちは、" + name + "さん!");
        return "greetingResult";
    }
}

6.3 Viewファイルの作成

ユーザーが名前を入力するフォーム用HTMLファイルを作成します。

src/main/resources/templates/greetingForm.htmlに以下の内容を追加してください。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>挨拶フォーム</title>
</head>
<body>
    <h1>名前を入力してください</h1>
    <form action="/greeting" method="post">
        <label for="name">名前:</label>
        <input type="text" id="name" name="name" required>
        <button type="submit">送信</button>
    </form>
</body>
</html>

次に、挨拶結果を表示するHTMLファイルを作成します。

src/main/resources/templates/greetingResult.htmlに以下の内容を追加してください。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>挨拶結果</title>
</head>
<body>
    <h1 th:text="${greetingMessage}">ここに挨拶が表示されます</h1>
</body>
</html>

6.4 アプリケーションの実行

  1. PleiadesでGreetingAppApplication.javaを右クリック。
  2. 実行 > Spring Boot アプリケーションを選択して実行します。
  3. ブラウザでhttp://localhost:8080/greetingにアクセスします。
  4. 名前を入力し、送信ボタンをクリックすると結果が表示されます。

実行結果は以下のように表示されます。


こんにちは、太郎さん!

7. よくあるエラーとその解決方法

7. よくあるエラーとその解決方法
7. よくあるエラーとその解決方法

Spring MVCで開発を進める中で、初心者がつまずきやすいエラーとその解決方法を紹介します。

7.1 Whitelabel Error Pageが表示される

原因: ビューのファイル名が一致していない、またはtemplatesディレクトリにHTMLファイルがない場合に発生します。

解決方法:

  • コントローラで返す文字列とHTMLファイル名が一致しているか確認する。
  • HTMLファイルは必ずsrc/main/resources/templates内に配置する。

7.2 TemplateInputExceptionエラーが発生する

原因: Thymeleafで参照する変数が存在しない場合に発生します。

解決方法:

  • コントローラでmodel.addAttribute()が正しく設定されているか確認する。
  • Thymeleafで使用する変数名とコントローラで指定した名前が一致しているか確認する。

7.3 サーバーが起動しない

原因: application.propertiesの設定ミスやポートの競合が考えられます。

解決方法:

  • 他のアプリケーションが同じポートを使用していないか確認する。
  • ポート番号を変更するにはapplication.propertiesに以下を追加します。

server.port=8081

7.4 404 Not Foundが表示される

原因: 指定したURLが存在しない、もしくはルーティングが正しく設定されていない場合に発生します。

解決方法:

  • コントローラの@GetMapping@PostMappingのURLが正しいか確認する。
  • ブラウザのURLに誤りがないか確認する。

8. 次のステップと今後の学習ポイント

8. 次のステップと今後の学習ポイント
8. 次のステップと今後の学習ポイント

今回の記事では、@Controllerを使用して基本的なルーティング、データの渡し方、簡単なWebアプリケーションの作成方法を学びました。次のステップとして、以下の学習をおすすめします。

8.1 フォームバリデーションの実装

ユーザーが入力するデータを検証し、入力ミスを防ぐ方法を学びましょう。@ValidBindingResultを使うことで実現できます。

8.2 複数ページ間の遷移

複数のページを作成し、それらを遷移させる方法を学ぶことで、より実用的なWebアプリケーションが作れるようになります。

8.3 データベースとの連携

Spring Data JPAを使うことで、データベースにデータを保存したり取得することが可能になります。次回はこの技術を取り入れたアプリケーション作成を目指しましょう。

8.4 セッション管理と認証

ユーザーのログイン情報を管理する方法を学ぶと、さらに本格的なWebアプリケーションが作成できます。

このように、@Controllerを基礎として、さまざまな機能を組み合わせていくことで、実用的なアプリケーションが開発できるようになります。引き続き実践を重ね、ステップアップしていきましょう!

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
Spring認証(Spring Security)
Spring BootでCORSを設定する方法を完全解説!初心者でもわかるセキュリティ対策
New2
Spring認証(Spring Security)
パスワードをハッシュ化する理由とは?セキュリティ対策の基本をSpring Securityで学ぼう
New3
SpringのWeb開発(Spring MVC)
HTTPリクエストとレスポンスの基本を完全解説!Spring MVC初心者がWeb通信の仕組みをやさしく理解
New4
Spring認証(Spring Security)
ブラウザからのフォーム送信とは?HTTPリクエストの基礎を初心者向けに解説!
人気記事
No.1
Java&Spring記事人気No1
SpringのWeb開発(Spring MVC)
ルーティングとは?基本概念(Spring MVCのURL制御を理解)
No.2
Java&Spring記事人気No2
Thymeleaf
Thymeleaf とは?初心者向けにThymeleafの基本を徹底解説
No.3
Java&Spring記事人気No3
Springの基本
application.properties と YAML の基本をやさしく解説!初心者向けSpring Boot設定ファイル入門
No.4
Java&Spring記事人気No4
Springの基本
Spring Bootのデフォルトログ設定を徹底解説(Logback / SLF4J)
No.5
Java&Spring記事人気No5
Springの基本
Spring Bootの環境変数の設定方法をやさしく解説!初心者向けapplication.propertiesの使い方
No.6
Java&Spring記事人気No6
SpringのWeb開発(Spring MVC)
ループ処理(th:each)の基本を完全ガイド!Thymeafの繰り返し処理の使い方
No.7
Java&Spring記事人気No7
SpringのDB操作
JPAの標準クエリメソッド(findById, findAll)を完全解説!初心者でもわかるデータ取得の基本
No.8
Java&Spring記事人気No8
Spring認証(Spring Security)
セッション管理の基本(@SessionAttributes)を完全解説!初心者でもわかるセッションの仕組み