このガイドでは、Springを使用して「Hello, World」Webサイトを作成するプロセスについて説明します。

構築するもの

静的なホームページを持ち、HTTP GETリクエストを受け入れるアプリケーションを作成します: http://localhost:8080/greeting

HTMLを表示するWebページで応答します。HTMLの本文には、「Hello, World!」という挨拶が含まれます。

クエリ文字列のオプションの name パラメータを使用して、グリーティングをカスタマイズできます。その場合、URLは http://localhost:8080/greeting?name=Userになります。

name パラメーター値は、World のデフォルト値をオーバーライドし、「Hello、User!」に変更されるコンテンツによる応答に反映されます

必要なもの

このガイドを完了する方法

ほとんどのSpring 入門ガイドと同様に、最初から始めて各ステップを完了するか、すでに慣れている場合は基本的なセットアップステップをバイパスできます。いずれにしても、最終的に動作するコードになります。

最初から始めるには、Spring Initializrから開始に進みます。

基本スキップするには、次の手順を実行します。

完了したときは、gs-serving-web-content/completeのコードに対して結果を確認できます。

Spring Initializrから開始

すべてのSpringアプリケーションの場合、Spring Initializr(英語) から開始する必要があります。Initializrは、アプリケーションに必要なすべての依存関係をすばやく取得する方法を提供し、多くのセットアップを行います。この例には、Spring Web、Thymeleaf、およびSpring Boot DevToolsの依存関係が必要です。次のイメージは、このサンプルプロジェクト用に設定されたInitializrを示しています。

initializr
前の図は、Mavenがビルドツールとして選択されたInitializrを示しています。Gradleも使用できます。また、com.example および serving-web-content の値をそれぞれグループおよびアーティファクトとして表示します。このサンプルの残りの部分では、これらの値を使用します。

次のリストは、Mavenを選択したときに作成される pom.xml ファイルを示しています。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.2.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>serving-web-content</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>serving-web-content</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

次のリストは、Gradleを選択したときに作成される build.gradle ファイルを示しています。

plugins {
	id 'org.springframework.boot' version '2.2.2.RELEASE'
	id 'io.spring.dependency-management' version '1.0.8.RELEASE'
	id 'java'
}

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

configurations {
	developmentOnly
	runtimeClasspath {
		extendsFrom developmentOnly
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	testImplementation('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
	}
}

test {
	useJUnitPlatform()
}

Webコントローラーを作成する

Webサイトを構築するSpringのアプローチでは、HTTPリクエストはコントローラーによって処理されます。 @Controller (Javadoc) アノテーションによってコントローラーを簡単に識別できます。次の例では、GreetingController View (Javadoc) (この場合は greeting)の名前を返すことにより、/greeting のGET要求を処理します。 View は、HTMLコンテンツのレンダリングを担当します。次のリスト( src/main/java/com/example/servingwebcontent/GreetingController.javaから)は、コントローラーを示しています。

package com.example.servingwebcontent;

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 GreetingController {

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

}

このコントローラーは簡潔でシンプルですが、多くのことを示しています。段階的に分解していきましょう。

@GetMapping アノテーションは、/greeting へのHTTP GET要求が greeting() メソッドにマップされることを保証します。

@RequestParam (Javadoc) は、クエリ文字列パラメーター name の値を greeting() メソッドの name パラメーターにバインドします。このクエリ文字列パラメーターは requiredではありません。要求にない場合、WorlddefaultValue が使用されます。 name パラメーターの値が Model (Javadoc) オブジェクトに追加され、最終的にビューテンプレートからアクセスできるようになります。

メソッド本体の実装は、ビューテクノロジー(この場合はThymeleaf(英語) )に依存して、HTMLのサーバー側レンダリングを実行します。Thymeleafは、greeting.html テンプレートを解析し、th:text 式を評価して、コントローラーに設定された ${name} パラメーターの値をレンダリングします。次のリスト( src/main/resources/templates/greeting.htmlから)は、greeting.html テンプレートを示しています。

<!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>
クラスパスにThymeleafがあることを確認してください(アーティファクト座標: org.springframework.boot:spring-boot-starter-thymeleaf)。Githubの「初期」および「完全」サンプルにはすでに存在しています。

Spring Boot Devtools

Webアプリケーション開発の一般的な機能は、変更のコーディング、アプリケーションの再起動、およびブラウザーをリフレッシュして変更を表示することです。このプロセス全体で多くの時間が消費されます。このリフレッシュサイクルを高速化するために、Spring Bootはspring-boot-devtoolsとして知られる便利なモジュールを提供しています。Spring Boot開発ツール:

  • ホットスワップを有効にします。

  • テンプレートエンジンを切り替えて、キャッシュを無効にします。

  • LiveReloadがブラウザを自動的にリフレッシュできるようにします。

  • 本番ではなく開発に基づいたその他の合理的なデフォルト。

アプリケーションの実行

Spring Initializrは、アプリケーションクラスを作成します。この場合、Spring Initializrによって提供されるクラスをさらに変更する必要はありません。次のリスト( src/main/java/com/example/servingwebcontent/ServingWebContentApplication.javaから)は、アプリケーションクラスを示しています。

package com.example.servingwebcontent;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ServingWebContentApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServingWebContentApplication.class, args);
    }

}

