StudyRepository
article thumbnail
728x90

 

이번 시간에는 홈 화면을 추가해보겠습니다.

 

우선 controller에서 HomeCotroller파일을 만들어주고, 아래 코드를 넣어줍니다.

 

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

 

 

 

다음은 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>

 

 

실행해보면, 

잘 실행됩니다.

 

 

 

하지만 저번시간에 만든 index.html이라는 정적파일을 기억 하시나요?

 

index.html은 welcomepage로 아무것도 없으면 이 페이지로 가야합니다.

 

하지만, 스프링에서 컨트롤러는 정적 파일보다 우선순위가 높습니다. 

 

요청이 오면 스프링 컨테이너 안에 있는 관련 컨트롤러를 먼저 찾고, 없으면 static파일을 찾게 되어있습니다.

 

 

welcomepage도 마찬가지라고 이해하시면 됩니다.

 

 

localhost:8080에서 요청이 오면 먼저 HomeController를 찾아 매핑된것이 있나 찾아봅니다.

 

@GetMapping("/")

매핑된것이 있으므로 index.html은 무시됩니다.

 

 

 

다음은 MemberController에 /members/new 를 매핑해줍니다.

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

 

다음은 templates에 members Directory를 만들어주고 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>

 

다음은 controller에 MemberForm 클래스를 만들어 준 뒤, command+n 단축키로 getter and setter를 만들어줍니다.

package hello.hellospring.controller;

public class MemberForm {
    private String name;

    public String getName() {
        return name;
    }

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

}

 

 

그리고 MemberController에 다음 코드를 추가해줍니다.

@PostMapping("/members/new")
public String create(MemberForm form){
    Member member = new Member();
    member.setName(form.getName());
    
    memberService.join(member);
    
    return "redirect:/";
}

join으로 member를 넘깁니다.

 

회원가입이 끝나면 redirect로 홈 화면으로 보냅시다.

 

 

 

 

로직은 이렇게 됩니다.

 

 

1) 먼저 회원가입에 들어가면 http://localhost:8080/members/new 로 들어갑니다. 

 

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

 

2) 이 MemberController에 있는 코드로 인해 createMemberForm으로 이동합니다. 

 

그 후 그냥 createMemberForm.html이 뿌려집니다.

 

 

3) 등록 버튼을 누르면 

<form action="/members/new" method="post">

이 html의 action url으로 인해 post방식으로 넘어옵니다.

 

 

 

 

그 후엔 MemberController의 @PostMapping으로 인해 데이터를 Form에 넣어서 등록해줍니다.

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

    memberService.join(member);

    return "redirect:/";
}

@GetMapping과 @PostMapping의 URL이 같지만 method가 post이기 때문에 PostMapping이 선택됩니다.

 

 

create 메소드의 MemberForm의 name에 form안에 넣은 값이 들어갑니다.(setName)

 

 

728x90
profile

StudyRepository

@Minseo26262

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!