2022_03_05 - oneso123456789/2022 GitHub Wiki

Other

Chapter 11 ํ™”๋ฉด์ฒ˜๋ฆฌ

๊ฐ ์˜์—ญ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ฒ˜๋ฆฌ์™€ ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋จ
๋งŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ๋ชจ๋“  ๋ฌธ์ œ๋Š” ํ™”๋ฉด ์ชฝ์—์„œ๋งŒ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Œ
ํ™”๋ฉด์—๋Š” JSP์™€ JavaScript(jQuery), CSS, HTML์„ ์ด์šฉํ•ด์„œ ์ž‘์„ฑํ•จ

ํ™”๋ฉด์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์ „์—๋Š” ๋ฐ˜๋“œ์‹œ ํ™”๋ฉด์˜ ์ „์ฒด ๋ ˆ์ด์•„์›ƒ์ด๋‚˜ ๋””์ž์ธ์ด ๋ฐ˜์˜๋œ
์ƒํƒœ์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•จ
์ผ๋ถ€ ๊ฐœ๋ฐœ์ž๋“ค์€ ํ™”๋ฉด์„ ๋‚˜์ค‘์— ์ฒ˜๋ฆฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ง„ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ ๊ฒฐ๊ณผ์ ์œผ๋กœ๋Š”
๋‘ ๋ฐฐ์˜ ์‹œ๊ฐ„์„ ๋“ค์ด๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ

๋งŒ์ผ ์›น ๋””์ž์ด๋„ˆ๊ฐ€ ๊ฐ™์ด ์ฐธ์—ฌํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์ตœ๊ทผ์— ์œ ํ–‰ํ•˜๋Š” BootStrap์„ ์ด์šฉํ•œ
๋ฌด๋ฃŒ ๋””์ž์ธ์„ ์ฐพ์•„๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์Œ
https://startbootstrap.com/template-categories/all/

์˜ˆ์ œ์—์„œ ์‚ฌ์šฉํ•  ๋””์ž์ธ์€ 'SB Admin2'๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค
SB Admin2๋Š” http://startbootstrap.com/template-overviews/sb-admin-2/๋ฅผ ํ†ตํ•ด์„œ
๋‹ค์šด๋กœ๋“œ ํ›„์—๋Š” ์••์ถ•์„ ํ’€์–ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋จ

11.1 ๋ชฉ๋ก ํŽ˜์ด์ง€ ์ž‘์—…๊ณผ includes

์Šคํ”„๋ง MVC์˜ JSP๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์„ค์ •์€ servlet-context.xml์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑ๋˜์–ด ์žˆ์Œ

servlet-context.xml์˜ ์ผ๋ถ€

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<resources mapping="/resources/**" location="/resources/" />

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>

์Šคํ”„๋ง MVC์˜ ์„ค์ •์€ ViewResolver๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ,
์œ„์˜ ์„ค์ •์„ ๋ณด๋ฉด /WEB-INF/views/ํด๋”๋ฅผ ์ด์šฉํ•˜๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Œ

WEB-INF๊ฒฝ๋กœ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ๋กœ์ด๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ
Controller๋ฅผ ์ด์šฉํ•˜๋Š” ๋ชจ๋ธ2 ๋ฐฉ์‹์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ž„

๊ฒŒ์‹œ๋ฌผ ๋ฆฌ์ŠคํŠธ์˜ URL์€ /board/list์ด๋ฏ€๋กœ ์ตœ์ข…์ ์ธ ๊ฒฝ๋กœ๋Š”
/WEB-INF/views/board/list.jsp๊ฐ€ ๋จ ํ•ด๋‹น ๊ฒฝ๋กœ์— list.jsp ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ฒ ์Œ

views/board/list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>List Page</h1>
</body>
</html>

