[스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술] 16강
https://inf.run/hisy 강의를 수강하고 작성하는 게시물입니다.
1. 회원 가입 서비스 매핑하기
src - main - java - Hello.hellospring - controller - MemberController.java
기존의 작성해놨던 기능 밑에 연결 코드를 추가한다.
@Controller
public class MemberController {
private MemberService memberService;
@Autowired
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
@GetMapping("/members/new")
public String createForm(){
return "members/creatMemberForm";
}
}
/members/new 링크된 곳과 매핑을 해주고 반환하는 주소를 적어준다.
2. 회원가입 화면
같은것 끼리 모여있는것이 관리하기도 좋으므로 resources - templates 폴더 아래 members 폴더를 만들어 준다.
폴더 안에 반환하는 주소와 동일하게 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>
빌드를 해서 run을 하면 화면이 생긴것을 알 수 있다.
근데 등록을 해도 다음 화면으로 넘어가지 않는 껍데기 화면이다.
3. 회원등록 컨트롤러
controller 파일 아래에 MemberForm 객체를 만든다.
private String name; 선언하고 getter setter를 만든다.
name 이 같으므로 createMemberForm.html 의 name과 매칭될 것이다.
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을 추가한다.
@Controller
public class MemberController {
private MemberService memberService;
@Autowired
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
@GetMapping("/members/new")
public String createForm(){
return "members/creatMemberForm";
}
@PostMapping("/members/new")
public String create(MemberForm form) {
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/";
}
}
우리가 만들었던 memberService와 결합시켜주는 부분이다.
재빌드 및 실행하고 localhost에서 이름을 입력하고 등록하면 메인화면으로 돌아온다.
저장이 된게 맞지만 다른 컨트롤러를 조합해야 된다.
4. 원리 간단 설명
localhost에서 회원가입버튼을 누르면 GET방식을 (주소를 통해 접속) 통해서 /members/new에 접속하게 된다.
@GetMapping(“/members/new”) 가 써있는
MemberController의 createForm을 거치게 된다.
내용 아무것도 없이 반환만 하므로 members/createMemberForm으로 이동한다.
members/createMemberForm를 템플릿에서 찾는다. 뷰 리절버라는 애가 찾아 선택한다. 타임리프 템플릿 엔지니어를 랜더링 한다.
그 후 HTML을 뿌려진다.
createMemberForm에서 ‘<form>’ 태그를 입력하는 것은 값을 입력할 수 있는 html 태그이다.
input 태그에서 id는 레이블을 연결해주는 것이고 name은 input데이터가 서버로 넘어갈때 키값이 된다.
만약 localhost에서 이름을 입력하고 등록버튼을 누르면 form태그의 action과 method를 확인한다.
입력한 데이터가 /members/new에 post방식으로 넘어온다.
MemberController에서 @PostMapping한 이유가 이것이다.(@GetMapping은 조회할때 보통 사용한다.)
즉, 등록을 하면 createForm이 아닌 create가 선택된다.
MemberForm에 String 형식의 이름이 setName을 통해 들어온다.
만약 잘 들어왔는지 확인하려면
System.out.println("member = " + member.getName());
위 코드를 return 사이에 입력하고 localhost에서 이름 등록을 하면 등록된 이름을 IntelliJ 터미널에서 보여줄 것이다.
댓글 남기기