狠狠撸

狠狠撸Share a Scribd company logo
1
これから始める
SpringのWebアプリケーション
2017/11/24
日本Springユーザ会
土岐 孝平
自己紹介
? 土岐 孝平
? Springを使用したシステム開発の支援
? JavaやSpringの研修の講師
? 書籍の執筆
2
[改訂新版]Spring入門
はじめに
? 発表の趣旨
– Springを使ったことがない人が、Springを使用したWebア
プリケーションのイメージを掴み、独学するとっかかりを得
る
? 想定する前提知識
– 新人研修などで、Javaを使って簡単なWebアプリケーショ
ンを作ったことがある
3
アジェンダ
? Webアプリケーションの設計
? Springの役割
? サンプルプログラム
? Spring Bootで動かす
4
Webアプリケーションとは?
? (大雑把にいうと)ブラウザで操作するアプリケーション
– Amazon、インターネットバンキング...
– ブラウザとサーバがHTTPで通信
– 業務的なデータはデータベースに保存
– HTMLで画面を表示
5
ブラウザ
サーバ
Webアプリ データベース
例)商品データ、
注文データ
<html>
???
</html>
HTTP通信
SQL
取得データ、
保存結果
リクエスト
レスポンス
Webアプリケーションの設計~MVC
? MVCパターン
– 画面周りのプログラムの設計の考え方
– Model:業務的なロジック?データ
– View:画面(HTMLデータの生成)
– Controller:リクエストからレスポンスまでの流れを制御
6
ブラウザ データベース
Controller
View
Model
①リクエスト ②業務ロジック呼出
③View呼出
④業務データを参照
⑤レスポンス(HTML)
Webアプリケーションの設計~レイヤー
? レイヤー(層)
– プログラムを層として分割する考え方
? 上位の層のプログラムが下位の層のプログラムに依存する(使用する)
– Webアプリの一般的な層
? プレゼンテーション層:画面周りの処理
? サービス層:業務ロジック
? データアクセス層:データアクセス(SQL実行)の処理
7
プレゼンテーション層
サービス層
データアクセス層
Controller
Service
(業務ロジック)
Dao
(データアクセス)
ブラウザ
View
Entity
(業務データ)
データベース
依存の方向
Modelに該当
処理の流れ
8
ブラウザ データベース
アジェンダ
? Webアプリケーションの設計
? Springの役割
? サンプルプログラム
? Spring Bootで動かす
9
JavaのWebアプリ
? Javaが標準で用意するAPI
– Servlet、JDBC、???
? プログラムや設定ファイルの記述が冗長で面倒
10
ブラウザ データベース
サーバ(Tomcatなど)
Servlet JDBC
Webアプリ
SpringのWebアプリ
? Java標準のAPIをラップして、より簡単にWebアプリ
を作るための仕組みを提供
11
ブラウザ データベース
サーバ(Tomcatなど)
Servlet
Spring
JDBC
Webアプリ
Springの役割(1/2)
? 面倒で冗長な部分をSpringがやってくれる
– データベース周り
? リソースの取得?解放、トランザクション制御、例外処
理...
– 画面周り
? リクエストとControllerの紐付、入力チェック...
– その他
? 認証?認可、キャッシュ、トレースログ...
12
開発者は、
業務的な部分に注力できる
? サーバの起動と同時に、(リクエストを受付けるために)必要なオブジェクト
を生成し、オブジェクト同士を紐づけてくれる(依存するオブジェクトをフィ
ールドに代入してくれる<Dependency Injection>)
– 通常は、Controller?Service?Daoを生成し、紐づけてもらう
? Springが生成したオブジェクトは、DIコンテナで管理され、さまざまな機能
を付加できる
DIコンテナ
Springの役割(2/2)
13
Controller Service Dao データベースブラウザ
AOPを使って処理を挟み
こむ
処理を付加することがで
きる (トランザクション制
御、トレースログ...)
DIコンテナで管理されて
るオブジェクトを「Bean」と
呼ぶ
アジェンダ
? Webアプリケーションの設計
? Springの役割
? サンプルプログラム
? Spring Bootで動かす
14
サンプルプログラム
? 題材
– 書籍の一覧をブラウザで表示
15
book(書籍)
id(ID)
title(タイトル)
auther(著者)
publish_date(発売日)
price(値段)
【データベースのテーブル】
登場するプログラム
16
?Controller?
BookController
?Service?
BookService
?Dao?
BookDao
?View? ※
bookList.html
?Entity?
Book
※テンプレートエンジンは
Thymeleafを使用
ブラウザ データ
ベース
処理の流れ
17
ブラウザ データベース
?Entity?Book
18
※残りのGetter、Setterは省略しています
?Dao?BookDao
19
ステレオタイプアノテーション
(Beanの登録を指示するアノテーション)
インジェクションを指示するアノテーション
DBアクセスを簡易に行えるBean
(Springが提供)をインジェクション
【補足】今どきのインジェクション
20
コンストラクタインジェクション。
バージョン4.3からは、
@Autowiredを省略可能
フィールドをfinalにすることで、
コンストラクタ呼出し後に、
中身を変更できないようにする
?Service?BookService
21
ステレオタイプアノテーション
トランザクション制御の指示
Daoをインジェクション
?Controller?BookController
22
Serviceをインジェクション
ステレオタイプアノテーション
「books」という名前で
検索結果を格納
?View?bookList.html
23
※Thymeleafのテンプレートファイル
処理の流れ
24
ブラウザ データベース
アジェンダ
? Webアプリケーションの設計
? Springの役割
? サンプルプログラム
? Spring Bootで動かす
25
動かすために必要なこと
? サーバのインストール
– Tomcatなどのサーバをインストール
? 裏方のBeanの設定
– トランザクションマネージャ、データソース、
JdbcTemplate、etc...
26
手軽に動かすことができない
Spring Bootの紹介
? Springをより便利にするプロダクト
? 主な特徴
– サーバのインストールをしなくてもWebアプリを起動でき
る(Tomcatが内蔵されている)
– 裏方のBeanの設定を自動で行ってくれる
? 「オートコンフィグレーション」と呼ぶ
27
手軽に動かすことができる
Spring Bootを利用するために必要なこと
? ライブラリのダウンロード
– Maven※の設定ファイル(pom.xml)で「spring-boot-starter-xxx」のア
ーティファクトをいくつか指定
– 必要なライブラリがまとめてダウンロードされる
? mainメソッドを持つクラスを作成
– @SpringBootApplicationを付ける
? オートコンフィグレーションを有効にするなどの意味合いを持った
アノテーション
? mainメソッドを作ってSpringApplicationクラスのrun
メソッドを呼出す
– 引数で@SpringBootApplicationを付けたクラスを指定
28
※依存する(使用する)ライブラリを管理できるツール。 アーティファクトという単位でライブラリが管理されている。
pom.xml
29
※少し簡略化しています
各種アーティファクトの
バージョンなどが
定義されている
データアクセス周りの
様々なアーティファクトが
定義されている
画面周りの
様々なアーティファクトが
定義されている
mainメソッドを持つクラス
30
オートコンフィグレーションを
有効にするなどの意味を持つ
runメソッドを実行
mainメソッドを実行すれば、
Tomat&DIコンテナが起動して、
必要なBeanが生成?関連づけられて、
Webアプリが利用可能になる
ソースの雛形をダウンロードできる
? SPRING INITIALIZR
– pom.xmlとmainのクラスを生成してくれるサイト
31
データベースについて(1/2)
? 手軽に開発する際は、組込データベースが便利
– データベースのインストールが不要
– 「H2」という製品が有名
? Spring BootでWebアプリを起動するとH2の管理画面が自動で使える
– https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-
sql.html#boot-features-sql-h2-console
32
【URL】http://localhost:8080/h2-console
【DBのURL】jdbc:h2:mem:testdb
【ユーザ】sa
【パスワード】(空白)
データベースについて(2/2)
? DDLや初期データのスクリプト
– クラスパスのルートに、「schema.sql」「data.sql」という名前でスクリ
プトを配置すると、Webアプリ起動時に自動で実行される。
33
【schema.sql】
【data.sql】
デモ
34
さいごに
? このあとのハンズオンに参加しましょう
– Hello Worldレベルのハンズオンなので、本セッションが難しかったという方も
心配ありません。
? 自宅で試してみましょう
– 本セッションのサンプルプログラム
? https://goo.gl/S9Hmy3
? ダウンロードして解凍後、EclipseなどのIDEでMavenプロジェクトとして
インポート
– あとはプロジェクト内の「ReadMe.txt」を参照
? 基本をきちんと勉強しましょう
– 狠狠撸Share「今さら聞けないDIとSpring」
? /KouheiToki/dispring
– 書籍
? [改訂新版]Spring入門(技術評論社)
? Spring徹底入門(翔泳社)
35
36
ご清聴ありがとうございました
その他リソース
? Spring Bootのオートコンフィグレーションの説明
– https://docs.spring.io/spring-
boot/docs/current/reference/htmlsingle/#using-boot-
auto-configuration
? Thymeleafのマニュアル
– http://www.thymeleaf.org/doc/tutorials/2.1/usingthyme
leaf.html
37
38
ライセンスについて
? JSUGマスコットアイコン(本スライド左下)が残されている場合に限り、本作品(またそれを元にした派生
作品)の複製?頒布?表示?上演を認めます。
? 非商用目的に限り、本作品(またそれを元にした派生作品)の複製?頒布?表示?上演を認めます。
? 本作品のライセンスを遵守する限り、派生作品を颁布することを许可します。

More Related Content

これから始める厂辫谤颈苍驳の飞别产アプリケーション