습관제작소

22-08-18 JavaSpring MVC패턴, Model, 게시물 목록 실습(객체 바인딩, EL, DB연결) 본문

SMHRD or ITSchool/JavaSpring and Boot

22-08-18 JavaSpring MVC패턴, Model, 게시물 목록 실습(객체 바인딩, EL, DB연결)

KUDO 2022. 8. 20. 16:47

- 자료 위치

https://m.blog.naver.com/fjqm1277/222852708269?referrerCode=1

 

[DAY0819] Spring Spring MVC패턴, Model , 게시물 목록 실습(객체 바인딩,EL, DB연결)

1. Spring MVC패턴 2. Model Controller의 메서드는 Model이라는 타입의 객체를 파라미터로 받을 수...

blog.naver.com

1. Spring MVC패턴

2. Model

Controller의 메서드는 Model이라는 타입의 객체를 파라미터로 받을 수 있으며

JSP Servlet으로 웹 어플리케이션을 만들 때 보통 request나 session 내장 객체에 정보를 담아 jsp로 넘겨줬었는데

이를 Spring 에서는 Model을 사용

→ request.setAttribute() 와 비슷한 역할

<boardController.java>

package com.smhrd.web;

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

import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;

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

import com.smhrd.domain.Board;

// 어노테이션을 사용해서 이 파일이 Controller인것을 알려줘야함
@Controller
public class BoardController {
	// forntController를 써야하는 이유 -> servlet이 너무 많아져서 
	
	// boardWrite.do --> 게시글 작성

	// boardList.do --> 게시글 목록 가져오기
	// 메서드 하나하나가 servlet이라고 생각하면 된다. 메서드가 실행 -> 기능
	// RequestMapping() : servlet의 URL Mapping
	@RequestMapping("/boardList.do")
	public String boardList(Model model) {
		// 필요한 객체를 매개변수에 집어 넣으면 Spring이 알아서 채워줌 
		// Model --> request에서 setAttribute 기능을 제외하고 나머지를 감량시킨 객체 
		//   		 request보다 가벼워서 많이 사용 
		
		// 게시글 목록을 가지고 이동
		// 번호, 제목 , 작성자 ,내용 , 작성일, 조회수
		List<Board> list = new ArrayList<Board>();
		list.add(new Board(1, "스프링게시판", "관리자", "스프링", "22-08-18", 0));
		list.add(new Board(2, "스프링게시판", "함혜지", "스프링2", "22-08-18", 2));

		// 객체 바인딩: 특정 저장 공간에 data를 저장시켰다가 다시 꺼내서 사용
		
		// request영역에 list 저장
		//request.setAttribute("list", list);
		
		model.addAttribute("list", list);
		// request 영역에 저장/ 꺼낼때는 request 객체에서 꺼내야함
		
		// forward 이동
		// ViewResolver라는 친구가 완전한 경로로 바꿔줌
		// View(JSP)의 이름만 리턴
		return "boardList";

		/*
		 *   String view = "WEB-INF/views/boardList.jsp"; 
		 *   RequestDispatcher rd =request.getRequestDispatcher(view); 
		 *   rd.forward(request,response);
		 *   
		 *   appServlet 
		 */
	}
}

 

 

<boardList.jsp>

<%@page import="java.util.List"%>
<%@page import="com.smhrd.domain.Board"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>게시글 목록</h1>

	<%
		//request 영역에 저장된 list를 가져와서 출력
	// 1. request 영역에 있는 list 꺼내기
	// 선행조건이 업캐스팅이 일어난 상태 
	List<Board> list = (List<Board>) request.getAttribute("list");
	%>

	<table border=1>
		<tr>
		<td>글번호</td>
		<td>제목</td>
		<td>작성자</td>
		</tr>
	<%for( Board dto : list){ %>
		<tr>
		<td> <%=dto.getIdx() %></td>
		<td> <%=dto.getTitle()%></td>
		<td> <%=dto.getWriter()%></td>
		</tr>

<%} %>

	</table>

</body>
</html>

boardList.do urlMapping 값 작성 시 이동

3. 부트스트랩 이용한 실습

 

<boardController.java>

package com.smhrd.web;

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

import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;

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

import com.smhrd.domain.Board;

// 어노테이션을 사용해서 이 파일이 Controller인것을 알려줘야함
@Controller
public class BoardController {
	// forntController를 써야하는 이유 -> servlet이 너무 많아져서 
	
	// boardWrite.do --> 게시글 작성

