본문 바로가기
Spring/스프링 입문

인프런 스프링 입문 강의 정리 #5

by 예린lynn 2023. 11. 17.
728x90

1. 회원 웹 기능 - 홈 화면 추가

controller 패키지에 HomeController 클래스를 생성한다.

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {
 @GetMapping("/") // "/"은 도메인의 첫 번째 주소를 의미
 public String home() {
 return "home"; // home.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>

 

localhost:8080으로 접속 시, 아래 화면이 나오게 된다.

 

아래 화면처럼 한글로 제대로 출력되지 않는 경우도 있다.

이럴 경우 아래 코드를 memberlist.html 혹은 관련된 파일에 추가하면 된다.

<head>
    <meta charset="UTF-8">

2. 회원 웹 기능 - 등록

MemberController에 @GetMapping을 통해 /members/new를 연결하는 코드 작성

(home.html에서 회원가입을 누르면 /members/new 로 연결)

@GetMapping(value = "/members/new")
 public String createForm() {
 return "members/createMemberForm";
 }

 

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

name이라는 key와 input 창에 입력한 값이 value로 서버에 넘어간다.

 

회원가입을 눌러서 http://localhost:8080/members/new에 들어오면, 아래 화면이 나오게 된다.

 

controller 패키지에 MemberForm 클래스를 생성한다.

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

변수명을 동일하게 name으로 선언해야 한다.

 

MemberController에 PostMapping으로 create 함수를 추가한다.

@PostMapping(value = "/members/new") //입력받은 name값을 @PostMapping을 통해 연결
public String create(MemberForm form) {
 Member member = new Member();
 member.setName(form.getName());
 
 memberService.join(member);
 
 return "redirect:/"; //값을 받은 후 초기 화면으로 돌아간다
}

 

cf) @GetMapping : url 등을 통해 조회

     @PostMapping : 데이터를 form 같은 곳에 넣어서 등록 및 전달

 

1. localhost:8080에서 회원가입을 누르면, localhost:8080/members/new로 들어간다.

2. MemberContorller의 @GetMapping을 통해 createMemberForm.html으로 이동해서 렌더링한다.

3. name을 적고 등록을 누르면, form 태그에서 /members/new로 post 방식으로 넘어간다.

4. MemberController의 @PostMapping을 통해 create 매서드를 호출한다.

5. MemberForm의 name에 입력한 값이 들어온다.

 

3. 회원 웹 기능 - 조회

MemberController에 아래 코드를 추가한다.

@GetMapping(value = "/members")
public String list(Model model) {
 List<Member> members = memberService.findMembers();
 model.addAttribute("members", members);
 return "members/memberList";
}

회원목록을 누르면 /members로 연결된다.

멤버 list를 model에 넣어주고, addAttribute를 통해 members의 정보를 담는다.

 

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

 

728x90