Search

ํ…œํ”Œ๋ฆฟ ์ž‘์—…

ํ…œํ”Œ๋ฆฟ ์ž‘์—…

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
๋ณต์‚ฌ
ContextPath ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฃจํŠธ ๊ฒฝ๋กœ๋กœ, ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์„œ ๊ณตํ†ต ์ฝ”๋“œ๋กœ ์‚ฌ์šฉํ•  common.jsp ์—์„œ ๋””๋ ‰ํ‹ฐ๋ธŒ include ๋กœ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.
โ€ข
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
๋ณต์‚ฌ
bootstrap CSS CDN ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

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">&copy; 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
๋ณต์‚ฌ
Bootstrap JS CDN ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•˜์˜€์Šต๋‹ˆ๋‹ค.
jquery CDN ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ ์„ค์ •

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
๋ณต์‚ฌ