내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다.
섹션 5. 회원 관리 예제
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";
}
}
이와 연관된 간단한 홈 화면 html을 하나 만들었다.
home.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> <!-- /container -->
</body>
</html>
이후 브라우저에서 http://localhost:8080/ 로 접속하면 다음과 같은 화면을 볼 수 있다.
단순하게 회원 가입, 회원 목록 버튼 정도만 있다.
여기서 한가지 생각할점이 있었다. 이전에 welcomePage로 index.html을 등록시킨적이 있다.
그런데 왜? 이번에는 index.html이 아닌 home.html로 이동한 것 일까?
스프링은 URL이 들어오면 관련 controller가 있는지 먼저 찾아 본후 있다면 해당 메소드를 실행하고,
없다면 static 폴더에서 찾도록 되어있기 때문이다.
우리는 위에서 컨트롤러를 @Controller로 등록시켜주었기에 여기에 mapping되는 메소드를 실행해준 것 이다.
2. 회원 웹 기능 - 등록
맨 처음 http://localhost:8080/ 에 접속하면 다음과 같은 화면이 등장한다. 위에서 봤던 화면이다.
여기서 회원 가입 을 누른다고 해보자. 회원 가입은 html파일에서 다음과 같이 되어있었다.
<a href="/members/new">회원 가입</a>
따라서 /members/new 에게 요청을 하게 되며, 단순 링크인 a 태그를 사용했으니 Get 방식으로 요청을 하게된다.
다음은 요청을 받게되는 Controller 부분이다. 코드를 살펴보자.
// 생략
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService){
this.memberService = memberService;
}
@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:/";
}
}
@GetMapping("/members/new") 에 해당되는 요청이 들어왔기 때문에 해당 메소드가 실행된다.
createForm() 메소드 에서는 members/createMemberForm 을 return 하기 때문에 해당 html파일을 찾아 반환하게 된다.
createMemberForm.html
<!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>
여기서 정보를 입력한 후 submit에 해당되는 등록 버튼을 누르면 {name : value} 쌍으로 키와 값이 쌍으로 되어 "/members/new" 에 POST방식으로 전달된다.
이는 위에서 봤던 Controller 내부의 @PostMapping("/members/new") 에 해당되게 된다. 해당 메소드를 호출한다.
public String create(MemberForm form) {
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/";
}
인자로 MemberForm의 form을 받았다. 이때 우리가 아까 등록한 {name : value} 쌍이 Spring에 의해 form 내부에 자동으로 등록된다.
(아마 JSP에서 했던 setBean과 비슷한 원리이지 않을까? 싶다)
이렇게 정보를 담고 있는 form으로부터 getter 메소드를 이용하여 정보를 추출한 후, setName으로 member에 저장시켜 DB에 저장한다.
3. 회원 웹 기능 - 조회
컨트롤러에 다음과 같은 조회기능의 메소드를 추가하였다.
@GetMapping("/members")
public String list(Model model) {
List<Member> members = memberService.findMembers();
model.addAttribute("members", members);
return "members/memberList";
}
model에 반환받은 리스트목록 members를 등록한 후, "members/memberList" 로 반환한다.
다음은 memberList.html이다. 타임리프 문법을 적용하여 위에서 Model로 사용한 members를 사용하여 출력해주고 있다.
<!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>
'BackEnd > Spring' 카테고리의 다른 글
[Spring] AOP : Aspect Oriented Programming (0) | 2022.01.14 |
---|---|
[Spring] 스프링 DB 접근 기술 (0) | 2022.01.14 |
[Spring] 스프링 빈과 의존관계 (0) | 2022.01.12 |
[Spring] 회원 관리 예제 - 백엔드 개발 (0) | 2022.01.12 |
[Spring] 스프링 웹 개발 기초 (0) | 2022.01.12 |
댓글