	// boardList.do --> 게시글 목록 가져오기
	// 메서드 하나하나가 servlet이라고 생각하면 된다. 메서드가 실행 -> 기능
	// RequestMapping() : servlet의 URL Mapping
	@RequestMapping("/boardList.do")
	public String boardList(Model model) {
		// 필요한 객체를 매개변수에 집어 넣으면 Spring이 알아서 채워줌 
		// Model --> request에서 setAttribute 기능을 제외하고 나머지를 감량시킨 객체 
		//   		 request보다 가벼워서 많이 사용 
		
		// 게시글 목록을 가지고 이동
		// 번호, 제목 , 작성자 ,내용 , 작성일, 조회수
		List<Board> list = new ArrayList<Board>();
		list.add(new Board(1, "스프링게시판", "관리자", "스프링", "22-08-18", 0));
		list.add(new Board(2, "스프링게시판", "함혜지", "스프링2", "22-08-18", 2));

		// 객체 바인딩: 특정 저장 공간에 data를 저장시켰다가 다시 꺼내서 사용
		
		// request영역에 list 저장
		//request.setAttribute("list", list);
		
		model.addAttribute("list", list);
		// request 영역에 저장/ 꺼낼때는 request 객체에서 꺼내야함
		
		// forward 이동
		// ViewResolver라는 친구가 완전한 경로로 바꿔줌
		// View(JSP)의 이름만 리턴
		return "boardList";

		/*
		 *   String view = "WEB-INF/views/boardList.jsp"; 
		 *   RequestDispatcher rd =request.getRequestDispatcher(view); 
		 *   rd.forward(request,response);
		 *   
		 *   appServlet 
		 */
	}
}

 

<boardList.jsp>

EL :Context에 저장된 데이터를 출력시켜주는 문법

- request, session에서 가져옴

${name} -> JVM에 저장 하기 때문에 int a = 10;(X)EL로 출력할 수 없음

== out.print(request.getAttribute("a"));

- 연산이 가능

JSTL : java코드를 태그 형식으로 사용하는 문법

taglib 지시자를 통해 사용하고자하는 라이브러리를 정의

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script
	src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script
	src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>

	<div class="container">
		<h2>Spring MVC01</h2>
		<div class="panel panel-default">
			<div class="panel-heading">스프링 게시판 만들기</div>
			<div class="panel-body">

				<%-- 게시판 목록 출력  --%>
				<%--EL: Context에 저장된 데이터를 출력시켜주는 문법   - request, session에서 가져옴
			
	     		${name}  -> JVM에 저장 하기 때문에  int a = 10;(X)EL로 출력할 수 없음
    	 		 == out.print(request.getAttribute("a"));
     			 - 연산이 가능
     			JSTL: java코드를 태그 형식으로 사용하는 문법
     			taglib 지시자를 통해 사용하고자하는 라이브러리를 정의 	  
     --%>

				<table class="table table-hover table-bordered">
					<tr>
						<td>글번호</td>
						<td>제목</td>
						<td>작성자</td>
						<td>작성일</td>
						<td>조회수</td>
					</tr>
					<%-- forEach태그: for문 
						items > 배열이 들어가는 자리 
						var > 변수명(배열에서 꺼내서 담아둘 변수 )
						== for(var : list) --%>
					<%-- List<Board> list = (List<Board>)request.getAttribute("list");
					  for(Board dto : list){ }
				 --%>
					<c:forEach var="dto" items="${list}">
						<tr>
							<%--out.print(dto.getIdx()); --%>
							<td>${dto.idx}</td>
							<td>${dto.title}</td>
							<td>${dto.writer}</td>
							<td>${dto.indate}</td>
							<td>${dto.count}</td>
						</tr>
					</c:forEach>
				</table>

				<%-- <% request.setAttribute("a", "request영역");
    
    %>
   	 저장된 값 : ${a} --%>

			</div>
			<div class="panel-footer">빅데이터 14차 함혜지</div>
		</div>
	</div>

</body>
</html>

 

< mysql 설정 >

C:\eGovFrame-3.10.0\bin\mysql-5.6.21

startup.bat 파일 실행

 

C:\eGovFrame-3.10.0\bin\mysql-5.6.21\bin

해당 경로 복사하여 명령프롬프트(CMD) 실행하여

> cd C:\eGovFrame-3.10.0\bin\mysql-5.6.21\bin

> mysql -u root -p

Enter

root 계정에 비밀번호가설정 되어있지않기 때문에

mysql > update user

> set password = password('12345')

> where host = 'localhost'

> and user = 'root';

myspl> exit

> mysql -u root -p

> Enter password: 12345

Enter

 

<이클립스 DB 연결 >

 
 
 

 

Comments