spring - 입문4

» BE

인프런 김영한님 스프링 입문 강의를 듣고 정리한 내용입니다
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8#

회원 관리 예제 - 웹 MVC 개발

홈 화면

controller/HomeController.java

@Controller
public class HomeController {

	@GetMapping("/")
	public String home(){
		return "home";
	}
}

✅ ‘/’ 으로 GET 요청이 들어오면 templates/home.html 을 리턴


templates/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>
</body>
</html>

결과

Image

  • 정적 콘텐츠에서는 관련 컨트롤러를 먼저 찾고 없으면 html 파일을 찾음 -> HomeController 에서 매핑된 게 있기 때문에 기존 index.html보다 우선순위가 높음

회원 등록

controller/MemberController.java

@GetMapping("/members/new")
	public String createForm(){
		return "members/createMemberForm";
	}
  • /members/new로 매핑

resources/templates/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> 
</body>
</html>

name/members/new로 POST 방식으로 넘어감

Image controller/MemberForm.java

public class MemberForm {
	private String name; 
    //getter setter
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name; 
	}
}

controller/MemberController.java

@GetMapping("/members/new")
	//생략..
@PostMapping("/members/new")
	public String create(MemberForm form){
		Member member = new Member();
		member.setName(form.getName()); 
		
		memberService.join(member);

		return "redirect:/";
	}

✅ POST 로 넘어오는 내용을 받아서 메모리에 저장
form.getName() 으로 꺼내서 setName

회원 조회

controller/MemberController.java

@GetMapping("/members")
	public String list(Model model) {
		List<Member> members = memberService.findMembers();

		model.addAttribute("members",members);
		return "members/memberList";
	}

✅ model에 전체 members 리스트로 addAttribute


templates/members/memberList.html

<!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> 
</body>
</html>

th:each로 루프 돌기

결과

Image