
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」すると

なんか動いてますね。とりあえずよかった。
まとめ
雰囲気はなんとな~くわかりました、全然完璧ではありませんが。
けど、これ以上に深堀りしていると先に進まないので、「知らないこと・わからないことは、その都度調べる・憶える」ということにして、次回からはほんとに、目指すアプリケーションの作成に入っていこうと思います。
コメント