๐Ÿ’ปโ”‚IT_Study/๐Ÿ›ซโ”‚Web_Study

์†Œํ”„ํŠธ์›จ์–ด๊ณตํ•™์‹ค๋ฌด - 3

Jastes 2023. 3. 17. 11:10

2023-03-17


์„ ์ƒ๋‹˜์ด ์„ค๋ช…ํ•ด์ฃผ์‹  ์ฝ”๋“œ๋Š” ๋‹ค ์—ฌ๊ธฐ์— ์žˆ์–ด์š”
์ œ Git์— ์˜ฌ๋ฆด๊นŒ ํ–ˆ๋Š”๋ฐ ๊ตณ์ด ์‹ถ์–ด์„œ์š”

 

GitHub - bitcocom/springgsm

Contribute to bitcocom/springgsm development by creating an account on GitHub.

github.com

 

 

Project Start!!

์ €ํฌ๋Š” ์™ธํ˜•์€ Bootstrap ์‚ฌ์šฉํ• ๊ฑฐ๋‹ˆ๊นŒ..

 

W3Schools Free Online Web Tutorials

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

ํ•ด๋‹น ๊ต์œก์ž๋ฃŒ๋ฅผ ํ†ตํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ํ•ด๋ด…์‹œ๋‹ค.

์ €ํฌ๋Š” ์—ฌ๊ธฐ๋กœ
์ด ํ˜•์‹์˜ ํ‹€์„ ์‚ฌ์šฉํ• ๊ฒ๋‹ˆ๋‹น

๊ทธ์ „์— View Logic์— ๋ดค๋˜ ๊ทธ๋Œ€๋กœ ๋งŒ๋“ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Ž์•Œ๋“ค์‹ ์žก

 ์ฝ˜ํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ(CDN)๋Š” ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ๋Ÿ‰์ด ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์›น ํŽ˜์ด์ง€ ๋กœ๋“œ ์†๋„๋ฅผ ๋†’์ด๋Š” ์ƒํ˜ธ ์—ฐ๊ฒฐ๋œ ์„œ๋ฒ„ ๋„คํŠธ์›Œํฌ์ž…๋‹ˆ๋‹ค.

 

Bootstrap Using Hearder

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
  <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.3/dist/jquery.slim.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
 
<div class="card">
    <div class="card-header">Header</div>
    <div class="card-body">Content</div> 
    <div class="card-footer">Footer</div>
</div>

</body>
</html>

์•„๊นŒ ๋ดค๋˜ ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด์„œ template.jsp์— ๋ถ™์—ฌ์ค€ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ Hearder์— ํ˜„๊ด‘ํŒ์ฒ˜๋Ÿผ ํ•˜๋Š” jumbotron์„ ์‚ฌ์šฉํ•ฉ์‹œ๋‹ค.

<div class="jumbotron jumbotron-fluid">
     <div class="container">
        <h1>Spring Framework~</h1>      
        <p>Spring WEB MVC, JQuery(Ajax, JSON), MySQL</p>
      </div>
</div>

 

Bootstrap Using Content

Grid(ํ‘œ)

์ €๋Š” ๋ญ ํ”„๋ก ํŠธ๋„ ์•„๋‹ˆ๊ณ  ๋””์ž์ธ๋„ ์•„๋‹ˆ๊ณ  ์ „์— ๋ฐฐ์› ์–ด๋„ ์ด๋Ÿฐ ์‹œ๊ฐ„ ๋นผ๊ณค ์•ˆ ์“ฐ๊ธฐ๋„ ํ•˜๊ณ 
๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ด๋Ÿฐ ์„ค๋ช…์€ ๊ทธ๋ƒฅ ๋„˜์–ด๊ฐˆ๊ป˜์š”

์ €๋Š” ์ด๊ฑธ ์‚ฌ์šฉํ• ๊ป˜

<div class="row">
  <div class="col-3">
    <jsp:include page="left.jsp" />
  </div>
  <div class="col-6">
    col-6
  </div>
  <div class="col-3">
    <jsp:include page="right.jsp" />
  </div>
</div>

<div class="card">
  <div class="card-body">
    <h4 class="card-title">BOARD</h4>
    <p class="card-text">????</p>
    //content
  </div>
</div>

์ƒ๊ฐํ•ด๋ณด๋‹ˆ๊นŒ ์„ค๋ช…ํ•˜๊ธด ๊ท€์ฐฎ์œผ๋‹ˆ๊นŒ ๊ทธ๋ƒฅ ์ฝ”๋“œ๋งŒ ์˜ฌ๋ฆด๊ป˜์š”

tamplate.jsp ์ด์ •๋ฆฌ
๋”๋ณด๊ธฐ
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
  <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.3/dist/jquery.slim.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
 
