[Spring][ํ˜ผ๊ณต] 5. ์›น MVC ๊ฐœ๋ฐœ - ํšŒ์› ์›น ๊ธฐ๋Šฅ

2021. 9. 4. 18:46ยท๐Ÿ“ Language/โœ JAVA

์›น MVC ๊ฐœ๋ฐœ

1. ํšŒ์› ์›น ๊ธฐ๋Šฅ

์ „์ฒด ํŒŒ์ผ ๊ตฌ์กฐ

 

1) ํ™ˆ ํ™”๋ฉด ์ถ”๊ฐ€

http://localhost:8080/

  • ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ •์  ํŒŒ์ผ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค.
  • ์ฆ‰, ์›ฐ์ปด ํŽ˜์ด์ง€(index.html)๊ฐ€ ์žˆ์–ด๋„ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์ •์  ํŽ˜์ด์ง€๋Š” ๋ฌด์‹œ๋œ๋‹ค.
package hello.hello.spring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

    @GetMapping("/")
    public String home() {
        return "home";
    }
}

 

2) ํšŒ์› ๋“ฑ๋ก

http://localhost:8080/members/new

  • form: ๊ฐ’์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” HTML ํƒœ๊ทธ์ด๋‹ค.
  • ์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋“ฑ๋ก ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด action URL๋กœ post ๋ฐฉ์‹์„ ํ†ตํ•ด name์„ ๋„˜๊ธด๋‹ค๋Š” ๋ง์ด๋‹ค.
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
  <form action="/members/new" method="post">
    <div class="form-group">
      <label for="name">์ด๋ฆ„</label>
      <input type="text" id="name" name="name" placeholder="์ด๋ฆ„์„
์ž…๋ ฅํ•˜์„ธ์š”">
    </div>
    <button type="submit">๋“ฑ๋ก</button>
  </form>
</div> <!-- /container -->
</body>
</html>

 

package hello.hello.spring.controller;

public class MemberForm {
    // createMemberForm์˜ name๊ณผ ๋งคํ•‘๋œ๋‹ค.
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

  • @GetMapping: URI(URL)๊ฐ€ ๊ฐ€์ง„ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰(์กฐํšŒ) ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„ ์ธก์— ์š”์ฒญํ•˜๋Š” ํ˜•ํƒœ์ด๋‹ค.
  • @PostMapping: HTML์˜ FORM ๊ตฌ์„ฑ ์š”์†Œ(ํ˜น์€ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ)๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ ์ „์†กํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
package hello.hello.spring.controller;

import hello.hello.spring.domain.Member;
import hello.hello.spring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class MemberController {

    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }

    @GetMapping("/members/new")
    public String createForm() {
        return "members/createMemberForm";
    }

    @PostMapping("/members/new")
    public String create(MemberForm form) {
        Member member = new Member();
        member.setName(form.getName());
        memberService.join(member);

        // ๋‹ค์‹œ ํ™ˆ ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
        return "redirect:/";
    }
}

 

3) ํšŒ์› ์กฐํšŒ

http://localhost:8080/members

  • members๋ฅผ ๋ชจ๋‘ ๋ชจ๋ธ์— ๋‹ด์•„ ํ™”๋ฉด์— ๋„˜๊ธฐ๋Š” ๋™์ž‘์ด๋‹ค.
@GetMapping("/members")
public String list(Model model) {
    List<Member> members = memberService.findMembers();
    model.addAttribute("members", members);
    return "members/memberList";
}

 

  • thymeleaf๊ฐ€ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ๋ชจ๋ธ ์•ˆ์— ๋‹ด๊ธด members๋ฅผ ๊บผ๋‚ด ํ•˜๋‚˜์”ฉ ๊ฐ์ฒด๋ฅผ ๋Œ๋ฉฐ id์™€ name์„ ์ถœ๋ ฅํ•œ๋‹ค.
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
  <div>
    <table>
      <thead>
      <tr>
        <th>#</th>
        <th>์ด๋ฆ„</th>
      </tr>
      </thead>
      <tbody>
      <tr th:each="member : ${members}">
        <td th:text="${member.id}"></td>
        <td th:text="${member.name}"></td>
      </tr>
      </tbody>
    </table>
  </div>
</div> <!-- /container -->
</body>
</html>
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Language/โœ JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (2) ์ˆœ์ˆ˜ JDBC
  • [Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (1) H2 DB ์„ค์น˜
  • [Spring][ํ˜ผ๊ณต] 4. ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„ - (2) ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ
  • [Spring][ํ˜ผ๊ณต] 4. ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„ - (1) ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •
Blxxming
Blxxming
CS ์ง€์‹๊ณผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ฐฐ์šด ๊ฒƒ, ๊ฒฝํ—˜ํ•œ ๊ฒƒ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • Blxxming
    ๐Ÿ’ก๋ฒˆ๋œฉ๐Ÿ’ก
    Blxxming
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • Tech Interview
    • ๐Ÿ“š Tech (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ Language (73)
        • โœ Language (6)
        • โœ C & C++ (11)
        • โœ C# (19)
        • โœ JAVA (37)
      • ๐Ÿ“ Game (43)
        • โœ Computer Graphics (2)
        • โœ Unity (14)
        • โœ Unreal (26)
        • โœ (1)
      • ๐Ÿ“ Book (34)
        • โœ Effective (3)
        • โœ Game Server (16)
        • โœ Clean Code (14)
        • โœ (1)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Blxxming
[Spring][ํ˜ผ๊ณต] 5. ์›น MVC ๊ฐœ๋ฐœ - ํšŒ์› ์›น ๊ธฐ๋Šฅ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”