회원 관리 예제
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
}
- 보통 기본 URL + / 이면 메인 페이지 (Welcome Page)로 URL 요청이 오면 Controller에서 관련 내용이 있는지 찾는다.
- Controller에 관련 내용이 있다면 그 화면을 띄우게 되고 없다면 static/index.html을 Welcome Page로 띄우게 된다.
@Controller
public class MemberController {
private 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:/";
}
}
public class MemberForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
// == members/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>
- 동작 흐름
- localhost:8080/members/new URL로 요청을 보낸다.
- Controller에서 Get 방식 /members/new 관련 내용인 createForm()을 찾고 실행한다.
- createForm() 메소드에 의해 ViewResolver가 resources/templates/members/createMemberForm.html을 찾는다.
- thymleaf 템플릿 엔진이 html 내용을 렌더링해서 화면에 보여준다.
- html의 <form> 태그는 값을 입력하는 태그로 내용을 보면 /members/new URL로 post 방식을 사용하고 있다.
- <input> 태그의 name의 값이 서버로 넘어올 때 KEY로 넘어온다.
- <input> 태그의 name의 값이 서버로 넘어올 때 KEY로 넘어온다.
- html에서 post 방식으로 넘어온 데이터가 Controller에서 Post 방식 /members/new 관련 내용인 create() 메소드를 찾고 실행한다.
- html의 name의 값인 name(Key)을 보고 MemberForm의 필드인 String name과 일치하므로 스프링에서 String name 필드에 Value를 넣어준다.
- html의 Key와 필드가 일치해야 Value가 넘어온다.
- 만약 <input ~ name = "id"> 라면 필드 String name과 Key인 id는 일치하지 않기 때문에 Value가 필드에 담기지 않는다.
- html <input>에서 내용이 입력되서 넘어오면 String name 필드에 그 값(Value)이 담긴다.
- 스프링은 String name 필드가 private이기 때문에 setName() 메소드를 호출해서 값을 담는다.
- 스프링은 String name 필드가 private이기 때문에 setName() 메소드를 호출해서 값을 담는다.
- html의 Key와 필드가 일치해야 Value가 넘어온다.
- create() 메소드를 수행하고 redirect로 메인 페이지로 이동시킨다.
- localhost:8080/members/new URL로 요청을 보낸다.
- Post 방식은 Form 같은 곳에 데이터를 넣어서 전달할 때 사용하는 방식, Get 방식은 데이터를 조회할 때 사용하는 방식이다.
- HTTP Redirect : 다시 지시하는 것, 즉 브라우저에게 다른 URL을 지시하는 행위
- Controller에서 Model.addAttribute(Key, Value)로 데이터를 담아서 html로 넘기면 Thymleaf에서 ${Key}로 Model로 넘긴 데이터를 사용할 수 있게 된다.
- 프로퍼티 접근 방식 : private 필드에 Getter / Setter로 접근하는 방식
출처: [인프런 김영한 스프링 입문]
[지금 무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 | 김영한 - 인프
김영한 | 스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확
www.inflearn.com
'Spring > [인프런 김영한 스프링 입문]' 카테고리의 다른 글
[인프런 김영한 스프링 입문] AOP (2) | 2024.08.11 |
---|---|
[인프런 김영한 스프링 입문] 스프링 DB 접근 기술 (0) | 2024.08.09 |
[인프런 김영한 스프링 입문] 스프링 빈과 의존관계 (0) | 2024.08.09 |
[인프런 김영한 스프링 입문] 회원 관리 예제 - 백엔드 개발 (0) | 2024.08.09 |
[인프런 김영한 스프링 입문] 스프링 웹 개발 기초 (0) | 2024.08.08 |