회원 관리 예제 - 웹 MVC 개발

Dev.Dana·2021년 4월 11일
0

Spring

목록 보기
5/5
post-thumbnail

회원 웹 기능 - 홈 화면 추가

홈 컨트롤러 추가

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";
    }

}

회원 관리용 홈

<!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>

참고 : 컨트롤러가 정적 파일(ex, index.html)보다 우선순위가 높다.

회원 웹 기능 - 등록

회원 등록 폼 개발

회원 등록 폼 컨트롤러

@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";                        
    }                                                                                                                        
                                                                  
}

회원 등록 폼 HTML

  • (resources/templates/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>

회원 등록 컨트롤러

웹 등록 화면에서 데이터를 전달 받을 폼 객체

package hello.hellospring.controller;

public class MemberForm {
    private String name;

    public String getName() {
        return name;
    }

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

회원 컨트롤러에서 회원을 실제 등록하는 기능

@PostMapping("/members/new")                                  
public String create(MemberForm form) {                       
    Member member = new Member();                             
    member.setName(form.getName());                           
                                                              
    memberService.join(member);                               
                                                              
    return "redirect:/";                                      
}
  • 회원가입을 들어가면 members/new로 들어온다 (get방식으로 그냥 들어옴)
    createForm()을 반환
    → 정적으로 생성된 members/createMemberForm.html을 그냥 브라우저에 뿌려준다.
    → 이 때 input태그안에 입력한 값을 담아서 (여기서 name이 중요! server로 넘어올때 key가 된다.) post방식으로 다시 넘어온다.
    → url은 똑같지만 이번엔 post 방식이기 때문에 postMapping된 create() 메소드가 호출이 된다.
    memberForm에 데이터를 담아서 join() 메소드를 통해 회원가입을 한다.

회원 웹 기능 - 조회

회원 컨트롤러에서 조회 기능

@GetMapping("/members")
public String list(Model model) {
    List<Member> members = memberService.findMembers();
    model.addAttribute("members", members);            
    return "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> <!-- /container -->
</body>
</html>
  • <tr th:each="member : ${members}"> : 반복하는 thymeleaf 문법
    • Java의 for Each 와 비슷
  • 아직까지는 memory에 데이터를 저장했기 때문에 서버를 내렸다 다시켜면 회원데이터가 다 사라진다.
profile
어제의 나보단 나은 오늘의 내가 되기를

0개의 댓글