메인 페이지

황재원·2023년 5월 1일

capoeira web

목록 보기
2/18

메인페이지 layout을 활용해 fragments, layouts 디렉토리를 만들고 가독성이 좋게 만들었다

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
      layout:decorate="layouts/layout.html">
<body>
<div layout:fragment="content"> <!-- div layout:fragment="content"는 뼈대가 되는 곳에 들어갈수있는 코드  -->
    <img src="/img/capoeira main.jpg" style="display: block; margin: 0 auto;width:1300px; height:500px;">
    <br>
    <div style="text-align: center;">
        <h3>카포에이라 홈페이지에 오신것을 환영합니다</h3>
        <br>
        <p>
            Capoeira는 싸움, 움직임, 곡예, 음악 및 기타 예술 형식을 포함하는 아프리카-브라질 무술입니다. 16세<br>
            기에 브라질로 끌려온 아프리카 노예들에 의해 개발되었습니다. Capoeira는 노예가 포획자로부터 저항<br>
            하고 자신을 보호하는 연습을 하면서 문화적 관습을 보존할 수 있도록 했습니다.<br>
            <br>
            1888년 노예 제도가 폐지된 후 카포에라는 브라질에서 금지되었습니다. 그러나 20세기 초 바히아 주 살<br>
            바도르에서 카포에라에 대한 인식을 바꾼 두 인물이 등장한다. 한 명은 보다 전투 지향적인 Capoeira Re<br>
            gional을 만들고 최초의 카포에라 아카데미를 열었던 Mestre Bimba였습니다. 다른 한 명은 오늘날 일반<br>
            적으로 카포에라 앙골라라고 불리는 전통적인 카포에라를 전문으로 하는 Mestre Pastinha였습니다. 카<br>
            포에라는 20세기 후반에 비범죄화되었고 국민 스포츠가 되었습니다.<br>
            <br>
            오늘날 카포에이라는 전 세계적으로 행해지고 있습니다. 우리 학교 ABADA-Capoeira는 전 세계 60개국<br>
            이상에서 활동하고 있습니다. 카포에이라는 단순한 무술이 아니라 브라질 문화를 전 세계로 수출하는 수<br>
            단이기도 합니다. 카포에리스타는 카포에라의 신체 동작뿐만 아니라 음악, 언어, 문화, 역사도 배웁니다.<br>
        </p>
    </div>
</div>
</body>
</html>

fragments의 들어간 html 파일

config.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
      xmlns="http://www.w3.org/1999/xhtml">
  <th:block th:fragment="configFragment">
      <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1">
          <!-- Bootstrap CSS -->
          <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
          <!-- Bootstrap JavaScript -->
          <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
          <title>capoeira web</title>
      </head>
  </th:block>
</html>

계속 사용해야되는 스크립트나 링크를 config.html에 저장해서 사용하기 쉽게 만들었다

footer.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
  <div th:block th:fragment="footerFragment">
      <footer class="text-center border-top container mt-5">
        capoeira - pinoquio
      </footer>
  </div>
</html>

