【Spring MVC】Spring MVCで簡単な Web アプリを開発する

Spring MVC
スポンサーリンク

プロジェクト作成

https://start.spring.io/ で Gradle Project を生成します。

  • Project: Gradle Project
  • Language: Java
  • Spring Boot: 2.5.5
  • Project Metadata
  • Group: com.example
    • Artifact: demo
    • Name: demo
    • Description: Demo project for Spring Boot
    • Package name: com.example.demo
  • Packaging: War
  • Java: 11
  • Dependencies:
    • Spring Web
    • Thymeleaf

構成

  • controller ディレクトリを作成します。
    • Controller クラスをここに作成します。
  • repository ディレクトリを作成します。
    • DB を操作するクラスをここに作成します。
  • service ディレクトリを作成する
    • ビジネスロジックを実装するクラスをここに作成します。
  • resources/templates に html を作成します。
.
├── HELP.md
├── build
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           └── demo
    │   │               ├── DemoApplication.java
    │   │               ├── ServletInitializer.java
    │   │               ├── controller
    │   │               │   └── HelloController.java
    │   │               ├── repository
    │   │               └── service
    │   └── resources
    │       ├── application.properties
    │       ├── static
    │       └── templates
    │           └── hello.html
    └── test
        └── java
            └── com
                └── example
                    └── demo
                        └── DemoApplicationTests.java

build.gradle

Gradle のビルド設定ファイルです。

plugins {
    id 'org.springframework.boot' version '2.5.6'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id 'war'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
    useJUnitPlatform()
}

ソースコード

HelloController.java

  • /hello でリクエストを受け付けます。
  • model#addAttribute() で Controller から View にパラメータを渡すことが出来ます。
  • @RequestParam でクエリストリングからパラメータを受け取ることが出来ます。
package com.example.demo;

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

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String greeting(@RequestParam(name="name", required = false, defaultValue = "World") String name, Model model) {
        model.addAttribute("name", name);
        return "hello";
    }
}

hello.html

  • Controller で model にセットされたパラメータを画面に表示します。
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p th:text="'Hello ' + ${name}" />
</body>
</html>

Spring Boot 起動

  • ターミナルで gradle bootRun を実行することで Spring Boot が起動します。
> gradle bootRun

> Task :bootRun

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.5.6)

2021-11-10 19:11:25.665  INFO 7516 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication using Java 11.0.11 on mtakeda-win with PID 7516 (D:\project\nexs\enurse\wiki\research\springmvc\src\springmvcsample\build\classes\java\main started by mtakeda in D:\project\nexs\enurse\wiki\research\springmvc\src\springmvcsample)
2021-11-10 19:11:25.674  INFO 7516 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to default profiles: default
2021-11-10 19:11:26.818  INFO 7516 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2021-11-10 19:11:26.824  INFO 7516 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-11-10 19:11:26.824  INFO 7516 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.54]
2021-11-10 19:11:26.874  INFO 7516 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-11-10 19:11:26.874  INFO 7516 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1151 ms
2021-11-10 19:11:27.082  INFO 7516 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-11-10 19:11:27.099  INFO 7516 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 1.792 seconds (JVM running for 2.125)
2021-11-10 19:11:31.133  INFO 7516 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-11-10 19:11:31.133  INFO 7516 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-11-10 19:11:31.133  INFO 7516 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 0 ms
<==========---> 80% EXECUTING [8m 49s]
> :bootRun

この状態で http://localhost:8080/hello に Web ブラウザでアクセスすると以下の画面が表示されます。

http://localhost:8080/hello?name=SpringMVC とすると画面にクエリストリングで指定したパラメータが表示されます。

タイトルとURLをコピーしました