list.jsp๋Š” ์šฐ์„  ์ •์ƒ์ ์œผ๋กœ URL ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋Š”์ง€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ Tomcat์œผ๋กœ ์‹คํ–‰ํ•ด์„œ ํ™•์ธํ•จ
'ex02' ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  Run on Server๋กœ tomcat์‹คํ–‰ localhost๊ฒฝ๋กœ์— /controller/board/list๋กœ ์ ‘๊ทผ
์ฒซ ์‹คํ–‰์‹œ์—๋งŒ /controller๋ฅผ ๋ถ™์ด๊ณ  ์„œ๋ฒ„์„ค์ •์—์„œ Path๋ฅผ /๋กœ ๊ต์ฒดํ•ด์คŒ

11.1.1 SB Admin2 ํŽ˜์ด์ง€ ์ ์šฉํ•˜๊ธฐ

์ •์ƒ์ ์œผ๋กœ 'board/list' ํŽ˜์ด์ง€๊ฐ€ ๋™์ž‘ํ•œ๋‹ค๋ฉด SB Admin2์˜ pages ํด๋”์— ์žˆ๋Š”
tables.html ๋‚ด์šฉ์„ list.jsp์˜ ๋‚ด์šฉ์œผ๋กœ ๊ทธ๋Œ€๋กœ ์นดํ”ผ์•คํŽ˜์ด์ŠคํŠธ ํ•ด์คŒ
์ด๋•Œ list.jsp์˜ ์ƒ๋‹จ์— JSP Page ์ง€์‹œ์ž๋Š” ์ง€์šฐ์ง€ ์•Š์•„์•ผํ•จ

views/board/list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">

<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
... ์ดํ•˜ ์ƒ๋žต ...

๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” CSS ๋“ฑ์ด ์™„์ „ํžˆ ๊นจ์ง„ ์ƒํƒœ์ด๋ฏ€๋กœ ํ…์ŠคํŠธ๋งŒ ์ถœ๋ ฅ๋˜๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Œ

bootstrap ๋””๋ฒ„๊น… ๊ณผ์ •

CSS์™€ JSํŒŒ์ผ๋“ค์˜ ๊ฒฝ๋กœ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์€ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ†ตํ•ด์„œ ํ™•์ธํ•˜๋ฉฐ ์ง„ํ–‰ํ•จ
๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ†ตํ•ด์„œ ํ˜„์žฌ ๋ธŒ๋ผ์šฐ์ €์˜ Network ๋ถ€๋ถ„์„ ํ™•์ธํ•˜๊ณ , ํŽ˜์ด์ง€๋ฅผ '์ƒˆ๋กœ๊ณ ์นจ'ํ•˜๋ฉด ์ž˜๋ชป๋œ URL์˜ ์ •๋ณด๋ฅผ ํ™•์ธ๊ฐ€๋Šฅ

SB Admin02์˜ CSS ๊ฒฝ๋กœ๋Š” http://localhost:8080/vendor/bootstrap/css/bootstrap.min.css ์ด๋ฏ€๋กœ
ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ œ๋Œ€๋กœ ์„œ๋น„์Šค๋  ์ˆ˜ ์—†์Œ

com.crow.config.WebConfig ํด๋ž˜์Šค์—๋Š” CSS๋‚˜ JS ํŒŒ์ผ๊ณผ ๊ฐ™์ด ์ •์ ์ธ(static) ์ž์›๋“ค์˜ ๊ฒฝ๋กœ๋ฅผ
resources๋ผ๋Š” ๊ฒฝ๋กœ๋กœ ์ง€์ •ํ•˜๊ณ  ์žˆ์Œ

servlet-context.xml์˜ ์ผ๋ถ€

<resources mapping="/resources/**" location="/resources/" />

SB Admin2์˜ ์••์ถ•์„ ํ’€์–ด๋‘” ๋ชจ๋“  ํด๋”๋ฅผ ํ”„๋กœ์ ํŠธ ๋‚ด webapp ๋ฐ‘์˜ resources ํด๋”๋กœ ๋ณต์‚ฌํ•ด ๋„ฃ์–ด์คŒ
(resources๋ผ๋Š” ํด๋”๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์กด์žฌํ•˜๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผํ•จ WEB-INF๋ผ๋Š” ๊ฒฝ๋กœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฐพ๋Š” ๊ฒƒ์ด ์ข‹์Œ)

