본문으로 바로가기

목차

    0. 환경

    1. 홈 화면 추가

    • hello/hellospring/controller/HomeController.java
    • resources/templates/home.html

    1.1. 홈 컨트롤러

    package hello.hellospring.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    
    @Controller
    public class HomeController {
    
        @GetMapping("/")
        public String home() {
            return "home";
        }
    }

    1.2. 회원 관리 홈 html

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

    1.3. 실행 결과

    • 웹 브라우저를 이용해 localhost:8080으로 접속하면 다음과 같은 화면이 나타나는 것을 확인할 수 있습니다.

    회원 관리 홈

    2. 등록

    • hello/hellospring/controller/MemberController.java
    • templates/members/createMemberForm.html
    • hello/hellospring/controller/MemberForm.java

    2.1. 회원 등록 컨트롤러

    • hello/hellospring/controller/MemberController.java
    • @GetMapping(value = "/members/new")
      • members/createMemberForm.html 파일을 연결( return "members/createMemberForm"; )해 브라우저에 출력해줍니다.
    • @PostMapping(value = "/members/new")
      • createMemberForm.html으로부터 데이터를 받아 회원 가입 처리( memberService.join(member); )를 합니다.
      • 회원 가입 처리 후 /로 리다이렉트 합니다.( return "redirect:/"; )
    package hello.hellospring.controller;
    
    import hello.hellospring.domain.Member;
    import hello.hellospring.service.MemberService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    
    import java.util.List;
    
    @Controller
    public class MemberController {
    
        private final MemberService memberService;
    
        @Autowired
        public MemberController(MemberService memberService) {
            this.memberService = memberService;
        }
    	
        //회원 가입 폼 이동
        @GetMapping(value = "/members/new")
        public String createForm() {
            return "members/createMemberForm";
        }
    
        //회원 가입 처리
        @PostMapping(value = "/members/new")
        public String create(MemberForm form) {
    
            Member member = new Member();
            member.setName(form.getName());
    
            memberService.join(member);
    
            return "redirect:/";
        }
    
    }

    2.2. 회원 등록 폼 html

     

    • templates/members/createMemberForm.html
    • members 디렉터리를 추가 후 생성해줍니다.
    <!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>

    2.3. 회원 등록 폼에서 데이터 전달받을 객체

    • hello/hellospring/controller/MemberForm.java
    • createMemberForm.html 에서 입력받은 데이터를 스프링이 MemberForm 객체를 이용해 자동으로 setName 호출을 통해 데이터를 객체에 넣어서 받아 줍니다.
      • <input type="text" id="name" name="name" placeholder="이름을 입력하세요">
      • public void setName(String name) { this.name = name; }

     

    package hello.hellospring.controller;
    
    public class MemberForm {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }

    2.4. 실행 결과

    1. 아직 회원 목록이 개발되지 않았으므로 회원 입력이 잘 되었는지 테스트를 위해 MemberController 컨트롤러에 출력을 추가해줍니다.

        @PostMapping(value = "/members/new")
        public String create(MemberForm form) {
    
            Member member = new Member();
            member.setName(form.getName());
            System.out.println(member.getName());//html로 부터 입력을 잘 받는지 출력 테스트
    
            memberService.join(member);
    
            return "redirect:/";
        }

    2. 회원 가입을 클릭해 회원 가입 폼으로 이동합니다.

    회원 가입 클릭

    3. 회원명을 입력하고 등록을 클릭합니다.

    회원 등록

    4. 인텔리제이를 보면 데이터를 입력을 잘 받아 출력이 잘 되는 것을 확인할 수 있습니다.

    출력 테스트

    3. 조회

    • hello/hellospring/controller/MemberController.java
    • templates/members/memberList.html

    3.1. 회원 조회 기능 컨트롤러

    • hello/hellospring/controller/MemberController.java
    • memberService.findMembers(); 를 이용해 회원 목록을 모두 가지고 옵니다.
    • model.addAttribute("members", members); Model 클래스를 이용해 받은 회원 목록을 memberList.html 파일로 넘겨줍니다.
    • 단축어(mac + 인텔리제이)
      •  [Command] + [e] = 최근에 본 파일 목록 창 접근
        @GetMapping(value = "/members")
        public String list(Model model) {
            List<Member> members = memberService.findMembers();
            model.addAttribute("members", members);
            return "members/memberList";
        }

    3.2. 회원 리스트 html

    • templates/members/memberList.html
    • Model 클래스를 이용해 넘겨받은 회원 목록을 thymeleaf의 반복 출력 문법을 이용해 회원 목록을 출력해줍니다. (each)
    • html 소스의 member.id나 member.name을 커맨드를 누루고 클릭할 경우 해당하는 객체(Member 클래스)의 getter( getId(), getName() )로 접근이 됩니다. (무료 버전일 경우 접근이 안 될 수도 있습니다.)
    <!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>

    3.3. 실행 결과

    1. 홈에서 회원 목록으로 접근합니다. (회원 가입 과정은 생략합니다.)

    회원 조회 클릭

    2. 회원 목록이 출력되는 것을 확인할 수 있습니다.

    회원 목록 조회