<div class="card">
    <div class="card-header">
    	<div class="jumbotron jumbotron-fluid">
	 	 <div class="container">
		    <h1>Spring Framework~</h1>      
		    <p>Spring WEB MVC, JQuery(Ajax, JSON), MySQL</p>
		  </div>
	  	</div>
    </div>
    
    <div class="card-body">
    	<div class="row">
		  <div class="col-3">
		  	<jsp:include page="left.jsp" />
		  </div>
		  <div class="col-6">
		  	<div class="card">
			  <div class="card-body">
			    <h4 class="card-title">BOARD</h4>
			    <p class="card-text">????</p>
			    //content
			  </div>
			</div>
		  </div>
		  <div class="col-3">
		  	<jsp:include page="right.jsp" />
		  </div>
		</div>
    </div> 
    
    <div class="card-footer">
    	๊ด‘์ฃผ์†Œํ”„ํŠธ๋งˆ์ด์Šคํ„ฐ๊ณ ๋“ฑํ•™๊ต(3-3: ์ตœ์ค€์„ฑ)
    </div>
</div>

</body>
</html>

list.jsp ์ •๋ฆฌ
๋”๋ณด๊ธฐ

์ด์ „์— ๋งŒ๋“  template.jsp๋ฅผ ๋ณต์ œํ•ด์„œ ๋งŒ๋“ค์–ด๋†“๊ณ ,

...

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
  <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.3/dist/jquery.slim.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
 
<div class="card">
    <div class="card-header">
    	<div class="jumbotron jumbotron-fluid">
	 	 <div class="container">
		    <h1>Spring Framework~</h1>      
		    <p>Spring WEB MVC, JQuery(Ajax, JSON), MySQL</p>
		  </div>
	  	</div>
    </div>
    
    <div class="card-body">
    	<div class="row">
		  <div class="col-3">
		  	<jsp:include page="left.jsp" />
		  </div>
		  <div class="col-6">
		  	<div class="card">
			  <div class="card-body">
			    <h4 class="card-title">BOARD</h4>
			    <p class="card-text">๊ฒŒ์‹œํŒ ๋ฆฌ์ŠคํŠธ</p>
			    	<table class="table table-bordered table-hover">
			    		<thead>
			    			<tr>
			    				<td>๋ฒˆํ˜ธ</td>
			    				<td>์ œ๋ชฉ</td>
			    				<td>์ž‘์„ฑ์ž</td>
			    				<td>์ž‘์„ฑ์ผ</td>
			    				<td>์กฐํšŒ์ˆ˜</td>
		    				</tr>
	    				</thead>
	    				
	    				<tbody>
			    			<tr>
			    				<td>1</td>
			    				<td>์Šคํ”„๋ง๊ฒŒ์‹œํŒ ์—ฐ์Šต</td>
			    				<td>๊ด€๋ฆฌ์ž</td>
			    				<td>2023-03-07</td>
			    				<td>0</td>
		    				</tr>
		    				
		    				<tr>
			    				<td>2</td>
			    				<td>์Šคํ”„๋ง๊ฒŒ์‹œํŒ ์—ฐ์Šต</td>
			    				<td>์ตœ์ค€์„ฑ</td>
			    				<td>2023-03-07</td>
			    				<td>0</td>
		    				</tr>
	    				</tbody>
			    	</table>
			  </div>
			</div>
		  </div>
		  <div class="col-3">
		  	<jsp:include page="right.jsp" />
		  </div>
		</div>
    </div> 
    
    <div class="card-footer">
    	๊ด‘์ฃผ์†Œํ”„ํŠธ๋งˆ์ด์Šคํ„ฐ๊ณ ๋“ฑํ•™๊ต(3-3: ์ตœ์ค€์„ฑ)
    </div>
</div>

</body>
</html>

 

Controller ์กฐ์ž‘

MVC ํŠน์ง•์ธ๋ฐ ์ด์ „์— ์„ค๋ช…ํ–ˆ์œผ๋‹ˆ๊นŒ ๋„˜์–ด๊ฐ€๊ณ 

 BoardController์˜ class๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋™์ž‘ํ• ๋ ค๋ฉด ์œ„์— ์–ด๋…ธํ…Œ์ด์…˜@Controller)๊ฐ€ ํ•„์ˆ˜!

 ๋™์ž‘ํ• ๋ ค๋ฉด V๋‹จ์€ C์— ์š”์ฒญ → C๊ฐ€ V๋‹จ์˜ ํฌํŠธํฌ์›Œ๋”ฉ์„ ํ•ด์ค˜์•ผ ์‹คํ–‰๋จ
๊ท€์ฐฎ์ฃ .. ์•ž์— ์–ด๋…ธํ…Œ์ด์…˜ @Req..์ด๊ฑด ์š”์ฒญ์„ ํ•ด์•ผํ•˜๋ฉฐ, ์ฃผ์„์„ ์ž˜ ๋ณด์…”

ViewResolver๋Š” ๋ทฐ ์ด๋ฆ„๊ณผ ์ง€์—ญํ™”๋ฅผ ์œ„ํ•œ Locale์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋ฐ›์œผ๋ฉฐ, 
๋งคํ•‘๋˜๋Š” View ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉฐ,๋งŒ์•ฝ, ๋งคํ•‘๋˜๋Š” View ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด null์„ ๋ฆฌํ„ดํ•จ

