Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

10,568 views

Published on

Spring Fest 2017の発表資料

Published in: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

これから始める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マスコットアイコン(本スライド左下)が残されている場合に限り、本作品(またそれを元にした派生 作品)の複製・頒布・表示・上演を認めます。 • 非商用目的に限り、本作品(またそれを元にした派生作品)の複製・頒布・表示・上演を認めます。 • 本作品のライセンスを遵守する限り、派生作品を頒布することを許可します。

×