Spring Bootによるウェブアプリ開発の基礎(5)

永続化(永続性を保つ事)について。

計算機科学における永続性(英: Persistence)は、データを生成したプログラムが終了してもそのデータが存続する特性を指す。この特性がない場合、データはメモリ上にのみ存在し、コンピュータのシャットダウン時など、メモリの電源が切られた時点で消失する。(Wikipedia: 永続性より引用)

Javaアプリケーションにおける永続化の方法

  • ファイル操作を行うAPI(クラス)を用いる。[教科書6章]
  • JSONで保存: Jackson
  • リレーショナルデータベースに保存
    • JDBC: Javaプログラム内でSQLを構成・実行する
    • JPA (Java Persistence API): JavaにおけるO/Rマッパーの標準的な仕様
  • リレーショナルデータベース以外のデータベースに保存
  • etc…

Spring Bootではデータの永続化のために、JdbcTemplate(JDBCを簡単に使える機能)やSpring Dataが利用できるようになっている。

テキストファイルの読み書き

PersistenceSampleController.javaのloadTextメソッドとappendTextメソッド

JPA

  • build.gradleに追加
  • Memo.java: エンティティーを作成する。
  • MemoRepository.java: JpaRepositoryを継承してリポジトリを作成する。
  • PersistenceSampleController.java
    • @AutowiredでDIする
    • findAllで取り出す
    • saveで保存

Spring Bootによるウェブアプリ開発の基礎(4)

ここまでのまとめ。

コントローラ

  • @Controllerアノテーションが付加されたクラスがコントローラになる。
  • @RequestMappingアノテーションで対応するパス(URLのホスト部分より後)を指定する。クラスとメソッドにそれぞれに付加することができる。「クラスに付加された値」+「メソッドに付加された値」が対応するパスとなる。例えばクラスに「@RequestMapping(“/form”)」、メソッドに「@RequestMapping(“text”)」と付加されていた場合、そのメソッドが対応するパスは「/form/text」となる。
  • 各メソッドの返り値はString型とし、テンプレートのルートパス(src/main/resources/templates)からの相対パス(ファイル名)を返すようにする。「.html」は省略する。例えば、「return “form/text”」とした場合、「src/main/resources/templates/form/text.html」がテンプレートとして使われるようになる。
  • テンプレートに値を渡したい場合、ModelMap型のインスタンスにaddAttributeメソッドを使って値を保存する(とテンプレートで取り出すことができる)。
    キーと値のペアで保存する。ModelMap型のインスタンスは、メソッドの引数として指定することで取得することができる。
  • フォームからパラメータを受け取りたい場合は、メソッドの引数として指定し@RequestParamアノテーションを付加する。カッコ内はname属性で指定された値を指定する。

ビューテンプレート

  • テンプレートはThymeleafで記述する。
  • テキストノード(タグで囲まれた部分)にコントローラから受けとった値を埋め込むには、th:text属性をにキーを指定すれば良い。例: <タグ th:text=”${キー}”>埋め込まれる場所</タグ>
  • フォームで値を送りたい場合は、formタグを用いる。action属性で、送信先のURL(パス)を指定する。コントローラにおける区別のためにname属性を指定する。

フォームのサンプル

Spring Bootによるウェブアプリ開発の基礎(2)

HTMLフォームでデータを入力しよう!

後で書き直す。

  • formタグ、action属性、method属性
  • inputタグ、name属性
  • buttonタグ、type属性

他のトピックス。

  • selectを使うには?
  • radio、checkboxを使うには?
  • hiddenの使いどころ。
  • デフォルト値は?
  • ファイルのアップロードは?
  • GETとPOSTの違い
  • etc…

Spring Bootによるウェブアプリ開発の基礎(1)

本当はきっちり解説したいけど時間が足りないので、とりあえず動かすための最低限なポイント解説。

Gradle

Gradleはビルドツールの1つで、Androidアプリの開発でも使われるなど、メジャーになりつつある(すでにメジャーである)。

ポイント: Gradle以外にも色々あるけど、Gradle使っとけば多分大丈夫。

処理の流れ

Mvc

SpringのWeb MVCにおける処理の流れ(http://docs.spring.io/spring/docs/4.0.5.RELEASE/spring-framework-reference/html/mvc.html#mvc-servletより引用)

フロントコントローラがリクエストを適切なコントローラに渡し、コントローラが出力するデータをビュー(テンプレート)が表示するという仕組み。

ポイント: コントローラとテンプレートを用意すれば、ブラウザにページを表示させることができる。

アノテーション

クラスやメソッド、パッケージに対してメタデータとして付加情報を記入する機能(Wikipedia: アノテーションより)

大抵は「付加情報を記入する」だけではなく、アノテーションプロセッサによって様々な処理がなされる。Spring Bootでは、コントローラを作る時にアノテーションを使う等、様々なところで利用する。

ポイント: Spring Bootによるウェブアプリ開発ではアノテーションを良く使う。

コントローラの作成

  • クラスに@Controllerアノテーションをつけることで、このクラスがコントローラとして扱われる。
  • @RequestMappingアノテーションで、どのURLを対象とするかを指定する。
  • メソッドの戻り値はString型で、テンプレートのファイル名(拡張子は除く)を指定する。
  • メソッドの引数にModelMap型を加えると、テンプレートにモデルを渡すためのオブジェクトを得ることができる。addAttributeメソッドでキーと値を指定する。

ポイント: コントローラでは、URLに対応したメソッドを作る。メソッドはテンプレートを指定する。

テンプレートの作成

テンプレートエンジンとして標準ではThymeleafが使われる。

# Spring Boot 1.3.6ではThymeleaf 2.1.4(最新版ではない)が使われることに注意。

src/main/resources/templatesに作成する。

  • (Thymeleaf 2.1.4では)well-formedなXML文書でなければならないので注意する。つまり「タグは開始タグと終了タグを記述する(省略できない)」と「空要素(単独で現れるタグ、例えばhrタグ)はスラッシュをつける(例:<hr/>)」を守ればよい。
  • xmlns属性でThymeleafで使うプレフィックスを指定する。
  • th:text属性で、その要素のテキストノードに値を設定できる。
  • th:text属性では「${key}」とする。keyにはコントローラで指定したModelMapのキーを指定する。

ポイント: テンプレートでは、コントローラから送られてきたモデルをどこに表示するかをHTMLで記述する。