Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
Springで始めるWebApplication / Start Spring Web Application
yachiy
November 20, 2019
0
61
Springで始めるWebApplication / Start Spring Web Application
yachiy
November 20, 2019
Tweet
Share
More Decks by yachiy
See All by yachiy
yachiy
1
18
yachiy
0
100
yachiy
0
47
yachiy
0
150
yachiy
1
710
Featured
See All Featured
dougneiner
119
7.8k
brad_frost
156
6.4k
jmmastey
8
530
carmenhchung
26
1.3k
revolveconf
200
9.6k
3n
163
22k
cassininazir
347
20k
orderedlist
PRO
329
35k
bermonpainter
342
26k
tammielis
237
23k
lara
590
61k
pauljervisheath
196
15k
Transcript
4QSJOHͰ࢝ΊΔ 8FCΞϓϦέʔγϣϯ
·ͣॳΊͱΓ͋͑ͣ৮ͬͯಈ͔͢
IUUQTTUBSUTQSJOHJP 4QSJOHΞϓϦέʔγϣϯΛ࢝ΊΔʹ͋ͨͬͯ؆୯ʹܗ Λ࡞Δ͜ͱ͕Ͱ͖Δެࣜ
(SBEMFͷϓϩδΣΫτͱͯ͠࡞ ˞(SBEMFʹ͍ͭͯޙड़ ݴޠ+BWBΛ༻ 4QSJOH#PPUͷόʔδϣϯΛ༻ ύοέʔδ໊ʹͳΔ ΞϓϦέʔγϣϯ໊
4QSJOH8FCΛ͍͍ͨͷͰݕࡧ ϘοΫεʹʮ8FCʯͱ͍Εɺ 4QSJOH8FCΛબ ԡԼ͢Δͱμϯϩʔυ͕࢝·Δ ʢΞϓϦέʔγϣϯ໊[JQʣ
ల։͢Δͱ͜Μͳײ͡
࣮͏ಈ͔ͤΔ
HSBEMFXCPPU3VO ల։ͨ͠σΟϨΫτϦ·ͰλʔϛφϧͰҠಈͯ͠ Λ࣮ߦ
͜Ε͕ग़͍ͯΕ0, (SBEMFͷϓϩάϨεόʔతͳͷˋͰࢭ·Δ͜ͱ͋Δ͔ʜ
IUUQMPDBMIPTU
Τϥʔϖʔδ͕දࣔ͞ΕΔ ˠԿઃఆ͍ͯ͠ͳ͍ͷͰવͷਖ਼͍͠ڍಈ ͋Θͯͳͯ͘0,
λϒʹͪΌΜͱ4QSJOHͷGBWJDPO͕දࣔ͞Ε͍ͯΔͣ
ͪͳΈʹCPPU3VO͍ͯ͠ͳ͍ঢ়ଶͰIUUQMPDBMIPTU ʹΞΫηεͯ͠ʢ$ISPNFͷ߹ʣ͜͏ͳΔͷͰ4QSJOH ͷΤϥʔϖʔδ͕ग़Δͷ͏·͘ߦͬͯΔূڌ
ಈ͘ಈ͍ͨ
ͰͳΜͰಈ͔͘Α͘Θ͔Βͳ͍
ݸͣͭݟ͍ͯ͘ Ұؾʹදࣔ͞ΕΔͱ಄·ΘΒͳ͘ͳͬͯ Θ͔Βͳ͘ͳΔͷͰ
࠶ܝ
·ͣ͜͜
None
൴ΒϏϧυπʔϧͱ͍͍·͢
ϏϧυπʔϧJTԿ
Ϗϧυʹؔ͢Δ͜ͱΛΑ͠ͳʹͬͯ͘ΕΔ
wίϯύΠϧ wςετ w੩తղੳ wϥΠϒϥϦͷґଘཧ FUDʜ ͠Ϗϧυπʔϧ͕ͳ͔ͬͨΒʜ ϑΝΠϧͣͭखͰKBWBDίϚϯυୟ͍ͯ ίϯύΠϧͨ͠Γςετ࣮ߦͨ͠Γʜ ࣗͰݸͣͭϥΠϒϥϦམͱ͖ͯͯ͠ Ϋϥεύε௨ͨ͠Γʜ
ͪΐͬͱઢ
खಈͰ+BWBϑΝΠϧΛίϯύΠϧ͢Δʹ
)FMMP8PSMEKBWB public class HelloWorld { public static void main(String[] args)
{ System.out.println("Hello World!"); } } ˢͷϑΝΠϧΛAKBWBD)FMMP8PSMEKBWBAͰίϯύΠϧ ˠ)FMMP8PSMEDMBTT͕ੜ͞ΕΔ ˠAKBWB)FMMP8PSMEAΛ࣮ߦ ˠ)FMMP8PSME͕ग़ྗ͞ΕΔ
ݸݸ+BWBϑΝΠϧΛίϯύΠϧͯ͠ΫϥεϑΝΠϧ Λੜ͢Δͷ͠ΜͲ͍ ·ͱΊͯ໘ݟͯ͘ΕΔϏϧυπʔϧΛར༻͠ͳ͍खͳ͍
ศརͳͷͰੋඇϏϧυπʔϧΛ׆༻͍͖͍ͯͨ͠
͡Ό͋Կ͕ҧ͏ͷ͔ ˠهड़͕ҧ͏ɺͰ͖Δ͜ͱ͕ҧ͏ʢࠩҟׂѪʣɺྺ࢙͕ҧ͏
ޙൃ ˠଞͷϏϧυπʔϧͷ͍͍ͱ ͜ΖΛٵऩͯ͠ੜ
ࠓ͔Β࢝ΊΔͳΒ(SBEMFͰྑ͍ʢݸਓͷײͰ͢ʣ
࣍͜͜
ࠓճ Ͱॻ͚͘Ͳ Ͱ4QSJOHΛར༻Ͱ͖ΔʢࠞࡏՄʣ
࣍͜͜
όʔδϣϯʹΑͬͯαϙʔτ͍ͯ͠Δ w +BWBͷόʔδϣϯ w ґଘ͍ͯ͠ΔϥΠϒϥϦͷόʔδϣϯ ͕ҧͬͨΓ͢Δ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ ࡉ͔͍ࠩҟϦϦʔεϊʔτΛࢀর
࣍͜͜
(SPVQ "SUJGBDUˠQBDLBHF DPNZBDIJZTQSJOH JOUSPEVDUJPO DPNZBDIJZTQSJOHJOUSPEVDUJPO ΞϓϦέʔγϣϯͷݖརݩॴଐɺ ཧମ੍ ΞϓϦέʔγϣϯ໊ ԼʹιʔεΛهड़͍ͯ͘͠
࣍͜͜
Α͘͏ґଘؔͱͬ͘͟Γ֓ཁʢओ؍ʣ 4QSJOH8FC 8FCαʔϏεΛͭ͘ΔͨΊʹ༻͍Δجૅత ͳػೳ 4QSJOH%BUB+1" σʔλϕʔεͷଓɺೖग़ྗɺσʔλૢ࡞ ͳͲʹؔ͢Δػೳ -PNCPL (FUUFS 4FUUFSͷهड़ΛΞϊςʔγϣϯΛ
ॻ͘͜ͱͰলུͰ͖Δ
ݱঢ়ʢ࠶ܝʣ
)FMMP8PSME͍ͬͯ͘
ͨΊʹ·ͣ։ൃڥΛ४උ͢Δ
+BWB 4QSJOH (SBEMFͳ։ൃʹ ͕͓͢͢Ί $PNNVOJUZΤσΟγϣϯͳΒແྉ ʢͦͯ͠ී௨ʹ͏ʹࠔΒͳ͍ʣ
ิ͕ϦΞϧλΠϜ ίʔυδΣωϨʔτ͕ॆ࣮͍ͯ͠Δ ϓϥάΠϯ๛ ผͷݴޠͷऔΓѻָ͍ FUDʜɹɹɹ ͓͢͢ΊϙΠϯτʢओ؍ʣ Λଧͬͨͱ͖ʹ͏͜Ε͕ग़ͯΔ
IUUQTXXXKFUCSBJOTDPNJEFBEPXOMPBE ͓͍ͷ04Λબ ͪ͜ΒΛબ
μϯϩʔυ͕ऴΘͬͨΒΠϯετʔϥʹ ैͬͯΠϯετʔϧ
ىಈ
ॳճͳͷͰಛʹJNQPSU͢Δ ઃఆͳ͍ͣ
͏ςʔϚΛબɻ ͨͩഎܠࠇͷ΄͏͕ѹతʹʹ༏͍͠ͷͰͦΕΒΛਪ ˠ͋ͱͣͬͱ/FYU͔Βͷ4UBSUVTJOHJOUFMMJK*%&"Λબ
ͪ͜ΒΛબ 0QFOΛ͓ͨ͠Β4QSJOH*OJUJBMJ[SͰੜͨ͠ ϓϩδΣΫτʢϑΥϧμʣΛબ
͜ͷνΣοΫϘοΫε֎͢ͱ ىಈͷʹग़ͯ͜ͳ͘ͳΔ 5JQT͕ग़͖ͯͨΒோΊͯྑ͍͔ ཁΒͳ͚Ε$MPTF
࠷ॳTZODͱͳ͍ͬͯͯಡΈࠐΈ ऴΘΔͱTVDDFTTGVMʹͳΔ
ᶃ ᶄ ᶅ ൪߸ͷॱ൪Ͱԡ͍ͯ͘͠ ͱCPPU3VO͕Ͱͯ͘Δɻ ͜ΕΛԡ͢ͱίϚϯυ ͰHSBEMFXCPPU3VO͠ ͨͷͱಉ༷ʹΞϓϦέʔ γϣϯΛىಈͰ͖Δ
։ൃڥͷ४උྃ
վΊͯ)FMMP8PSME
IUUQMPDBMIPTUʹΞΫηε͢Δͱ )FMMP8PSMEͱը໘ʹग़ྗ͍ͨ͠
None
!4QSJOH#PPU"QQMJDBUJPO ˠ༩ͨ͠Ϋϥε͕4QSJOH#PPUͷΞϓϦέʔγϣϯͰ͋Δ͜ͱΛද͢
!4QSJOH#PPU"QQMJDBUJPO ˠ༩ͨ͠Ϋϥε͕4QSJOH#PPUͷΞϓϦέʔγϣϯͰ͋Δ͜ͱΛද͢ ˠ!$POpHVSBUJPO !&OBCMF"VUP$POpHVSBUJPO !$PNQPOFOU4DBOͳͲΛ༩ͨ͠ͷͱಉٛ
࣮ࡍத͜Μͳײ͡
ˠ DPOUSPMMFSύοέʔδΛ࡞Δ
$POUSPMMFSˠਓؒͱγεςϜͷڥք
ˠ )FMMP8PSME$POUSPMMFS ΫϥεΛ࡞
Ͱ͖ͨΫϥεʹॲཧΛهड़͍ͯ͘͠
package com.yachiy.spring.introduction.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/")
public class HelloWorldController { @GetMapping("") public String helloWorld() { return "Hello World"; } } Ͱ͖ͨΒCPPU3VOͯ͠IUUQMPDBMIPTUʹΞΫηε
ղઆ
)FMMP8PSME͕ग़ྗ͞ΕΔ
package com.yachiy.spring.introduction.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/")
public class HelloWorldController { @GetMapping("") public String helloWorld() { return "Hello World"; } }
!3FTU$POUSPMMFS ˠ8FC"1*༻ʢ+TPOͷσʔλΛฦ͢ʣͷίϯτϩʔϥͰ༻ ˠΓίϯςϯπʢ+TPOͱ͔9.-ͳͲ͕Α͘༻͍ΒΕΔʣ
package com.yachiy.spring.introduction.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/")
public class HelloWorldController { @GetMapping("") public String helloWorld() { return "Hello World"; } }
!3FRVFTU.BQQJOH ˠ!3FRVFTU.BQQJOHͷҾͷύεʹΞΫηε͞ΕͨΒर͏ ˠϝιουͰͳ͘$POUSPMMFSΫϥεࣗମʹ͚ͭΔ͜ͱͰϝιο υͰͷ.BQQJOHͷهड़Λলུͯ͠ॻ͚Δ
package com.yachiy.spring.introduction.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/")
public class HelloWorldController { @GetMapping("") public String helloWorld() { return "Hello World"; } }
!(FU.BQQJOH ˠ(FUͰࢦఆ͞ΕͨύεʹΞΫηε͞ΕͨΒर͏ ˠ!3FRVFTU.BQQJOH WBMVFlQBUIz NFUIPE3FRVFTU.FUIPE(&5 Ͱಉ͡
࣮ݧ package com.yachiy.spring.introduction.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("/hello") public class HelloWorldController { @GetMapping("/hello1") public String helloWorld1() { return "Hello World1"; } @GetMapping("/hello2") public String helloWorld2() { return "Hello World2"; } }
ˠ☓ IFMMPˠ☓ IFMMPˠ☓ IFMMPˠ☓ IFMMPIFMMPˠ)FMMP8PSME IFMMPIFMMPˠ)FMMP8PSME ͜͏ͳΔͣʜ
㱻 package com.yachiy.spring.introduction.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("/hello") public class HelloWorldController { @GetMapping("/hello1") public String helloWorld1() { return "Hello World1"; } @GetMapping("/hello2") public String helloWorld2() { return "Hello World2"; } } package com.yachiy.spring.introduction.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloWorldController { @GetMapping("/hello/hello1") public String helloWorld1() { return "Hello World1"; } @RequestMapping(value = “/hello/hello2”, method = RequestMethod.GET) public String helloWorld2() { return "Hello World2"; } } ಉ͜͡ͱΛ࣮ݱͯ͠Δ ˠͩͬͨΒࠨͷ΄͏͕Θ͔Γ͍͢
)FMMP8PSMEऴΘΓ
࣍ը໘Λฦ͢
plugins { id 'org.springframework.boot' version '2.1.8.RELEASE' id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java' } group = 'com.yachiy.spring' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' testImplementation 'org.springframework.boot:spring-boot-starter-test' } CVJMEHSBEMF ґଘؔͷՃΛ͍ͨ͠߹EFQFOEFODJFTʹՃ͍ͯ͘͠
ˠςϯϓϨʔτΤϯδϯ ˠܗͷ)5.-ʹ4QSJOHଆͷϩδοΫΛຒΊࠐΉͨΊͷͷͱ ࠓཧղ͓͚ͯ͠0, 5IZNFMFBG ৄ͘͠ IUUQTXXXUIZNFMFBGPSHEPDUVUPSJBMTVTJOHUIZNFMFBG@KBIUNM
package com.yachiy.spring.introduction.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public
class HelloWorldController { @GetMapping("/") public String hello(Model model) { model.addAttribute("value", "͜Μʹͪ"); return "hello"; } } )FMMP8PSME$POUSPMMFSKBWB
package com.yachiy.spring.introduction.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public
class HelloWorldController { @GetMapping("/") public String hello(Model model) { model.addAttribute("value", "͜Μʹͪ"); return "hello"; } } )FMMP8PSME$POUSPMMFSKBWB !3FTU$POUSPMMFSˠ!$POUSPMMFS Ҿʹ.PEFMΛड͚औΔ ଐੑʹ,FZͱ7BMVFΛՃ
!$POUSPMMFS ˠը໘Λฦ͢ίϯτϩʔϥͰ༻ ˠΓ7JFXͷભҠઌ ˠࠓճͷ߹IFMMPΛฦ٫͍ͯ͠ΔͷͰ UFNQMBUFTIFMMPIUNM͕ର
ˠը໘ʹΛड͚ͨ͢ΊͷΠϯλʔϑΣʔε ˠNPEFMBUUSJCVUF LFZ WBMVF Λݺͼग़ͯ͠Λड͚͢ ˠଞͷड͚͠ํҎԼͷυΩϡϝϯτࢀর IUUQTEPDTTQSJOHJPTQSJOHEPDTDVSSFOUKBWBEPDBQJ PSHTQSJOHGSBNFXPSLVJ.PEFMIUNM .PEFM
SFTPVSDFTUFNQMBUFTԼʹIFMMPIUNMΛ࡞ ˠSFTPVSDFTUFNQMBUFT͕ςϯϓϨʔτஔ͖ ˠωετՄೳʢྫɿUFNQMBUFTHSPVQ UFNQMBUF/BNFIUNMʣ
<!doctype html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8" /> <title>Hello Thymeleaf</title>
</head> <body> <h1 th:text="${value}"></h1> </body> </html> IFMMPIUNM
<!doctype html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8" /> <title>Hello Thymeleaf</title>
</head> <body> <h1 th:text="${value}"></h1> </body> </html> \LFZ^ͰWBMVFΛࢀরͰ͖Δ IFMMPIUNM
͜ΕͰCPPU3VOˠMPDBMIPTUʹΞΫηε͢Δͱʜ
ͨ͠จࣈྻ͕ը໘ʹදࣔ͞ΕΔ͜ͱΛ֬ೝ
ը໘ͷදࣔ·ͰͰ͖ͨ
·ͱΊ
4QSJOHΛͬͯ؆୯ͳ8FCΞϓϦέʔγϣϯΛߏஙͨ͠ ˠ࣍ۀΞϓϦέʔγϣϯͷҰൠతͳΞʔΩςΫνϟͰ͋Δ ΞʔΩςΫνϟʹֶ͍ͭͯͿʢͱ͍͍͔ʣ