회원 관리 예제 - 웹 MVC 개발
- 회원 웹 기능 - 홈 화면 추가
- 회원 웹 기능 - 등록
- 회원 웹 기능 - 조회
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
}
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
<div>
<h1>Hello Spring</h1>
<p>회원 기능</p>
<p>
<a href="/members/new">회원 가입</a>
<a href="/members">회원 목록</a>
</p>
</div>
</div> <!-- /container -->
</body>
</html>
@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:/";
}
package hello.hellospring.controller;
public class MemberForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = 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>
<과정>
1. home.html 에서 '회원 가입' 누르면 get 방식으로 /members/new URL 주소를 가져옴
2. 컨트롤러에 get 매핑 찾음, createForm 메소드 실행
3. 리턴값을 viewResolver가 받아서 createMemberForm.html에 연결,
thymeleaf 엔진이 html을 렌더링함
4. input 태그에서 사용자에게 입력값을 받음,
'등록' 누르면 /members/new에 post 방식으로 name 키값을 가져옴
5. 컨트롤러에 post 매핑 찾음, create 메소드 실행
6. MemberForm에 정의된 name이 키값으로 입력값 받음
7. form에 있는 입력값 get해서 member 객체에 set하기
8. memberService 이용해서 회원 등록
9. 등록 후 redirect:/로 home 화면 복귀
@GetMapping("/members")
public String list(Model model) {
List<Member> members = memberService.findMembers();
model.addAttribute("members", members);
return "members/memberList";
}
<!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> <!-- Member 에 getId 접근 -->
<td th:text="${member.name}"></td> <!-- Member 에 getName 접근 -->
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>