일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 스프링
- 표본 추출
- 확률분포함수
- dag
- 이분탐색
- 분할정복
- 너비 우선 탐색
- BFS
- Probability Distribution Function
- 객체 지향 설계
- Algorithm
- 확률
- 베이지안
- 알고리즘
- 이진탐색
- 확률변수
- 확률분포
- divide and conquer
- Solid
- 추론 통계
- Random variable
- 기술 통계
- spring boot
- PostgreSQL
- 재설치
- dfs
- 인터페이스
- 깊이 우선 탐색
- 오일러 경로
- 다형성
- Today
- Total
말하는 감자
[스프링부트 스터디] 회원 관리하는 웹 MVC 개발 본문
** 웰컴 페이지 만들기
- 루트주소에 맞는 HomeController 찾은 후 → 돌려받은 문자열로 → template에서 home.html을 찾는다.
- 만약 컨트롤러가 존재하지 않았을 경우 → static에서 index.html을 찾았을 것이다.
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
}
template/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>
** 회원가입
회원가입의 주소는 /members/new (home.html에서 확인)
컨트롤러에@GetMapping으로 뿌려줄 html을 지정해준다. (보통 url로 단순 조회할 때는 GetMapping을 쓴다.)
@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";
}
}
template/members/createMemberForm
<!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>
form에 이름을 적고 등록하면, 데이터를 /members/new로 post 방법을 통해 전달한다. 변수이름은 nam인 것을 알 수 있다.
@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:/";
}
}
다시 컨트롤러에서 /members/new postmapping을 찾아가 create함수를 호출한다. 이때, MemberForm 클래스가 사용된다. 마치, 병원을 방문했을 때 작성표에 써서 전달하는 것과 같다.
public class MemberForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
그러면 MemberForm 의 필드 name과 createMemberForm.html의 form 태그 내 변수 name이 동일하므로, MemberForm 객체의 필드가 설정된다.
...
@PostMapping("/members/new")
public String create(MemberForm form) {
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/";
}
...
최종적으로 그 작성폼을 가지고 진짜 도메인에 등록하는 작업이 이루어진다. 그리고, 홈 화면으로 리다이렉트 해준다.
**회원목록 조회하기
회원목록의 주소는 /members 이다. (마찬가지로 home.html에서 확인)
@Controller
public class MemberController {
...
@GetMapping("/members")
public String list(Model model) {
List<Member> members = memberService.findMembers();
model.addAttribute("members", members);
return "members/memberList";
}
}
list 함수가 작동되면서 Model이라는 객체에 리스트를 모두 members라는 이름으로 넣어준다. 이 Model은 템플릿에 전달하기 위한 방법이다.
template/members/memberList
<!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>
타임리프의 문법으로 for문을 돌면서 리스트를 차례대로 화면에 뿌려준다. members의 필드는 getter, setter로 받는다.
단, 서버를 닫으면 메모리에 올라가있던 자바도 없어지므로, 데이터가 모두 초기화 된다.
'Backend' 카테고리의 다른 글
[스프링부트 스터디] 서블릿 (2) - HttpServletRequest (0) | 2021.07.25 |
---|---|
[스프링부트 스터디] 서블릿 (1) (0) | 2021.07.22 |
[스프링부트 스터디] 스프링 DB 접근 기술 (0) | 2021.07.21 |
[스프링부트 스터디] 스프링 빈과 의존관계 (0) | 2021.07.11 |
[스프링부트 스터디] 회원 관리하는 백앤드 개발 (0) | 2021.07.08 |