header.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <th:block th:fragment="headerFragment">
      <head>
        <link rel="stylesheet" th:href="@{/css/header.css}">
      </head>
          <nav th:fragment="headerFragment" class="navbar navbar-expand-sm navbar-dark bg-dark">
            <div class="container">
              <a class="navbar-brand" href="/">Capoeira</a>
              <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#mynavbar">
                <span class="navbar-toggler-icon"></span>
              </button>
              <div class="collapse navbar-collapse" id="mynavbar">
                <!-- 아바다 카포에이라와 무젠자 카포에이라 드롭 다운을 만들고 커뮤니티에도 드롭다운을 추가 -->
                <ul class="navbar-nav me-auto">
                  <li class="nav-item dropdown">
                    <a class="nav-link dropdown-toggle" href="#" id="abadaDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
                      ABADA Capoeira
                    </a>
                    <ul class="dropdown-menu" aria-labelledby="abadaDropdown">
                      <li><a class="dropdown-item" href="/capoeiraweb/abada">ABADA의 역사</a></li>
                      <li><a class="dropdown-item" href="/capoeiraweb/abadamap">ABADA 서울센터</a></li>
                      <li><a class="dropdown-item" href="/capoeiraweb/abadamapp">ABADA 부천센터</a></li>
                    </ul>
                  </li>
                  <li class="nav-item dropdown">
                    <a class="nav-link dropdown-toggle" href="#" id="muzenzaDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
                      MUZENZA Capoeira
                    </a>
                    <ul class="dropdown-menu" aria-labelledby="muzenzaDropdown">
                      <li><a class="dropdown-item" href="/capoeiraweb/muzenza">MUZENZA의 역사</a></li>
                      <li><a class="dropdown-item" href="/capoeiraweb/muzenzamap">MUZENZA 서울센터</a></li>
                    </ul>
                  </li>
                  <li class="nav-item dropdown">
                    <a class="nav-link dropdown-toggle" href="#" id="cmnitiDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
                    커뮤니티
                    </a>
                    <ul class="dropdown-menu" aria-labelledby="cmnitiDropdown">
                      <li><a class="dropdown-item" href="/capoeiraweb/paging">게시판</a></li>
                    </ul>
                  </li>
                </ul>
                <ul class="navbar-nav ms-auto">
                  <li th:if="${session.loginNickname}">
                    <span class="nav-link" th:text="${session.loginNickname}"></span>
                  </li>
                  <li th:unless="${session.loginNickname}">
                    <a class="nav-link" href="/capoeiraweb/login">로그인</a>
                  </li>
                  <li th:if="${session.loginNickname}">
                    <a class="nav-link" href="/capoeiraweb/logout">로그아웃</a>
                  </li>
                </ul>
              </div>
            </div>
          </nav>
    </th:block>
</html>

등 계속해서 쓸수있는 config, header, footer를 레이아웃을 통해서 만들고 layouts에 뼈대를
만들어서 간단한 코드로 계속 사용할 수 있게 했다.

layouts

layout.html

<!DOCTYPE html>
<html lang="en"
      xmlns:th="http://www.thymeleaf.org"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">

    <th:block th:replace="fragments/config :: configFragment"></th:block>
	<!-- 링크및 스크립트 등 다른 html파일들 공통으로 사용 되는 부분 -->
    <body>
    <th:block th:replace="fragments/header :: headerFragment"></th:block>
	
    <div class="container">
        <div>
            <th:block layout:fragment="content"></th:block>
            <!-- templates에서 작성한 .html 파일들이 들어가는 부분  
            <div layout:fragment="content"></div> 를 사용해서 적용시킬수있다.-->
        </div>
    </div>
    <th:block th:replace="fragments/footer :: footerFragment"></th:block>
    </body>
</html>

MemberController

package capoeira.capoeiraweb.controller;

import capoeira.capoeiraweb.dto.MemberDTO;
import capoeira.capoeiraweb.service.MemberService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;


@Controller
@RequiredArgsConstructor
@RequestMapping("/capoeiraweb")
public class MemberController {
    //생성자 주입
    private final MemberService memberService;


    //회원가입 페이지 출력 요청
    @GetMapping("/login_info")
    public String login_info() {

        return "login_info";
    }

    @PostMapping("/login_info")
    public String login_info(@ModelAttribute MemberDTO memberDTO) {
        System.out.println("MemberController.save");
        System.out.println("memberDTO = " + memberDTO);
        memberService.login_info(memberDTO);
        return "index";
    }

    //로그인 성공 실패
    @PostMapping("/login")
    public String login(@ModelAttribute MemberDTO memberDTO, HttpSession session) {
        MemberDTO loginResult = memberService.login(memberDTO);
        if (loginResult != null) {
            //login 성공
            session.setAttribute("loginNickname", loginResult.getNickname());
            System.out.println("성공");
            return "index";
        }else {
            //login 실패
            System.out.println("실패");
            return "login";
        }
    }

    @GetMapping("/logout")
    public String logout(HttpSession session) {
        session.invalidate();
        return "index";
    }

    @PostMapping("/member/idCheck")
    public @ResponseBody String idCheck(@RequestParam("id") String id) {
        System.out.println("id = " + id);
        String checkResult = memberService.idChenk(id);
        if (checkResult != null) {
            return "ok";
        }else {
            return "no";
        }
    }
}

.html들을 사용하기 위해 만든 Controller

profile
비전공 신입 개발자

0개의 댓글