본문 바로가기
Java/spring

spring 입문 - 웹 MVC 개발

by 티코딩 2024. 1. 19.

ㅇ 홈화면 추가

templates 디렉토리 밑에 홈화면 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>


</body>
</html>

그리고 홈화면으로 갈수있는 HomeController를 만들어준다.

ㅁ HomeController

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

return "home"하면 templates 에서 home.html파일을 연결해준다.

그러면 localhost:8080 에 들어가면

이렇게 뜬다. 먼저 회원가입 버튼에 기능을 넣어보자.

 

ㅇ 등록

먼저 MemberForm클래스를 만들어주자.

public class MemberForm {
    private String name;

    public String getName() {
        return name;
    }

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

 

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

templates 에 members 디렉토리를 만들고 이 html 파일을 넣어주자. 그다음에 membercontroller에

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

        memberService.join(member);

        return "redirect:/";
    }

겟 메서드로 createMemberForm.html파일을 불러올수있게 하고, 포스트메서드로 회원등록해줄수 있는 create를 넣어준다.

return "redirect:/" 하면 홈화면으로 리다이렉트해준다.

이런 화면이 뜰것이고 등록을 하게되면 홈화면으로 다시 이동한다. 

그 다음 회원목록 조회를 만들어보자.

 

ㅇ 조회

 

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

templates -> members 에 이 파일을 넣어주고, MemberController에 

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

리스트를 불러올수 있게 list 메서드를 작성해준다.

 

 

ㅁ MemberController

@Controller
public class MemberController {
    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
    @GetMapping("/members/new")
    public String createForam() {
        return "members/createMemberForm";
    }
    @PostMapping("/members/new")
    public String create(MemberForm form) {
        Member member = new Member();
        member.setName(form.getName());

        memberService.join(member);

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

이렇게 하면 회원목록 버튼을 누르게 되면 아래와 같이 뜬다.

지금 이렇게 데이터가 쌓이는게 보인다. 하지만 이건 그냥 단순히 JVM의 힙 메모리에 저장된것이기 때문에 애플리케이션을 껐다 키면 사라진다. 그래서 우린 데이터베이스를 사용해 거기에서 데이터를 관리해야한다.

 

'Java > spring' 카테고리의 다른 글

spring security를 알아보자 - 2  (0) 2024.03.12
spring security를 알아보자 - 1  (0) 2024.03.04
Spring 입문 - AOP  (1) 2024.01.25
spring 입문 - 스프링 DB 접근  (0) 2024.01.25
spring 입문 - MVC, 스프링빈 등록까지  (0) 2024.01.19