view Resolver์˜ ๋ชจ์Šต

๋ญ” ๋ง์ธ๊ฐ€ ์‹ถ์ฃ .. MVC์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ์ดํ•ด๊ฐ€ ๋  ๊ฑฐ ๊ฐ™๊ธดํ•ด์š”;;
์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ ..

์ด๊ฑฐ ๋ณด๊ณ  ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Ex) http://127.0.0.1:8081/controller/list.do

๋œ ๋ชจ์Šต

์ด๋Ÿฐ๋ง ํ•˜๋ฉด ์ข€ ๊ทธ๋Ÿฐ๋ฐ ์ €๋Š” ์˜ค๋ฅ˜๊ฐ€ ์ข€ ์žˆ์–ด์„œ ์ˆ˜์ •ํ–ˆ๋Š”๋ฐ
์„ค๋ช…์•ˆํ•ด๋„ ๊ธˆ๋ฐฉ ๊ณ ์น  ์ˆ˜ ์žˆ์„๊ฑฐ์˜ˆ์š” 

 

 

DB Connection

๋”๋ฏธ ๋ฐ์ดํ„ฐ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์˜ค๋Š˜์€ ํ™•์ธ

MVC ํŠน์ง•์ž…๋‹ˆ๋‹ค.

BoardController.java
๋”๋ณด๊ธฐ
package kr.board.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import kr.board.entity.Board;

@Controller
public class BoardController {
	//list.do ์š”์ฒญ์ด ์˜ค๋ฉด ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ •์˜(Mapping)
	@RequestMapping("/list.do")
	public String list(Model model) {
		// ๊ฒŒ์‹œํŒ๋ฆฌ์ŠคํŠธ๋ฅผ DB์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ..
		// Controller์—์„œ View๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ธฐ๋Š” ๋ฐฉ๋ฒ•
		
		//Sample data
		Board vo = new Board();
		vo.setNum(1);
		vo.setTitle("๊ฒŒ์‹œํŒ ์ถœ๋ ฅํ•˜๊ธฐ");
		vo.setWriter("์ตœ์ค€์„ฑ");
		vo.setIndate(new Date());
		vo.setCount(0);
		
		List<Board> list = new ArrayList<>();
		
		list.add(vo);
		list.add(vo);
		list.add(vo);
		
		model.addAttribute("list", list);
		
		return "board/list"; // /WEB-INT/views/board/list.jsp:ViewResolver
	}
	
	@RequestMapping("/register.do")
	public String register() {
		return "";
	}

}

list.jsp
๋”๋ณด๊ธฐ
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  <!-- tag using java -->  
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
 
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
  <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.3/dist/jquery.slim.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
 
<div class="card">
    <div class="card-header">
    	<div class="jumbotron jumbotron-fluid">
	 	 <div class="container">
		    <h1>Spring Framework~</h1>      
		    <p>Spring WEB MVC, JQuery(Ajax, JSON), MySQL</p>
		  </div>
	  	</div>
    </div>
    
    <div class="card-body">
    	<div class="row">
		  <div class="col-3">
		  	<jsp:include page="left.jsp" />
		  </div>
		  <div class="col-6">
		  	<div class="card">
			  <div class="card-body">
			    <h4 class="card-title">BOARD</h4>
			    <p class="card-text">๊ฒŒ์‹œํŒ ๋ฆฌ์ŠคํŠธ</p>
			    	<table class="table table-bordered table-hover">
			    		<thead>
			    			<tr>
			    				<td>๋ฒˆํ˜ธ</td>
			    				<td>์ œ๋ชฉ</td>
			    				<td>์ž‘์„ฑ์ž</td>
			    				<td>์ž‘์„ฑ์ผ</td>
			    				<td>์กฐํšŒ์ˆ˜</td>
		    				</tr>
	    				</thead>
	    				
	    				<tbody>
							<c:forEach var="vo" items="${list}">   				
				    			<tr>
				    				<td>${vo.num}</td>
				    				<td>${vo.title }</td>
				    				<td>${vo.writer }</td>
				    				<td>${vo.indate }</td>
				    				<td>${vo.count }</td>
			    				</tr>
		    				</c:forEach>
	    				</tbody>
			    	</table>
			  </div>
			</div>
		  </div>
		  <div class="col-3">
		  	<jsp:include page="right.jsp" />
		  </div>
		</div>
    </div> 
    
    <div class="card-footer">
    	๊ด‘์ฃผ์†Œํ”„ํŠธ๋งˆ์ด์Šคํ„ฐ๊ณ ๋“ฑํ•™๊ต(3-3: ์ตœ์ค€์„ฑ)
    </div>
</div>

</body>
</html>

์ถ”ํ›„ ํ•ด๋‹น ๋™์ž‘์›๋ฆฌ๋ฅผ ์ •๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


์ฐธ๊ณ  ์ž๋ฃŒ

๋”๋ณด๊ธฐ

#์ฐธ๊ณ ์ž๋ฃŒ

...

#์ฐธ๊ณ ์ž๋ฃŒ

์ฐธ๊ณ  ์ด๋ฏธ์ง€