Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
図解で学ぶ Spring MVC / Architecture of Spring MVC
Search
otty375
August 28, 2019
Technology
31k
13
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
図解で学ぶ Spring MVC / Architecture of Spring MVC
otty375
August 28, 2019
More Decks by otty375
See All by otty375
Spring Boot 2.3 の Liveness & Readiness Probes 対応 について調べてみた / Spring Boot 2.3 Liveness & Readiness Probes
otty375
2
1.1k
Spring & Spring Boot 基本のキ / Spring & Spring Boot for Beginner
otty375
4
1.9k
PlantUMLでさくさくモデリングライフ
otty375
0
350
Other Decks in Technology
See All in Technology
トークン化預金DCJPYの取り組みと活用ユースケース
finengine
0
250
freeeにおけるSoftware Factory
freee
PRO
0
480
What Is JetBrains Air
x5gtrn
PRO
0
170
AIをリアル世界に解き放つ 〜M5Stack×AIであなたのアイディアを手の平に〜
hamadakoji
1
460
野良MCPサーバーを排除せよ!MCPサーバーのガバナンス
yukiogawa
1
230
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
230
「私が一番顧客に詳しい」を捨てる~ 全員が一次情報に精通する開発チームをつくり、PMが次のボトルネックへ染み出すまで
kaminashi
3
2.4k
AWSDirectConnectの構築の進め方を整理してみた
masa_my
1
170
React改造してみた
tsukina_7mochi
0
160
野蛮なアジャイル [サイボウズ発!]組織の常識を覆した反骨のスクラム実践記 / Barbaric Agile - Enterprise Agile Study Group
ama_ch
0
140
LLM Content Moderationを支える評価・改善ループの実践
suikabar
2
350
Draft AIエージェントの トークン消費を最小化する 8つの原則
kinopeee
5
1.7k
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
174
15k
Navigating Weather and Climate Data
rabernat
0
560
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
510
Documentation Writing (for coders)
carmenintech
77
5.6k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Paper Plane
katiecoart
PRO
5
54k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
500
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
320
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
580
Transcript
ਤղͰֶͿ Spring MVC 2019/08/28 JSUGษڧձ 2019ͦͷ8 Spring for Beginner #jsug
͍͚ @otty_375
ࣗݾհ • ͍͚ʢ@otty_375ʣ • ITاۀͰWebγεςϜ։ൃӡ༻ • Springྺ2΄Ͳ
ࠓͷΰʔϧ • Spring MVC ͷΞʔΩςΫνϟ͕ΠϝʔδͰ͖Δ • Spring MVC ͷجຊతͳ࣮ํ๏͕ཧղͰ͖Δ
ʘࠓޙSpring MVC Λֶश͢Δ্ͰͷʹͳΕʗ
ΞδΣϯμ 1. Spring MVC ͱ 2. Spring MVC ͷΞʔΩςΫνϟ 3.
Spring MVC ͷجຊతͳ࣮ํ๏ 4. Spring MVC ͷͦͷଞͷػೳ 5. ·ͱΊ
Spring MVC ͱ
Spring MVC ͱ • WebΞϓϦέʔγϣϯΛ։ൃ͢Δࡍʹར༻͢Δ ϑϨʔϜϫʔΫ • ϑϩϯτίϯτϩʔϥύλʔϯΛ࠾༻ • ϦΫΤετϚοϐϯάͳͲΛΞϊςʔγϣϯΛ
ར༻ͯ͠ઃఆͰ͖Δ
ϑϩϯτίϯτϩʔϥύλʔϯ • શͯͷϦΫΤετͷΤϯτϦʔϙΠϯτͱͯ͠ ϑϩϯτίϯτϩʔϥΛ༻͢Δ • దͳׂͷΦϒδΣΫτʹॲཧΛҕৡ͢Δ • ϝϦοτɿϦΫΤετʹؔ͢Δॲཧͷڞ௨Խ
Spring MVC ͷ ΞʔΩςΫνϟ
ॲཧͷྲྀΕ ҎԼͷαϯϓϧΞϓϦΛྫʹઆ໌͠·͢ • ϦΫΤετɿ/greet [GET] • Ϩεϙϯεɿgreet.html • ࣌ؒଳʹΑͬͯҟͳΔݴ༿Λฦ͢
Spring MVC ͷΞʔΩςΫνϟ %JTQBUDIFS 4FSWMFU )BOEMFS.BQQJOH ᶃ ᶄ ᶅ ᶆ
ᶇ ᶈ ᶉ ᶊ ᶋ ։ൃऀ͕࣮͢Δ෦ Spring MVC ෦ ᶌ ᶎ ᶍ )BOEMFS"EBQUFS 7JFX3FTPMWFS 7JFX )BOEMFS IUNMFUD
ॲཧͷྲྀΕ ͦͷ̍ %JTQBUDIFS 4FSWMFU )BOEMFS.BQQJOH ᶄ ᶅ ᶆ ᶇ ᶈ
ᶉ ᶊ ᶋ ᶌ ᶎ ᶍ )BOEMFS"EBQUFS 7JFX3FTPMWFS 7JFX )BOEMFS IUNMFUD ᶃ
DispatcherServlet • શͯͷϦΫΤετͷΤϯτϦʔϙΠϯτͱͳΔ αʔϒϨοτΫϥε • ༷ʑͳׂͷΠϯλʔϑΣʔεΛݺͼग़ͯ͠ ϑϨʔϜϫʔΫશମΛ੍ޚ͍ͯ͠Δ
ॲཧͷྲྀΕ ͦͷ̍ %JTQBUDIFS 4FSWMFU )BOEMFS.BQQJOH ᶄ ᶅ ᶆ ᶇ ᶈ
ᶉ ᶊ ᶋ ᶌ ᶎ ᶍ )BOEMFS"EBQUFS 7JFX3FTPMWFS 7JFX )BOEMFS IUNMFUD ᶃ ΫϥΠΞϯτ ʮHSFFUΛऔಘ͍ͨ͠Ͱ͢ʯ %JTQBUDIFS4FSWMFU ʮྃղͰ͢ʯ
ॲཧͷྲྀΕ ͦͷ̎ %JTQBUDIFS 4FSWMFU )BOEMFS.BQQJOH ᶄ ᶅ ᶆ ᶇ ᶈ
ᶉ ᶊ ᶋ ᶌ )BOEMFS"EBQUFS 7JFX3FTPMWFS 7JFX )BOEMFS IUNMFUD ᶃ ᶍ ᶎ
HandlerMapping • ༻͢ΔHandlerΛಛఆ͢Δׂͷ ΠϯλʔϑΣʔε • ύεHTTPϝιουͳͲΛݩʹɹɹ ͲͷHandlerΛݺͼग़͔͢ಛఆ͢Δ
Handler • ϦΫΤετʹର͢Δ۩ମతͳॲཧΛߦ͏ׂ • ։ൃऀ͕࣮͢Δ෦ • ϦΫΤετύεHTTPϝιουͳͲͷɹɹɹ ϚοϐϯάઃఆΛߦ͏
ॲཧͷྲྀΕ ͦͷ̎ %JTQBUDIFS 4FSWMFU )BOEMFS.BQQJOH ᶄ ᶅ ᶆ ᶇ ᶈ
ᶉ ᶊ ᶋ ᶌ )BOEMFS"EBQUFS 7JFX3FTPMWFS 7JFX )BOEMFS IUNMFUD ᶃ ᶍ ᶎ )BOEMFS.BQQJOH ʮ(SFFU$POUSPMMFSͷHSFFUϝιουͰ͢ʯ Ͳͷ)BOEMFS͔ʁ ύε )551ϝιου ύϥϝʔλ )FMMP$POUSPMMFS ͷIFMMPϝιου IFMMP (&5 ͳ͠ (SFFU$POUSPMMFS ͷHSFFUϝιου HSFFU (&5 ͳ͠ ʜ ʜ ʜ ʜ %JTQBUDIFS4FSWMFU ʮHSFFUͷ(&5ϝιουͷ)BOEMFSΛ ڭ͍͑ͯͩ͘͞ʯ
ॲཧͷྲྀΕ ͦͷ̏ %JTQBUDIFS 4FSWMFU )BOEMFS.BQQJOH ᶄ ᶅ ᶆ ᶇ ᶈ
ᶉ ᶊ ᶋ ᶌ )BOEMFS"EBQUFS 7JFX3FTPMWFS 7JFX )BOEMFS IUNMFUD ᶃ ᶍ ᶎ
HandlerAdapter • HandlerΛݺͼग़ׂ͢ͷΠϯλʔϑΣʔε • ݺͼग़͠લޙʹదٓඞཁͳॲཧΛߦ͏ • ϦΫΤετϘσΟΛJavaΦϒδΣΫτʹม • Bean Validation
ͳͲ
Handler • ϦΫΤετʹର͢Δ۩ମతͳॲཧΛߦ͏ׂ • ViewΛ༻͢Δ߹ɺΓViewͷ໊લΛ ฦ͠ը໘ͷදࣔʹඞཁͳσʔλModelͷதʹ ٧Ίͯฦ͢
Model • Handler͔ΒViewςϯϓϨʔτʹΛड͚͢ ͨΊʹར༻͞ΕΔΠϯλʔϑΣʔε • ModelͷதͷใView͕ݟΕΔҐஔʹஔ͔Ε ViewͷΈཱͯʹΘΕΔ
ॲཧͷྲྀΕ ͦͷ̏ %JTQBUDIFS 4FSWMFU )BOEMFS.BQQJOH ᶄ ᶅ ᶆ ᶇ ᶈ
ᶉ ᶊ ᶋ ᶌ )BOEMFS"EBQUFS 7JFX3FTPMWFS 7JFX )BOEMFS IUNMFUD ᶃ )BOEMFS"EBQUFS ʮඞཁͳલॲཧ͓͍ͯͨ͠ͷͰ ॲཧΑΖ͓͘͠ئ͍͠·͢ʯ ᶍ ᶎ ᶆ %JTQBUDIFS4FSWMFU ʮ(SFFU$POUSPMMFSͷHSFFUϝιουͷ ݺͼग़͠Λ͓ئ͍͠·͢ʯ
ॲཧͷྲྀΕ ͦͷ̏ %JTQBUDIFS 4FSWMFU )BOEMFS.BQQJOH ᶄ ᶅ ᶆ ᶇ ᶈ
ᶉ ᶊ ᶋ ᶌ )BOEMFS"EBQUFS 7JFX3FTPMWFS 7JFX )BOEMFS IUNMFUD ᶃ )BOEMFS ʮॲཧऴΘΓ·ͨ͠ 7JFXͷ໊લHSFFUͰ͢ ඞཁͳσʔλ.PEFMʹ٧Ί͓͖ͯ·ͨ͠ʯ ᶍ ᶎ .PEFM message = "hello" ᶉ )BOEMFS"EBQUFS ʮඞཁͳޙॲཧ͓͖ͯ͠·ͨ͠ 7JFXͷ໊લHSFFUͰ͢ʯ .PEFM
ॲཧͷྲྀΕ ͦͷ̐ %JTQBUDIFS 4FSWMFU )BOEMFS.BQQJOH ᶄ ᶅ ᶆ ᶇ ᶈ
ᶉ ᶊ ᶋ ᶌ )BOEMFS"EBQUFS 7JFX3FTPMWFS 7JFX )BOEMFS IUNMFUD ᶃ ᶍ ᶎ
ViewResolver • Handler͔Βฦ٫͞ΕͨView໊ΛݩʹɺView ͷ࣮ΫϥεΛಛఆ͠ViewͷશύεΛฦ͢ ׂ
ॲཧͷྲྀΕ ͦͷ̐ %JTQBUDIFS 4FSWMFU )BOEMFS.BQQJOH ᶄ ᶅ ᶆ ᶇ ᶈ
ᶉ ᶊ ᶋ ᶌ )BOEMFS"EBQUFS 7JFX3FTPMWFS 7JFX )BOEMFS IUNMFUD ᶃ ᶍ 7JFX3FTPMWFS ʮUFNQMBUFTHSFFUIUNMͰ͢ʯ ᶎ ᶊ %JTQBUDIFS4FSWMFU ʮ7JFX໊͕HSFFUͳͷͰ͕͢ ۩ମతͳύεΛڭ͍͑ͯͩ͘͞ʯ
ॲཧͷྲྀΕ ͦͷ̑ %JTQBUDIFS 4FSWMFU )BOEMFS.BQQJOH ᶄ ᶅ ᶆ ᶇ ᶈ
ᶉ ᶊ ᶋ ᶌ )BOEMFS"EBQUFS 7JFX3FTPMWFS 7JFX )BOEMFS IUNMFUD ᶃ ᶎ ᶍ
View • ϨεϙϯεσʔλͷੜΛߦ͏ׂ • ModelͷதͷσʔλΛࢀরͯ͠ςϯϓϨʔτ ʹຒΊࠐΉ
ॲཧͷྲྀΕ ͦͷ̑ %JTQBUDIFS 4FSWMFU )BOEMFS.BQQJOH ᶄ ᶅ ᶆ ᶇ ᶈ
ᶉ ᶊ ᶋ ᶌ )BOEMFS"EBQUFS 7JFX3FTPMWFS 7JFX )BOEMFS IUNMFUD ᶃ 7JFX ʮ.PEFMͷσʔλͱUFNQMBUFTHSFFUIUNM ΛͬͯϨεϙϯεΛੜ͠·͢ʯ ᶎ ᶍ .PEFM message = "hello" <p th:text=“${message}"></p> ᶌ %JTQBUDIFS4FSWMFU ʮϨεϙϯεͷੜΛ ͓ئ͍͠·͢ʯ
ॲཧͷྲྀΕ ͦͷ̑ %JTQBUDIFS 4FSWMFU )BOEMFS.BQQJOH ᶄ ᶅ ᶆ ᶇ ᶈ
ᶉ ᶊ ᶋ ᶌ )BOEMFS"EBQUFS 7JFX3FTPMWFS 7JFX )BOEMFS IUNMFUD ᶃ %JTQBUDIFS4FSWMFU ʮϨεϙϯεͱͯ͠HSFFUIUNMΛฦ͠·͢ʯ ᶎ ᶍ 7JFX ʮϨεϙϯε͕͠·ͨ͠ʯ ᶍ <p>hello</p>
Spring MVC ͷ جຊతͳ࣮ํ๏
جຊతͳ࣮ํ๏ Spring BootΛ༻͢Δ߹Λྫʹ͠·͢ 1. Spring MVCͷґଘՃ 2. Controller࣮ 3. View࣮
• Mavenͷ߹ɿpom.xmlͷdependenciesʹՃ 1. Spring MVC ͷґଘՃ <dependencies> <dependency>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!— ͦͷଞඞཁͳґଘΛهࡌɻࠓճςϯϓϨʔτΤϯδϯʹThymeleafΛ༻ --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> </dependencies>
2. Controller࣮ package com.example.demo.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping; @Controller public class GreetController { @GetMapping("/greet") public String greet(Model model) { String message = getGreetMessage(); model.addAttribute("message", message); return "greet"; } } GreetController.java
2. Controller࣮ ͦͷ̍ package com.example.demo.controller; import org.springframework.stereotype.Controller; import
org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class GreetController { @GetMapping("/greet") public String greet(Model model) { String message = getGreetMessage(); model.addAttribute("message", message); return "greet"; } } GreetController.java #FBOొ͢ΔͨΊʹ Ϋϥεʹ!$POUSPMMFSΛ༩͢Δ
2. Controller࣮ ͦͷ̎ package com.example.demo.controller; import org.springframework.stereotype.Controller; import
org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class GreetController { @GetMapping("/greet") public String greet(Model model) { String message = getGreetMessage(); model.addAttribute("message", message); return "greet"; } } GreetController.java ϦΫΤετͱͷϚοϐϯάઃఆΛ ϝιουʹ༩͢Δ ଞʹ!1PTU.BQQJOH !1VU.BQQJOHͳͲ
2. Controller࣮ ͦͷ̐ package com.example.demo.controller; import org.springframework.stereotype.Controller; import
org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class GreetController { @GetMapping("/greet") public String greet(Model model) { String message = getGreetMessage(); model.addAttribute("message", message); return "greet"; } } GreetController.java 7JFXͰ༻͢ΔσʔλΛηοτ͢ΔͨΊͷ .PEFMΛҾͰड͚औΔ
2. Controller࣮ ͦͷ̏ package com.example.demo.controller; import org.springframework.stereotype.Controller; import
org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class GreetController { @GetMapping("/greet") public String greet(Model model) { String message = getGreetMessage(); model.addAttribute("message", message); return "greet"; } } GreetController.java ඞཁͳϏδωεϩδοΫΛ࣮ ʢ͜͜Ͱݱࡏ࣌ࠁʹԠͯ͡ҟͳΔϝοηʔδΛ ฦ͢Α͏ͳϝιουʣ
2. Controller࣮ ͦͷ̐ package com.example.demo.controller; import org.springframework.stereotype.Controller; import
org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class GreetController { @GetMapping("/greet") public String greet(Model model) { String message = getGreetMessage(); model.addAttribute("message", message); return "greet"; } } GreetController.java 7JFXͰ༻͢ΔσʔλΛ.PEFMʹηοτ͢Δ ʢ͜͜ͰNFTTBHFͱ͍͏໊લͰΛηο τʣ
2. Controller࣮ ͦͷ̑ package com.example.demo.controller; import org.springframework.stereotype.Controller; import
org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class GreetController { @GetMapping("/greet") public String greet(Model model) { String message = getGreetMessage(); model.addAttribute("message", message); return "greet"; } } GreetController.java 7JFX໊Λฦ͢
3. View࣮ <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta
charset="UTF-8" /> <title>Greet</title> </head> <body> <p th:text="${message}"></p> </body> </html> greet.html ʢςϯϓϨʔτΤϯδϯɿThymeleafʣ
3. View࣮ <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta
charset="UTF-8" /> <title>Greet</title> </head> <body> <p th:text="${message}"></p> </body> </html> greet.html ʢςϯϓϨʔτΤϯδϯɿThymeleafʣ )BOEMFSͰฦ٫͞ΕΔ7JFX໊ʹରԠ͢ΔϑΝΠϧΛ ࡞
3. View࣮ <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta
charset="UTF-8" /> <title>Greet</title> </head> <body> <p th:text="${message}"></p> </body> </html> greet.html .PEFMʹηοτ͞ΕΔΛຒΊࠐΉهࡌ ʢ͜ͷ߹ల։͞ΕΔͱ QIFMMPQͷΑ͏ʹͳΔʣ ʢςϯϓϨʔτΤϯδϯɿThymeleafʣ
ิɿඞཁͳConfiguration • ࠓճSpring BootͷAutoConfigurationػೳʹ ΑΓɺඞཁͳConfigurationͳͲSpring Boot ͕༻ҙ͍ͯ͠ΔσϑΥϧτͷͷΛ༻͢Δ͜ ͱͱ͠·͢
ิɿSpring Initializr • Spring Boot ϓϩδΣΫτͷܗΛੜͰ͖Δ • ࠷ॳ͔ΒDependenciesʹՃ͢Δ͜ͱ͕Մೳ • https://start.spring.io/
•
ิɿRestController • REST APIͷ߹@RestControllerΛ༻ • ϝιουͷΓView໊Ͱͳ͘ɹɹɹ JavaΦϒδΣΫτͳͲͷϨεϙϯεϘσΟ • JavaΦϒδΣΫτ <->
JSON ͷม HandlerAdapterͷ෦ͰߦΘΕΔ
Spring MVC ͷ ͦͷଞͷػೳ
Spring MVC ͷͦͷଞͷػೳ • ҎԼͷΑ͏ͳجຊతͳػೳ͋Γ·͢ • όϦσʔγϣϯ • ྫ֎ϋϯυϥ •
RESTΫϥΠΞϯτʢRestTemplateʣ • ςετʢMockMvcʣ ͳͲ
Spring MVC ͷͦͷଞͷػೳ • ҎԼͷΑ͏ͳԠ༻తͳػೳ͋Γ·͢ • ηογϣϯͰͷσʔλཧ • ඇಉظॲཧ •
ࠃࡍԽɹͳͲ
·ͱΊ
Spring MVC ·ͱΊ • WebΞϓϦέʔγϣϯΛ։ൃ͢Δࡍʹར༻͢Δ ϑϨʔϜϫʔΫ • DispatcherServlet͕શϦΫΤετͷΤϯτϦʔ ϙΠϯτͰϑϨʔϜϫʔΫશମΛ੍ޚ͍ͯ͠Δ •
ϦΫΤετϚοϐϯάͳͲΛΞϊςʔγϣϯΛ ར༻ͯ͠ઃఆͰ͖Δ
Spring MVC ͷΞʔΩςΫνϟ %JTQBUDIFS 4FSWMFU )BOEMFS.BQQJOH ᶃ ᶄ ᶅ ᶆ
ᶇ ᶈ ᶉ ᶊ ᶋ ։ൃऀ͕࣮͢Δ෦ Spring MVC෦ ᶌ ᶎ ᶍ )BOEMFS"EBQUFS 7JFX3FTPMWFS 7JFX )BOEMFS IUNMFUD
ࢀߟࢿྉ
ࢀߟࢿྉʢॻ੶ʣ • SpringపఈೖʢגࣜձࣾNTTσʔλ / ஶʣ
ࢀߟࢿྉʢWebʣ • Spring ެࣜαΠτ • https://spring.io/ • ॳΊͯͰ30Ͱ͔ΔSpring 5 &
Spring Boot 2Φʔ όʔϏϡʔ • https://www.slideshare.net/ masatoshitada7/30spring-5-spring- boot-2-103523666
EOP