프로그래밍 끄적끄적
[SpringBoot] 스프링 입문 - 회원 웹 기능 본문
* 홈화면
홈화면을 보여주기 위한 HomeController와 템플릿에 home.html을 만든다.
초기 홈화면에서는 회원가입과 회원목록으로 넘어갈 수 있는 링크를 보여준다.
컨트롤러가 있는지 먼저 탐색한 후에 없으면 static 파일을 찾기 때문에 index.html이 아닌 home.html이 보여지게 된다.
* 등록
등록 기능을 구현하기 위해 MemberController에 "/create/new"에 대한 컨트롤러인 createForm()을 만든다.
1
2
3
4
|
@GetMapping("/members/new")
public String createForm() {
return "members/createMemberForm";
}
|
cs |
그리고 템플릿에 member 폴더를 만들고 createMemberForm.html을 만든다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<!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>
|
cs |
Line 9) 이름을 name="name"으로 설정한 것을 잘 기억해두자.
폼을 저장하기 위한 MemberForm 클래스를 만든다. 이때 필드로 form의 name 값들을 사용한다.
(getter, setter를 만들기 위한 단축키는 Ctrl+Insert 이다.)
1
2
3
4
5
6
7
8
9
10
11
|
public class MemberForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) { //form 안의 name=name 인 value 값이 저장됨
this.name = name;
}
}
|
cs |
Line 2) 필드에 name을 선언한다.
폼에서 action="/member/new", post 방식으로 설정했으므로 @PostMapping("/member/new")의 컨트롤러를 만들어준다.
1
2
3
4
5
6
7
8
9
|
@PostMapping("/members/new")
public String create(MemberForm form) { //MemberForm 형태로 form 을 받아옴
Member member = new Member();
member.setName(form.getName()); //MemberForm 클래스에 저장된 name 의 value 값
memberService.join(member);
return"redirect:/";
}
|
cs |
Line 2) HTML form에 작성된 값을 MemberForm으로 받아온다.
Line 4) 미리 설정한 getter로 input[name="name"]의 value 값을 가져온다.
Line 8) return "redirect:[넘겨줄 경로]"
[넘겨줄 경로]로 다시 컨트롤러를 탐색하여 클라이언트에게 전달한다.
* 조회
조회를 할 수 있도록 컨트롤러를 작성한다.
1
2
3
4
5
6
|
@GetMapping("/members")
public String list(Model model) {
List<Member> members = memberService.findMembers(); //모든 회원 정보를 가져옴
model.addAttribute("members", members); //html 에 members 라는 이름으로 전달
return "members/memberList";
}
|
cs |
Line 3) MemberService의 findMembers() 메소드를 통해 모든 회원 정보를 가져온다.
Line 4) members라는 이름으로 HTML에 전달한다.
템플릿의 members 폴더 안에 memberList.html을 만든다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<!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>
|
cs |
Line 14) th:each="member: ${members}"
thymeleaf 문법으로, members에 있는 항목들을 하나씩 member라는 이름으로 꺼내와 루프를 돈다.
Line 15) th:text="${member.id}"
Member 인스턴스의 id를 가져와(getId) innerText 역할을 수행한다.
Line 16) th:text="${member.name}"
Member 인스턴스의 name을 가져와(getName) innerText 역할을 수행한다.
'백엔드 > 스프링' 카테고리의 다른 글
[SpringBoot] 스프링 빈 (0) | 2021.09.01 |
---|---|
IntelliJ 단축키(Window) (0) | 2021.08.03 |
스프링 입문 - 컴포넌트 스캔과 자동 의존관계 설정 (0) | 2021.07.29 |
[SpringBoot] 스프링 입문 - 회원 관리 예제(서비스 테스트) (0) | 2021.07.28 |
[SpringBoot] 스프링 입문 - 회원 관리 예제(서비스) (0) | 2021.07.28 |