๋ฐฑ์๋(Back-End) ๊ฐ๋ฐ/SpringBoot
[SpringBoot] 5_ํ์๊ด๋ฆฌ-์น MVC ๊ฐ๋ฐ
rabo93
2025. 2. 26. 00:51
ํ์ ์น ๊ธฐ๋ฅ - ํ ํ๋ฉด ์ถ๊ฐ
- ํ ์ปจํธ๋กค๋ฌ
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";
}
}
- ํ์ ๊ด๋ฆฌ ํผ HTML
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>HOME</title>
</head>
<body>
<div>
<h1>Hello Spring</h1>
<p>ํ์ ๊ธฐ๋ฅ</p>
<p>
<a href="/members/new">ํ์๊ฐ์
</a>
<a href="/members">ํ์์กฐํ</a>
</p>
</div>
</body><!-- /container -->
</html>
์ฐธ๊ณ ) ์ปจํธ๋กค๋ฌ๊ฐ ์ ์ ํ์ผ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์์ ๋จผ์ ์ปจํธ๋กค๋ฌ๋ถํฐ ์ฐพ๊ณ , ์์ผ๋ฉด index.html ํ์ผ ์คํ๋จ
ํ์ ์น ๊ธฐ๋ฅ - ๋ฑ๋ก
- ํ์ ๋ฑ๋ก ์ปจํธ๋กค๋ฌ
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 {
// ์์กด๊ด๊ณ ์ฃผ์
(ํ๋ ์ฃผ์
)
// @Autowired private MemberService memberService;
private MemberService memberService;
@Autowired // ์์กด๊ด๊ณ ์ฃผ์
(์์ฑ์ ์ฃผ์
)
public MemberController(MemberService memberService) { //์์ฑ์ ์์ฑ ๋จ์ถํค : alt + Insertํค
this.memberService = memberService;
}
//-----------------------------------------------------
@GetMapping("/members/new")
public String createForm() {
return "members/createMemberForm";
}
@PostMapping("/members/new")
public String createForm(MemberForm form) { //MemberForm์ ๋ด์์ ์์
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/";
}
}
- ํ์ ๋ฑ๋ก ํผ HTML
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>ํ์๊ฐ์
</title>
</head>
<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 {
private String name;
//getter, setter //๊ฐ์ฒด ์งํฅ์ ํน์ฑ : ์บก์ํ (Encapsultation)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//์คํ๋ง์ด html์์ data๋ฐ์๊ฑธ setName์ ํธ์ถํด์ name์ผ๋ก ๋ด์๊ฑธ,
//getName์ ํธ์ถํ์ฌ name์ผ๋ก ๋ฆฌํดํด์ค
}
ํ์ ์น ๊ธฐ๋ฅ - ์กฐํ
- ํ์ ์ปจํธ๋กค๋ฌ์์ ์กฐํ ๊ธฐ๋ฅ
@GetMapping("/members")
public String list(Model model) {
List<Member> members = memberService.findMembers();
model.addAttribute("members", members);
return "members/memberList";
}
- ํ์ ๋ชฉ๋ก HTML
<!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>
- ์คํํด์ ํ์๊ฐ์ ํ ํ์์กฐํ ํ๋ฉด
์ฐธ๊ณ ) ์๋ฒ ์ข ๋ฃ ํ ์ฌ์คํ ํ๋ฉด ๊ฐ์ ํ๋ ๋ฐ์ดํฐ ๋ฆฌ์ ๋จ (๋ฉ๋ชจ๋ฆฌ์์ ์ ์ฅํ๊ธฐ ๋๋ฌธ)