코딍코딍
코딩기록
코딍코딍
전체 방문자
오늘
어제
  • 분류 전체보기 (271)
    • 개발 (2)
    • Java (1)
    • 스프링 (28)
    • JPA (11)
    • Git (3)
    • 알고리즘 (160)
      • 백준 (132)
      • 프로그래머스 (8)
      • SWEA (20)
    • 토이 프로젝트 (14)
      • 간단한 Springboot CRUD (1)
      • 게시판 프로젝트 (13)
    • 알고리즘 개념정리 (8)
    • 오류 해결 (13)
    • 보류 (0)
    • AWS (5)
    • 트러블 슈팅 (0)
    • 회고 (3)
    • CS (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

최근 글

티스토리

hELLO · Designed By 정상우.
코딍코딍

코딩기록

토이 프로젝트/게시판 프로젝트

3. 스프링 게시판 만들기 - 컨트롤러 생성(Member), 회원가입 기능, 뷰 생성

2022. 8. 9. 13:29

프론트와 백을 연결해주는 컨트롤러를 생성하고 테스트해보겠다.

컨트롤러에는 일단 회원가입 기능만 구현하였다. 추후 계속 업데이트 예정

 

MemberController

@Controller
@RequestMapping("/member")
@RequiredArgsConstructor
public class MemberController {

    private final MemberService memberService;

    @GetMapping("/login")
    public String login (Model model) {
        return "member/loginMemberForm";
    }

    @GetMapping("/create")
    public String createForm () {
        return "member/createMemberForm";
    }

    @PostMapping("/create")
    public String create (@ModelAttribute Member member) {
        memberService.createMember(member);
        return "member/savedMemberForm";
    }
}
  • login: 로그인 폼으로 가는 메서드
  • createForm: 회원가입 폼으로 가는 메서드
  • create: 회원가입 로직 실행 후 회원 정보 폼으로 가는 메서드
  • @RequiredArgsConstructor: final이 붙은 필드에 자동으로 의존성 주입

 

index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="canonical" href="https://getbootstrap.com/docs/5.1/examples/headers/">

    <!-- Favicons -->
    <meta name="theme-color" content="#7952b3">

    <link href="css/bootstrap.min.css" rel="stylesheet" />
    <link href="css/headers.css" rel="stylesheet" />

    <style>
      .bd-placeholder-img {
        font-size: 1.125rem;
        text-anchor: middle;
        -webkit-user-select: none;
        -moz-user-select: none;
        user-select: none;
      }

      @media (min-width: 768px) {
        .bd-placeholder-img-lg {
          font-size: 3.5rem;
        }
      }
    </style>
</head>
<body>
<div class="container">
    <header class="d-flex flex-wrap align-items-center justify-content-center justify-content-md-between py-3 mb-4 border-bottom">
        <a href="/" class="d-flex align-items-center col-md-3 mb-2 mb-md-0 text-dark text-decoration-none">
            <svg class="bi me-2" width="40" height="32" role="img" aria-label="Bootstrap"><use xlink:href="#bootstrap"></use></svg>
        </a>

        <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
            <li><a href="#" class="nav-link px-2 link-secondary">Home</a></li>
            <li><a href="#" class="nav-link px-2 link-dark">Features</a></li>
            <li><a href="#" class="nav-link px-2 link-dark">Pricing</a></li>
            <li><a href="#" class="nav-link px-2 link-dark">FAQs</a></li>
            <li><a href="#" class="nav-link px-2 link-dark">About</a></li>
        </ul>

        <div class="col-md-3 text-end">
            <button type="button" class="btn btn-outline-primary me-2" onclick="location.href='/member/login'">Login</button>
            <button type="button" class="btn btn-primary" onclick="location.href='/member/create'">Sign-up</button>
        </div>
    </header>
</div>
<script src="js/bootstrap.bundle.min.js"></script>
</body>
</html>
  • localhost:8080 의 경로로 왔을 때 보여지는 뷰이다.
  • welcomePage

 

createMemberForm.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Sing In</title>
    <link rel="canonical" href="https://getbootstrap.com/docs/5.1/examples/sign-in/">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">

    <!-- Bootstrap core CSS -->
    <link href="../../static/css/bootstrap.min.css"
          th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
    <link href="../../static/css/signin.css"
          th:href="@{/css/signin.css}" rel="stylesheet"/>
    <link href="../../static/css/headers.css"
          th:href="@{/css/headers.css}" rel="stylesheet"/>
    <style>
        .bd-placeholder-img {
            font-size: 1.125rem;
            text-anchor: middle;
            -webkit-user-select: none;
            -moz-user-select: none;
            user-select: none;
        }

        @media (min-width: 768px) {
            .bd-placeholder-img-lg {
                font-size: 3.5rem;
            }
        }
    </style>

    <!-- Custom styles for this template -->
</head>
<body class="text-center">

<main class="form-signin">
    <form th:action method="post">
        <h1 class="h3 mb-3 fw-normal">Please sign in</h1>

        <div class="form-floating">
            <input type="text" class="form-control" id="userId" name="userId" placeholder="Id">
            <label for="userId">Id</label>
        </div>
        <div class="form-floating">
            <input type="password" class="form-control" id="password" name="password" placeholder="Password">
            <label for="password">Password</label>
        </div>
        <div class="form-floating">
            <input type="email" class="form-control" id="email" name="email" placeholder="name@example.com">
            <label for="email">Email address</label>
        </div>
        <div class="checkbox mb-3">
            <label>
                <input type="checkbox" value="remember-me"> Remember me
            </label>
        </div>
        <button class="w-100 btn btn-lg btn-primary" type="submit">Sign in</button>
    </form>
</main>
</body>
</html>
  • 회원가입을 하기위한 뷰
  • sign in 버튼을 클릭하면 폼에 담긴 userId, password, email를 파라미터로 전송한다.

 

savedMemberForm.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>savedMemberForm</title>
    <link rel="canonical" href="https://getbootstrap.com/docs/5.1/examples/sign-in/">

    <!-- Bootstrap core CSS -->
    <link href="/static/css/bootstrap.min.css"
          th:href="@{/css/bootstrap.min.css}"rel="stylesheet">
    <link href="/static/css/signin.css"
          th:href="@{/css/signin.css}"rel="stylesheet">
    <link href="/static/css/headers.css"
          th:href="@{/css/headers.css}" rel="stylesheet">
    <style>
        .bd-placeholder-img {
            font-size: 1.125rem;
            text-anchor: middle;
            -webkit-user-select: none;
            -moz-user-select: none;
            user-select: none;
        }

        @media (min-width: 768px) {
            .bd-placeholder-img-lg {
                font-size: 3.5rem;
            }
        }
    </style>


    <!-- Custom styles for this template -->
</head>
<body>
<div class="container">

    <div class="py-5 text-center">
        <h2>회원가입 결과</h2>
    </div>
    <div>
        <label for="id">식별 ID</label>
        <input type="text" id="id" name="id" class="form-control" value="1" th:value="${member.id}" readonly>
    </div>
    <div>
        <label for="userId">회원 아이디</label>
        <input type="text" id="userId" name="userId" class="form-control" value="상품A" th:value="${member.userId}" readonly>
    </div>
    <div>
        <label for="password">비밀번호</label>
        <input type="text" id="password" name="password" class="form-control" value="10000" th:value="${member.password}" readonly>
    </div>
    <div>
        <label for="email">이메일</label>
        <input type="text" id="email" name="email" class="form-control" value="10" th:value="${member.email}" readonly>
    </div>

    <hr class="my-4">

    <div class="row">
        <div class="col">
            <button class="w-100 btn btn-primary btn-lg"
                    th:onclick="|location.href='@{/member/{memberId}/editForm(memberId=${member.id})}'|"
                    type="button">회원 정보 수정</button>
        </div>
        <div class="col">
            <button class="w-100 btn btn-secondary btn-lg"
                    th:onclick="|location.href='@{/index.html}'|"
                    type="button">메인으로</button>
        </div>
    </div>

</div> <!-- /container -->
</div>
</body>
</html>
  • 회원가입된 Member의 정보를 볼 수 있는 뷰이다.
  • 수정을 하거나 홈으로 돌아갈 수 있다.

 

index.html
createMemberForm.html
savedMemberForm.html

 

'토이 프로젝트 > 게시판 프로젝트' 카테고리의 다른 글

6. 게시판 프로젝트 - 인터셉터 등록, 회원가입 폼 중복 ID 검증  (0) 2022.08.10
5. 게시판 만들기 - 회원가입 필드 오류 검증, PRG 패턴  (0) 2022.08.09
4. 스프링 게시판 만들기 - 로그인 기능1(세션) , 필드 오류 검증  (0) 2022.08.09
2. 스프링 게시판 만들기 - 도메인 생성, Member 테스트(repository,service)  (0) 2022.08.08
1. 스프링 게시판 만들기 - 초기 설정  (0) 2022.08.08
    '토이 프로젝트/게시판 프로젝트' 카테고리의 다른 글
    • 5. 게시판 만들기 - 회원가입 필드 오류 검증, PRG 패턴
    • 4. 스프링 게시판 만들기 - 로그인 기능1(세션) , 필드 오류 검증
    • 2. 스프링 게시판 만들기 - 도메인 생성, Member 테스트(repository,service)
    • 1. 스프링 게시판 만들기 - 초기 설정
    코딍코딍
    코딍코딍
    ㅎ2

    티스토리툴바