STSによるプロジェクトの作成

参考書籍Spring Boot2 プログラミング入門 掌田津耶乃


目次

RestControllerを利用する
ControllerによるWebページ作成


RestControllerを利用する(P127)

■MVCアーキテクチャーについて(P129)

Model(モデル) アプリケーションで使うデータを管理する
View(ビュー) 画面の表示を扱う
Controller(コントローラー) 全体の処理の制御を行う

■コントローラークラスを用意する(P130)

Mavenで生成したプロジェクトの場合は、「App.java」クラスが保存されている場所に「HeloController.java」という名前でファイルを作成するだけです。
STS利用の場合は、一般的なJavaクラスとして作成します。メニュー[ファイル]->[新規]->[Class]を選びます。
「Java クラス」ダイアログで以下の項目を設定します。

ソース・フォルダー ファイルを保管する場所を指定します。デフォルトで「MyBootApp/src/main/java」となっているはずなので、そのままにしておきましょう。
パッケージ クラスを置くパッケージを指定します。「com.tuyano.springboot」としておきます
エンクロージング型 これは内部クラスを作る時の設定です。OFFにしておきます。
名前 クラス名です。ここでは「HeloController」とします。
修飾子 アクセス権の拡張子を指定します。ここでは「public」を選んでおきます。
スーパークラス 継承すスーパークラスを指定します。デフォルトでは「java.lang.Object」となっているので、そのままにしておきます。
インターフェース 組み込むインターフェースを設定します。特にないので空欄のままにしておきます
どのメソッド・スタブを作成しますか? 生成するメソッドを設定します。一番下にある「継承された抽象メソッド」のみをONにしておきます。
コメントを追加しますか? コメントを追加するかを指定します。OFFにしておきます。

■パラメータを渡す(P132)

HeloController.java

■パラメータを渡す(P135)

HeloController.java

■オブジェクトをJSONで出力する(P137)

HeloController.java


ControllerによるWebページ作成(P140)

Spring Bootでは、Thymeleafを使ってテンプレートを作成するのが一般的です。
普通のWebページを作る場合は、RestControllerはあまり役立ちません。代わりに用いられるのが「Controller」クラスです。

@Controllerをクラスに付ける
通常のWebページを利用する場合は、コントローラークラスの前に「@Controller」アノテーションを付けます
ページのテンプレートを用意する。
Controllerクラスの場合、あらかじめ表示するページをテンプレートとして用意しておき、それを読み込んで表示内容を作成します。
テンプレート用ライブラリを用意する
Javaベースで開発を行う際には、テンプレートエンジンのためのライブラリを手動で追加しておかないといけません。

■Thymeleafを追加する(Mavenベース) (P141)

pom.xmlを右クリックします。[次で開く]->[XMLエディタ]を選びます。
dependenciesを右クリックし[子の追加]->[dependencies]を選びます。

HeloController.java

■テンプレートファイルを作る (P145)

パッケージエクスプローラーで「src/main/resources」内の「templates」フォルダを選択した状態で、
メニュー[ファイル]->[新規]->[その他]を選び、「ウィザードを選択」ダイアログを表示させます。
[Web]->[HTMLファイル]を選び[次へ]ボタンをクリックします。[親フォルダを入力または選択]フィールドでtemplatesを選び、ファイル名フィールドでindex.htmlを入力します。
HTML テンプレートの選択」ダイアログで、新規 HTML ファイル(5)を選び[完了]ボタンで終了されます。

index.html

■テンプレートに値を表示する (P148)

コントローラーからテンプレートに値を渡すことをやってみましょう。

index.html

HeloController.java

Modelクラスは、Webページで利用するデータを管理するためのクラスです。
このModelに、テンプレートで利用する値を設定しておくことで、データを渡すことができるのです。

■ModelAndViewクラスの利用(P150)

ModelAndViewModelは、どちらもリクエストハンドラで使用することができます。
ただし両者には以下のような違いがあります。

Model テンプレート側で利用するデータ類をまとめて管理します。データを管理するだけなので、ビュー関連(利用するテンプレート名など)の情報は持っていません。ですから、このModelを戻り値として使うことはできません(テンプレートの情報を持たないため)
ModelAndView テンプレートで利用するデータ類と、ビューに関する情報(利用するテンプレート名など)をすべてまとめて管理します。ビュー関連の情報も持っているので、ModelAndViewを戻り値で返すことで、設定されたテンプレートを利用するようになります。

HeloController.java

■フォームを利用する(P152)

HeloController.java

index.html

■そのほかのフォームコントロール(P154)

index.html

HeloController.java

required=falseは、この値が必須ではない、つまり値が渡されない場合もあることを指定するものです。
値が渡されない場合はnull値として処理されます。

■ページの移動(フォワードとリダイレクト) (P158)

フォワード
サーバ内部で別のページを読み込み表示する
リダイレクト
クライアント側に送られたられた後で別のページに移動させる

index.html

HeloController.java

http://localhost:8080/homeにアクセスすると、アドレスはそのままに表示だけがhttp://localhost:8080/に代わります。

http://localhost:8080/otherにアクセスすると、アドレス自体もhttp://localhost:8080/に代わります。

リクエストハンドラの戻り値がModelAndViewの場合は、新たにModelAndViewインスタンスを作成し、これをreturnすればいいのです。