Angular, Spring, PostgreSQL(9)Spring をちょっと試してみる

スポンサーリンク

Springの雰囲気をつかむ

前回は、これまでもやっとしていたビルド・ツール(Make, Ant Maven, Gradle)について、多少は理解をしてこうとしたわけですが、ほどほどで切り上げました(奥が深そう・嵌りそう)。

ターゲットとしているアプリを作っていくにあたって、少し開発環境(Eclipse)とか出来上がりのイメージとかに馴れておかないと、いきなりつまずく可能性があります。

なので今回は、ちょっとSpringを利用したプログラムを作成してみて、どんなものか雰囲気をつかむことにします。

スポンサーリンク

Spring入門コンテンツ

簡単に「Helloとかがコンソールに出てくるものを作れば、とりあえず良いかな」と思っていたのだけれど、「Spring入門コンテンツのインポート」なるものを見つけました。

なんだろう?、よくわからないけれど、初心者には役立つかもしれない。「Handling Form Submission」を入れてみます。※Gradle選択で

「handling-form-submission’ という名前を付けることはできません」と言ってきたけれど、プロジェクト名はすでに「gs-handling-form-submission-initial」に変更してくれていると思う。どこのことだろう?、とりあえず無視。

プロジェクトは作ってくれたけど、中身はスカスカな気がする。
もしかして、ここから「助けてやるから組め」ってことか?

日本語の解説もあるようです。

凄いな、やるしかないじゃないか、、、

Spring Initializer

「すべての Spring アプリケーションの場合、Spring Initializr から開始する必要があります」、とのころ。

「なんだろうこれ?、Eclipseにはこんな画面ないよなぁ、、、」と思っていたら、こういうサイトがあるようです。

ちょっと打ってみた。

「GENERATE」を押すと、ZIPファイルをダウンロードすることになって、一通りのファイルをくれるみたい。

これを使っても良いのだけれど、Eclipse上に既に「Spring入門コンテンツのインポート」を実行した時に作ったものあります。

「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'

repositories {
	mavenCentral()
}

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

test {
	useJUnitPlatform()
}

なので「なんか便利だねぇ」という理解だけして、先に進むことにします。

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

「Web サイトを構築する Spring のアプローチでは、HTTP リクエストはコントローラーによって処理されます」とのこと。

以前図にした下記Spring構造での、赤枠の部分ですね。

とりあえず、ソースをもってきます。
/src/main/java/com/example/handlingformsubmission/GreetingController.java

package com.example.handlingformsubmission;

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

@Controller
public class GreetingController {

  @GetMapping("/greeting")
  public String greetingForm(Model model) {
    model.addAttribute("greeting", new Greeting());
    return "greeting";
  }

  @PostMapping("/greeting")
  public String greetingSubmit(@ModelAttribute Greeting greeting) {
    return "result";
  }

}

「@Controller」が、いわゆる”アノテーション”というやつですね。
「GreetingControllerは、コントローラーだぞ」と役割を宣言している感じ。

次の「Greeting」クラスは、画面(HTML)の値を保持しておくもの。
src/main/java/com/example/handlingformsubmission/Greeting.java

package com.example.handlingformsubmission;

public class Greeting {

  private long id;
  private String content;

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  public String getContent() {
    return content;
  }

  public void setContent(String content) {
    this.content = content;
  }

}

あとは、画面(HTML)が2つ。

src/main/resources/templates/greeting.html

<!DOCTYPE HTML>
<html xmlns:th="https://www.thymeleaf.org">
<head>
    <title>Getting Started: Handling Form Submission</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
	<h1>Form</h1>
    <form action="#" th:action="@{/greeting}" th:object="${greeting}" method="post">
    	<p>Id: <input type="text" th:field="*{id}" /></p>
        <p>Message: <input type="text" th:field="*{content}" /></p>
        <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
    </form>
</body>
</html>

src/main/resources/templates/result.html

<!DOCTYPE HTML>
<html xmlns:th="https://www.thymeleaf.org">
<head>
    <title>Getting Started: Handling Form Submission</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
	<h1>Result</h1>
    <p th:text="'id: ' + ${greeting.id}" />
    <p th:text="'content: ' + ${greeting.content}" />
    <a href="/greeting">Submit another message</a>
</body>
</html>

とりあえず、ここまで入れれば動く模様。

アプリケーションを実行可能にする

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

Eclipse上だと、以下のあたりのようです。

まず「build」を実行。すると「Gradle実行」タブが以下のように。

たぶんOKなのでしょう。では起動してみます。

テストする

「http://localhost:8080/greeting」にアクセス。

適当に入力して「Submit」すると

なんか動いてますね。とりあえずよかった。

まとめ

雰囲気はなんとな~くわかりました、全然完璧ではありませんが。

けど、これ以上に深堀りしていると先に進まないので、「知らないこと・わからないことは、その都度調べる・憶える」ということにして、次回からはほんとに、目指すアプリケーションの作成に入っていこうと思います。

コメント

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