@Controller
public class HomeController {
@GetMapping("/") //최상위에서 호출. localhost:8080 바로 가면 이거 호출
public String home(){
return "home";
}
}
@Controller 여러개 등록 가능. 파일도 다른거임.
<!doctype html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div class="container">
<div>
<h1>Hello</h1>
<p>회원 기능</p>
<p>
<a href="/members/new">회원 가입</a>
<a href="/members">회원 목록</a>
</p>
</div>
</div>
</body>
</html>
home은 그냥 링크만 있는 간단한. thymeleaf는 써놓긴 했는데 쓰진 않은듯?
@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") //이거는 Get방식이 아니라 Post. html에서 보낼 때
public String create(MemberForm form){ // <form action="/members/new" method="post">이라고 되어있음
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/"; // Mapping에서 return은 템플릿 경로. redirect:/ 최상위로 보냄.
}
}
MemberController
재밌는게, 같은 이름이라도 Post랑 Get방식으로 따로 만들 수 있음.
<!doctype html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<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>
</body>
</html>
간단한 입력.
form으로 post 방식으로 name 키의 데이터를 보냄.
name이 서버로 가는 속성임.
아까 위에 MemberController에
@PostMapping("/members/new") //이거는 Get방식이 아니라 Post. html에서 보낼 때
public String create(MemberForm form){ // <form action="/members/new" method="post">이라고 되어있음
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/"; // Mapping에서 return은 템플릿 경로. redirect:/ 최상위로 보냄.
}
이렇게 MemberFomr form을 인자로 받는데
public class MemberForm {
private String name; //html의 name="name" <- 이 문자열과 같아야 매칭이 됨.
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
name속성의 값과 저 변수 이름이 같아야 매칭됨.
솔직히 나는 매개변수로 저렇게 하면 어떤 명시적으로 뭐 새로운 객체 만들지도 않았는데, 자동으로 객체 생성하고 넣어주는거 보면서 봤는데,
... 그것과 관련해서는 되게 나중에 배우는 듯?
일단은 하는 말씀이, getter setter가 있어야 한다고 함.
spring이 setter 호출해서 값을 넣어준다고 함.
'스프링 > 0. 입문, 전체방향' 카테고리의 다른 글
15강. H2 DB (0) | 2023.07.08 |
---|---|
14강. 간단한 웹 기능 -조회 (0) | 2023.07.08 |
12장. 스프링 빈 등록. 자바 코드로 직접 (0) | 2023.07.08 |
11장 스프링 빈 등록. 자동 의존관계 설정 (0) | 2023.07.08 |
10장 회원 서비스 테스트 (0) | 2023.07.08 |