ํ ํ๋ฆฟ ์์
header, footer ๋ฑ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ UI ์์๋ ์ค์ ๋ค์ ๋ถ๋ฆฌํด์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ ํ
ํ๋ฆฟ์ ๊ตฌ์ฑํฉ๋๋ค.
์ปดํฌ๋ํธ
ํ์ผ๋ช
| ์ค๋ช
|
jstl.jsp | JSTL ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ |
common.jsp | ๊ณตํต ์ค์ ๋ฐ ๋ณ์๋ฅผ ํฌํจํ๋ ํ์ผ |
meta.jsp | ๋ฉํ ํ๊ทธ ์ค์ |
link.jsp | CSS ๋ฐ ์ธ๋ถ ์คํ์ผ์ํธ ๋งํฌ |
header.jsp | ํ์ด์ง ์๋จ ๊ณตํต ์์ญ |
footer.jsp | ํ์ด์ง ํ๋จ ๊ณตํต ์์ญ |
script.jsp | JavaScript ํ์ผ ๋ฐ ์คํฌ๋ฆฝํธ ์ค์ |
์์ ์์
1.
layout ํด๋ ์์ฑ
2.
์ปดํฌ๋ํธ ํ์ผ ์์ฑ
a.
jstl.jsp
b.
common.jsp
c.
meta.jsp
d.
link.jsp
e.
header.jsp
f.
footer.jsp
g.
script.jsp
3.
ํ
ํ๋ฆฟ ์ค์
4.
index.jsp
์์
layout ํด๋ ์์ฑ
์ปดํฌ๋ํธ ํ์ผ ์์ฑ
1.
jstl.jsp
2.
common.jsp
3.
meta.jsp
4.
link.jsp
5.
header.jsp
6.
footer.jsp
7.
script.jsp
jstl.jsp
<%-- JSTL --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
HTML
๋ณต์ฌ
JSTL ๋ชจ๋์ ์ ์ธํ๋ ๋๋ ํฐ๋ธ ํ๊ทธ ์
๋๋ค.
common.jsp
<%-- ์ ์ญ๋ณ์ --%>
<%
// Context Path (๋ฃจํธ ๊ฒฝ๋ก)
String root = request.getContextPath();
pageContext.setAttribute("root", root);
// ๋ก๊ทธ์ธ ์์ด๋ (์ธ์
)
String loginId = (String) session.getAttribute("loginId");
pageContext.setAttribute("loginId", loginId);
// ...
%>
Java
๋ณต์ฌ
โข
String root = request.getContextPath();
โฆ
๋ณ์๋ก ์ ์ธ
<%= root %> ํํ๋ฌธ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
โข
pageContext.setAttribute(โrootโ, root)
โฆ
pageContext ๋ก ๋ฑ๋ก
${ root } ํํ ์ธ์ด๋ก ์ฌ์ฉ ๊ฐ๋ฅ
meta.jsp
<!-- <title>project๐ป - ALOHA BOARD๐</title> -->
<!-- ํ๋น์ฝ -->
<link rel="icon" href="${ root }/static/img/logo.png" type="image/x-icon">
<!-- ์ธ๋ค์ผ ์ด๋ฏธ์ง ์ค์ -->
<meta property="og:image" content="https://i.imgur.com/yiTQ3EV.jpg">
<!-- ์น ํ์ด์ง ์ค๋ช
-->
<meta property="og:description" content="ALOHA BOARD๐ - JSP ๊ธฐ๋ฐ ๊ฒ์ํ ํ๋ก์ ํธ">
<!-- ์น ํ์ด์ง URL -->
<meta property="og:url" content="${ root }">
<!-- ์น ํ์ด์ง ์ ๋ชฉ -->
<meta name="title" content="project๐ป - ALOHA BOARD๐">
<meta property="og:title" content="project๐ป - ALOHA BOARD๐">
<!-- ์น ํ์ด์ง ํ์
-->
<meta property="og:type" content="website">
<!-- ๊ฒ์์ด -->
<meta name="keywords" content="JSP ๊ฒ์ํ, ์๋ฐ ์น๊ฐ๋ฐ, ALOHA BOARD, ์๋กํ ๋ณด๋">
<meta name="robots" content="index, follow">
<!-- ์ฌ์ดํธ ๋งต -->
<link rel="sitemap" href="${ root }/static/sitemap.xml">
HTML
๋ณต์ฌ
์น ํ์ด์ง์ ๋ฉํ ์ ๋ณด์ ๊ธฐ๋ณธ ์ค์ ์ ํฌํจํ ํค๋(Head) ์์ญ ๊ตฌ์ฑ ํ์ผ์
๋๋ค. ์ฃผ์ ๋ชฉ์ ์ SEO, SNS ๊ณต์ , ์ฌ์ดํธ ์๋ณ ๋ฑ์ ์ํด ํ์ํ ์ค์ ์ ์ค์ ์ง์ค์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์
๋๋ค.
ํญ๋ชฉ | ์ค๋ช
|
<meta charset="UTF-8"> | ๋ฌธ์ ์ธ์ฝ๋ฉ ์ค์ (UTF-8) |
<meta name="viewport"> | ๋ฐ์ํ ์น์ ์ํ ํ๋ฉด ๋น์จ ์ค์ |
<link rel="icon"> | ๋ธ๋ผ์ฐ์ ํญ์ ํ์๋๋ ํ๋น์ฝ ์ค์ |
<meta property="og:*"> | SNS ๊ณต์ ์ ํ์๋ ์ ๋ชฉ, ์ค๋ช
, ์ด๋ฏธ์ง ๋ฑ ์ค์ (Open Graph Protocol) |
<meta name="keywords"> | ๊ฒ์ ์์ง ์ต์ ํ๋ฅผ ์ํ ํค์๋ ์ง์ |
<meta name="robots"> | ๊ฒ์ ์์ง ํฌ๋กค๋ง ๋ฐฉ์ ์ง์ |
<link rel="sitemap"> | ์ฌ์ดํธ๋งต ์ฐ๊ฒฐ๋ก SEO์ ๋์ |
link.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="/layout/common.jsp" %>
<%-- ํฐํธ --%>
<%-- ๋ผ์ด๋ธ๋ฌ๋ฆฌ --%>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-4Q6Gf2aSP4eDXB8Miphtr37CMZZQ5oXLH2yaXMJ2w8e2ZtHTl7GptT4jmndRuHDT" crossorigin="anonymous">
<link href="${ root }/static/css/reset.css" rel="stylesheet" />
<link href="${ root }/static/css/style.css" rel="stylesheet" />
HTML
๋ณต์ฌ
header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="/layout/common.jsp" %>
<nav class="navbar bg-dark navbar-expand-lg bg-body-tertiary" data-bs-theme="dark">
<div class="container-fluid">
<a class="navbar-brand" href="${ root }/">Home</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="${ root }/board/list">Board</a>
</li>
</ul>
<ul class="navbar-nav d-flex align-items-center px-3">
<%
if( loginId == null || loginId.equals("") ) {
%>
<!-- ๋น๋ก๊ทธ์ธ ์ -->
<li class="nav-item">
<a class="nav-link" aria-current="page" href="${ root }/login.jsp">๋ก๊ทธ์ธ</a>
</li>
<li class="nav-item">
<a class="nav-link" aria-current="page" href="${ root }/join.jsp">ํ์๊ฐ์
</a>
</li>
<li class="nav-item">
</li>
<%
}
else {
%>
<!-- ๋ก๊ทธ์ธ ์ -->
<li class="nav-item">
<div class="dropdown">
<a href="#" class="d-flex align-items-center link-body-emphasis text-decoration-none dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
<img src="https://github.com/mdo.png" alt="" width="32" height="32" class="rounded-circle me-2">
<%-- <strong><%= loginId %></strong> --%>
</a>
<ul class="dropdown-menu dropdown-menu-end text-small shadow">
<li><a class="dropdown-item" href="${ root }/users/my">๋ง์ด ํ์ด์ง</a></li>
<li><a class="dropdown-item" href="${ root }/users/update">ํ์์ ๋ณด ์์ </a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="${ root }/users/logout">๋ก๊ทธ์์</a></li>
</ul>
</div>
</li>
<%
}
%>
</ul>
</div>
</div>
</nav>
HTML
๋ณต์ฌ
footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="/layout/common.jsp" %>
<footer class="container p-5 text-center text-muted border-top mt-5">
<p class="mb-1">© 2025 ALOHA BOARD๐. All rights reserved.</p>
<p class="mb-0">
<a href="${root}/about.jsp">About</a> |
<a href="${root}/privacy.jsp">Privacy Policy</a> |
<a href="${root}/contact.jsp">Contact</a>
</p>
</footer>
HTML
๋ณต์ฌ
script.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="/layout/common.jsp" %>
<%-- ๋ผ์ด๋ธ๋ฌ๋ฆฌ --%>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js" integrity="sha384-j1CDi7MgGQ12Z7Qab0qlWQ/Qqz24Gc6BM0thvEMVjHnfYGF0rmFCozFSxQBxwHKO" crossorigin="anonymous"></script>
<%-- jQuery --%>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="${ root }/static/js/script.js"></script>
HTML
๋ณต์ฌ
ํ ํ๋ฆฟ ์ค์
1.
Window
2.
Preferences
3.
Web > JSP Files > Editor > Templates
a.
New
i.
Name : JSP Project Template
ii.
Context : New JSP
iii.
Description : JSP ํ๋ก์ ํธ ํ
ํ๋ฆฟ
iv.
Pattern : 
Pattern
<%@ include file="/layout/jstl.jsp" %>
<%@ include file="/layout/common.jsp" %>
<%@ page language="java" contentType="text/html; charset=${encoding}"
pageEncoding="${encoding}"%>
<!DOCTYPE html>
<html>
<head>
<title>project๐ป - ALOHA CLASS๐ด</title>
<jsp:include page="/layout/meta.jsp" />
<jsp:include page="/layout/link.jsp" />
</head>
<body>
<jsp:include page="/layout/header.jsp" />
<%-- [Contents] ######################################################### --%>
${cursor}
<%-- [Contents] ######################################################### --%>
<jsp:include page="/layout/footer.jsp" />
<jsp:include page="/layout/script.jsp" />
</body>
</html>
HTML
๋ณต์ฌ
index.jsp
<%@ include file="/layout/jstl.jsp" %>
<%@ include file="/layout/common.jsp" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>project๐ป - ALOHA CLASS๐ด</title>
<jsp:include page="/layout/meta.jsp" />
<jsp:include page="/layout/link.jsp" />
</head>
<body>
<jsp:include page="/layout/header.jsp" />
<%-- [Contents] ######################################################### --%>
<main>
<h1>๋ฉ์ธ ํ๋ฉด</h1>
</main>
<%-- [Contents] ######################################################### --%>
<jsp:include page="/layout/footer.jsp" />
<jsp:include page="/layout/script.jsp" />
</body>
</html>
HTML
๋ณต์ฌ