Java Spring Framework part 3
Java Spring Framework
Web MVC를 바탕으로 회원관리 기능을 구현하자
Homepage
HomeController
@GetMapping("/")
public String home(){
return "home";
}
hello.html
<!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>
</body>
</html>
”/” 경로 대한 라우팅을 제공하는 Controller와 이에 대한 View이다. 기존에는 index.html을 보이도록 하였지만, Java Spring에서는 controller가 우선순위를 가지기 때문에, GetMapping(“/”)를 담당하는 HomeController가 먼저 실행된다. Homepage에는 회원 가입과 회원 목록 버튼이 존재하는데, 이를 클릭했을 때에 대한 Controller를 구현해야한다.
Member Management
Member Join
MemberController
@GetMapping("/members/new")
public String createForm(){
return "members/createMemberForm"
}
@PostMapping("/members/new")
//Java Spring에서 자동적으로 MemberForm 객체를 인자로 전달한다.
public String create(MemberForm form){
Member member=new Member();
member.setName(form.getName());
//회원관리 기능 수행을 위해 Member Service를 호출한다.
memberService.join(member);
return "redirect:/"
}
MemberForm
public class MemberForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
members/createMemberForm.html
<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 -->
회원 가입을 눌렀을 때, createForm 함수가 실행되며 이에 따라 createMemberForm.html이 랜더링 된다. 해당 html에서는 사용자로부터 이름을 입력받고, 이를 /members/new 로 POST 방식으로 HTTP request을 한다. 그러면 MemberController에 있는 @PostMapping(/members/new)가 설정된 함수가 실행된다.
Member List
회원 조회 기능 또한, Member Controller, Member Service를 활용해서 구현하면 된다.
Controller
@GetMapping("/members")
public String list(Model model){
List<Member> members=memberService.findAll();
model.addAttribute("members",members);
return "members/memberList"
}
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>
<!-- thymeleaf 문법에 의해 자동적으로 Model로 전달한 memberList를 이용해서 있는 각각의 member에 대한 랜더링을 자동으로 진행한다. -->
<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>
References
link: inflearn
댓글남기기