쌓고 쌓다

회원 웹 기능 - 홈 화면 추가, 등록 본문

프로그래밍/spring

회원 웹 기능 - 홈 화면 추가, 등록

승민아 2023. 5. 16. 19:52

MemberController도 만들고, 의존 관계도 설정했다.

MemberController를 통해 멤버를 등록하고 조회하는 걸 만들어보자.

 

HomeController

우선 controller에 HomeController를 만든다.

package hello.hellospring.controller;

@Controller
public class HomeController {

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

도메인을 접속하면

매핑 URL을 따라 "/"를 통해 템플릿에 home.html을 가져온다.

 

home.html

home.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="/members/new">회원 가입</a>
<a href="/members">회원 목록</a>
</body>
</html>

단순히 링크 두개만 작성했다.

 

MemberController.java

@Controller
public class MemberController {
	
    ...

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

}

MemberController에 "/members/new"를 매핑시켜

템플릿 폴더에 members 폴더 내 createMemberForm.html으로 이동하게 작성한다. 

 

createMemberForm.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <form action="/members/new" method="post">
        <label for="name">이름</label>
        <input type="text" id="name" name="name" placeholder="이름을 입력하세요.">
        <button type="submit">등록</button>
    </form>
</div>
</body>
</html>

 

action 속성: 폼 데이터를 서버로 보낼 때 해당 데이터가 도착할 URL을 명시한다.

method 속성: 폼 데이터가 서버로 제출될 때 사용되는 HTTP 메소드를 명시한다. (GET과 POST 존재)

 

label 태그는  폼의 양식에 이름을 붙이는 태그이다.

for 속성: label의 for 값과 양식의 id 값이 일치하면 연결된다. (label을 클릭하면 연결된 양식이 클릭됨)

name 속성: 폼(Form)이 제출된 후 서버에서 폼 데이터를 참조하기 위해 사용되거나, 자바 스크립트에서 요소를 참조하기 위해 사용함.

=> name="name" : "name"이 서버로 넘어올 때 키(Key)가 된다.  (setName(Setter)을 통해 값을 넣는다.)

 

 

입력한 폼의 데이터를 받은 클래스를 작성한다.

MemberForm.java

package hello.hellospring.controller;

public class MemberForm {
    private String name;

    public String getName() {
        return name;
    }

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

클래스의 필드 name은

<input type="text" id="name" name="name" placeholder="이름을 입력하세요.">

input 태그에 작성되어있는 name="name"에 의해 매핑되어 값이 들어올 것이다.

*인텔리제이의 GetterSetter 단축키 : Alt + Insert

 

MemberController.java

package hello.hellospring.controller;

@Controller
public class MemberController {

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

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

        return "redirect:/";
    }
}

@PostMapping과 함께 등록하는 메소드를 작성한다.

똑같은 URL이라도 Get과 Post 방식으로 나뉘기에 요구에 맞춰 메소드가 실행된다.

 

createMemberForm.html를 다시 보면

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

Post를 보내면 여기에 매핑되어 메소드가 실행될 것이다.

 

MemberForm 클래스말고 Member 클래스로 받아도 될까?

된다. 그러나 실무에서는 클래스에 필요로 하는 멤버 말고도 추가적으로 다양한 값을 함께 사용하기에

따로 클래스를 만들어 작성하는것이 더 좋은 코드이다.

Comments