이 글은 김영한 님의 스프링 입문 강좌 수강 후에 정리한 글입니다.
(https://www.inflearn.com/course/스프링-입문-스프링부트/dashboard)
회원 관리 예제 - 웹 MVC 개발
● 회원 웹 기능 - 홈 화면 추가
1. 홈 컨트롤러 추가
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";
}
}
@GetMappng("/")로 인해 "http://localhost:8080/" 요청이 들어오게 되면 문자열 "home"이 반환되고 이로 인해 ViewResolver가 home.html을 찾아 처리한다.
2. 회원 관리용 홈
<!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>
templates 폴더에 home.html로 저장한다.
3. 실행 결과
예전에 static 파일로 welcome 페이지를 위해서 index.html을 만들었다.
하지만 이제는 "http://localhost:8080/" 요청이 들어오게되면 스프링 컨테이너에서 HomeController를 찾기 때문에 더 이상 static 파일인 index.html이 쓰이지 않고, 대신 templates 폴더에 존재하는 home.html이 welcome 페이지로 쓰이게 된다.
만약 HomeController가 삭제된다면 원래대로 정적 콘텐츠인 index.html이 welcome 페이지로 쓰일 것이다.
● 회원 웹 기능 - 등록
1. 회원 등록 폼 개발
회원등록 폼 컨트롤러
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
@GetMapping(value = "/members/new")
public String createForm() {
return "members/createMemberForm";
}
}
@GetMappng("/members/new")로 인해 /members/new 요청이 들어오게되면 문자열 "members/createMemberForm"이 반환되고 이로 인해 ViewResolver가 createMemberForm.html을 찾아 처리한다.
회원 등록 폼 HTML (resources/templates/members/createMemberForm)
실행 결과
이름에 내용을 입력하고 등록 버튼을 누르면 createMemberForm.html의 <form action="/members/new" method="post">로 인해 "/members/new"에 post 방식으로 데이터가 전달된다.
그리고 post 방식으로 요청하였기 때문에 뒤에 나올 @PostMapping에 매핑될 것이다.
2. 회원 등록 컨트롤러
웹 등록 화면에서 데이터를 전달 받을 폼 객체
package hello.hellospring.controller;
public class MemberForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
위의 실행 결과에서 등록 버튼을 눌렀을 때 데이터들을 전달받을 폼 객체이다.
회원 컨트롤러에서 회원을 실제 등록하는 기능
//MemberController에 추가
@PostMapping("/members/new")
public String create(MemberForm form) {
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/";
}
등록 화면에서 등록 버튼을 누르면 post 요청이 일어나기 때문에 @PostMapping에 매핑되어 create 메소드가 실행될 것이다.
Member 객체를 만들고 MemberForm에서 전달된 name을 설정한 후, memberService의 회원가입 기능을 활용하면 실제로 회원이 등록되게 된다.
그 후 "redirect:/"가 반환되어 초기 화면으로 리다이렉트 될 것이다.
● 회원 웹 기능 - 조회
회원 컨트롤러에서 조회 기능
//MemberController에 추가
@GetMapping("/members")
public String list(Model model) {
List<Member> members = memberService.findMembers();
model.addAttribute("members", members);
return "members/memberList";
}
@GetMappng("/members")로 인해 /members 요청이 들어오게 되면 문자열 "members/memberList"가 반환되고 이로 인해 ViewResolver가 memberList.html을 찾아 처리한다.
Model 객체는 html 파일로 데이터를 전달할 때 사용한다. 여기서는 model에 members를 넣어서 전달함으로써 회원 조회 결과가 나타날 수 있게 한다.
회원 리스트 HTML (resources/templates/members/membersList)
<!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>
model로 넘어온 members 객체를 each를 사용하여 각 member의 id와 name을 알아내어 화면에 나타내 준다.
실행결과
'개발 > 스프링 입문' 카테고리의 다른 글
(스프링 입문) 7. AOP (0) | 2022.09.25 |
---|---|
(스프링 입문) 6. 스프링 DB 접근 기술 (0) | 2022.09.24 |
(스프링 입문) 4. 스프링 빈과 의존관계 (0) | 2022.09.24 |
(스프링 입문) 3. 회원 관리 예제 (0) | 2022.09.24 |
(스프링 입문) 2. 스프링 웹 개발 기초 (0) | 2022.09.24 |