これから始めるSpringのwebアプリケーション

210 views

Published on

Spring Fest 2017の発表資料

Published in: Software
  • Be the first to comment

これから始めるSpringのwebアプリケーション

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

×
Save this presentationTap To Close