ํŒŒ์ผ๋“ค์„ resources ๊ฒฝ๋กœ๋กœ ๋„ฃ์–ด๋„ ์•„์ง์€ ํŽ˜์ด์ง€์—์„œ ๊ฒฝ๋กœ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ์€ ๋™์ผํ•จ
list.jsp ํŒŒ์ผ์—์„œ CSS๋‚˜ JS ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ /resources๋กœ ์‹œ์ž‘ํ•˜๋„๋ก ์ˆ˜์ •ํ•จ
(๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ Find/Replace๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹์ž„ ํ•˜์ง€๋งŒ bootstrap ๊ฐœํŽธํ›„ ์‚ฌ์ดํŠธ ์—์„œ ๋ฐ›์€ ๋ฒ„์ „์—์„  ๋ถˆ๊ฐ€๋Šฅ)

์ˆ˜์ • ํ›„ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด์„œ /board/list๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด CSS๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ ์šฉ๋œ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ์Œ
CSS, JS ํŒŒ์ผ๋“ค์˜ ๋งํฌ๋Š” ๋ชจ๋“  ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ๋  ๊ฒƒ์ด๋ฏ€๋กœ ํ™”๋ฉด์—์„œ ๋””์ž์ธ์ด ๊นจ์ง€์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ•œ ํ›„์— ๋‹ค์Œ ๋‚ด์šฉ์„ ์ง„ํ–‰ํ•˜๋„๋ก ํ•ด์•ผํ•จ

11.1.2 includes ์ ์šฉ

JSP๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋งˆ๋‹ค ๋งŽ์€ ์–‘์˜ HTML ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด JSP includes ์ง€์‹œ์ž๋ฅผ ํ™œ์šฉํ•ด์„œ
ํŽ˜์ด์ง€ ์ œ์ž‘ ์‹œ์— ํ•„์š”ํ•œ ๋‚ด์šฉ๋งŒ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ์‚ฌ์ „์— ์ž‘์—…์„ ํ•ด์•ผ ํ•จ

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ views ํด๋”์— includes ํด๋”๋ฅผ ์ž‘์„ฑํ•˜๊ณ , header.jsp์™€ footer.jsp๋ฅผ ์„ ์–ธํ•จ

header.jsp ์ ์šฉ

header.jsp๋Š” ํŽ˜์ด์ง€์—์„œ ํ•ต์‹ฌ์ ์ธ ๋ถ€๋ถ„์ด ์•„๋‹Œ ์˜์—ญ ์ค‘์—๋Š” ์œ„์ชฝ์˜ HTML ๋‚ด์šฉ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž‘์„ฑํ•จ
๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฒ€์‚ฌ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ํŠน์ •ํ•œ <div>๊ฐ€ ์–ด๋–ค ๋ถ€๋ถ„์„ ์˜๋ฏธํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

SB Admin2๋Š” <div>๋“ค ์ค‘์—์„œ id ์†์„ฑ๊ฐ’์ด page-wrapper๋ถ€ํ„ฐ๊ฐ€ ํ•ต์‹ฌ์ ์ธ ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ์ž„
list.jsp ํŒŒ์ผ์˜ ์ฒ˜์Œ ๋ถ€๋ถ„์—์„œ <div id='page-wrapper'>๋ผ์ธ๊นŒ์ง€ ์ž˜๋ผ์„œ header.jsp์˜ ๋‚ด์šฉ์œผ๋กœ ์ฒ˜๋ฆฌํ•จ
(์•ฝ 378๋ผ์ธ ๊ทผ์ฒ˜)

list.jsp ์ผ๋ถ€

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ include file="../includes/header.jsp" %>

            <div class="row">
                <div class="col-lg-12">
                    <h1 class="page-header">Tables</h1>
...์ƒ๋žต...

header.jsp <%@include ...๋กœ ์ฒ˜๋ฆฌํ•œ ํ›„์—๋Š” ๋‹ค์‹œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ™”๋ฉด์ด ๊นจ์ง€์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•จ

footer.jsp ์ ์šฉ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