@SpringBootApplication は、次のすべてを追加する便利なアノテーションです。

  • @Configuration : アプリケーションコンテキストのBean定義のソースとしてクラスにタグを付けます。

  • @EnableAutoConfiguration : クラスパス設定、他のBean、およびさまざまなプロパティ設定に基づいてBeanの追加を開始するようSpring Bootに指示します。例: spring-webmvc がクラスパスにある場合、このアノテーションはアプリケーションにWebアプリケーションとしてフラグを立て、DispatcherServletのセットアップなどの主要な動作をアクティブにします。

  • @ComponentScan : Springに、com/example パッケージ内の他のコンポーネント、構成、およびサービスを探して、コントローラーを検出させるように指示します。

main() メソッドは、Spring Bootの SpringApplication.run() メソッドを使用してアプリケーションを起動します。XMLが1行もないことに気付きましたか? web.xml ファイルもありません。このWebアプリケーションは100%純粋なJavaであり、接続機能やインフラストラクチャの構成に対処する必要はありませんでした。

実行可能JARを構築する

コマンドラインからGradleまたはMavenを使用してアプリケーションを実行できます。必要なすべての依存関係、クラス、およびリソースを含む単一の実行可能JARファイルを構築して実行することもできます。実行可能なjarを構築すると、開発ライフサイクル全体、さまざまな環境などで、サービスをアプリケーションとして簡単に提供、バージョン管理、およびデプロイできます。

Gradleを使用する場合、./gradlew bootRunを使用してアプリケーションを実行できます。または、次のように、./gradlew build を使用してJARファイルをビルドしてから、JARファイルを実行できます。

java -jar build/libs/gs-serving-web-content-0.1.0.jar

Mavenを使用する場合、./mvnw spring-boot:runを使用してアプリケーションを実行できます。または、次のように、./mvnw clean package でJARファイルをビルドしてから、JARファイルを実行できます。

java -jar target/gs-serving-web-content-0.1.0.jar
ここで説明する手順は、実行可能なJARを作成します。クラシックWARファイルを作成することもできます。

ロギング出力が表示されます。アプリケーションは数秒以内に稼働します。

アプリケーションをテストする

Webサイトが実行されたため、http://localhost:8080/greetingにアクセスすると、「Hello, World!」が表示されます。

http://localhost:8080/greeting?name=Userにアクセスして、name クエリ文字列パラメーターを提供します。メッセージが「Hello, World!」から「Hello、User!」に変化することに注目してください。

この変更は、GreetingController @RequestParam (Javadoc) 配置が期待どおりに機能していることを示しています。 name パラメーターには、デフォルト値 Worldが指定されていますが、照会ストリングを介して明示的にオーバーライドできます。

ホームページを追加する

HTML、JavaScript、CSSを含む静的リソースは、Spring Bootアプリケーションからソースコードの適切な場所にドロップすることで提供できます。デフォルトでは、Spring Bootは /static (または /public)のクラスパスのリソースから静的コンテンツを提供します。 index.html リソースは、存在する場合は「 `welcome page、"serving-web-content/ which means it is served up as the root resource (that is, at `http://localhost:8080/」として使用されるため特別です。そのため、次のファイルを作成する必要があります( src/main/resources/static/index.htmlにあります)。

<!DOCTYPE HTML>
<html>
<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p>Get your greeting <a href="/greeting">here</a></p>
</body>
</html>

アプリケーションを再起動すると、http://localhost:8080/にHTMLが表示されます。

要約

おめでとう! Springを使用してWebページを開発しました。

関連事項