Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
図解で学ぶ 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
1k
Spring & Spring Boot 基本のキ / Spring & Spring Boot for Beginner
otty375
4
1.9k
PlantUMLでさくさくモデリングライフ
otty375
0
340
Other Decks in Technology
See All in Technology
AI時代の強いチームの作り方
yuukiyo
26
16k
SmartHR Engineering Team Deck
smarthr
1
1.2k
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
250
ラジオの科学
frievea
0
280
Service Connect 上のサービスに ECS Service の外側から到達できなかった話
ota1022
1
150
モダンフロントエンド 開発研修
recruitengineers
PRO
3
560
OSPN.JPバージョンアップ作業進捗のご報告 / 20260801-osc26kyoto
akkiesoft
0
420
【CEDEC2026】グラフィックスエンジニアのためのニューラルシェーディング入門
cygames
PRO
0
120
【CEDEC2026】ゲームシナリオライターを支援するAIツール開発の実践 ― 設計とプロンプトの工夫 ―
cygames
PRO
1
770
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
1
970
ブラウザ研修 2026
recruitengineers
PRO
4
790
AI ネイティブな組織に Gemini Enterprise Agent Platform がなぜ必要なのか
asei
1
190
Featured
See All Featured
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
330
30 Presentation Tips
portentint
PRO
1
360
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
360
Bash Introduction
62gerente
615
220k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Color Theory Basics | Prateek | Gurzu
gurzu
0
410
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Everyday Curiosity
cassininazir
0
270
Building AI with AI
inesmontani
PRO
1
1.1k
Abbi's Birthday
coloredviolet
3
9.3k
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