Study

[Study #30] 게시판 구현하기

PEAZH 2023. 7. 13. 19:12
반응형

 

01. Spring 설정 변경 방법

 

01) 파일을 생성할 때 폴더 설정 변경하기

 

02) 버전 변경하기

- pom.xml 파일에서 수정

 

- java와  spring 버전을 다음과 같이 변경 후 저장

 

- 패키지 우클릭 후 'Properties' 선택

변경완료

 

02. Spring 파일

  • java 파일 : 자바로 작성된 Controller, Service, DAO 등이 있음. 
    .java파일은 (src/main/java/com/peazh/web) 에 위치
  • webapp : 웹과 관련된 파일들이 위치해 있음 (ex. html, css, js, jsp 파일)
  • webapp의 resources : jsp 파일 제외한 html, css, js 파일이 있음
  • view : view로 사용될 파일로 jsp파일 위치
  • pom.xml : Maven 설정 파일로 Maven은 프로젝트 빌드 도구 및 관리 도구임

- 'servlet-context.xml'에서 표시된 부분때문에 'HomeController.java'에서 return값이 'WEB-INF/views/home.jsp'에 위치한 파일이 열림

 

 

03. 'BoardController.java' 파일 생성

// 사용자가 board라고 호출하면 동작할 맵핑 메서드 생성

// board가 들어올 때 get방식만 실행
@RequestMapping(value = "/board", method = RequestMethod.GET)

// board가 들어올 때 get, post 방식 둘 다 실행
@RequestMapping(value = "/board", method = {RequestMethod.GET, RequestMethod.POST})

// 간단한 방법
@GetMapping("/board")// get 방식
@PostMapping("/board")// post 방식

 

 

04. 'board.jsp' 파일 생성

- src/main/webapp/view에 'board.jsp' 파일 생성하기

 

 

[ 전송 방법 1 ] 

 

- 'BoardController.java' 파일

package com.peazh.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class BoardController {
	
	@GetMapping("/board")
	public String board() {
		return "board"; 
	}
}

 

- 'board.jsp' 파일

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>board</title>
</head>
<body>
	<h1>보드</h1>
    데이터는 잠시 후에 붙여보겠습니다.
</body>
</html>

 

- 실행화면

실행화면

 

[ 전송 방법 2 ]

 

- 'BoardController.java' 파일

package com.peazh.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class BoardController {

//사용자가 board라고 호출하면 동작할 맵핑 메서드 생성
@GetMapping("/board")
public ModelAndView board() {

ModelAndView mv = new ModelAndView("board"); //jsp 파일명
mv.addObject("name", "채여름");
return mv; 
}
}

 

- 'board.jsp' 파일

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>board</title>
</head>
<body>
<h1>보드 : ${name }</h1>
</body>
</html>

 

- 실행화면

실행화면

 

 

05. 'BoardDTO' 생성해서 연결하기

 

[ STEP 1 ] src/main/java/com/peazh/web 위치에 'BoardDTO.java' 생성

package com.peazh.web;

public class BoardDTO {
	private int bno, blike;
	private String btitle, bcontent, bwrite, bdate;
	public int getBno() {
		return bno;
	}
	public void setBno(int bno) {
		this.bno = bno;
	}
	public int getBlike() {
		return blike;
	}
	public void setBlike(int blike) {
		this.blike = blike;
	}
	public String getBtitle() {
		return btitle;
	}
	public void setBtitle(String btitle) {
		this.btitle = btitle;
	}
	public String getBcontent() {
		return bcontent;
	}
	public void setBcontent(String bcontent) {
		this.bcontent = bcontent;
	}
	public String getBwrite() {
		return bwrite;
	}
	public void setBwrite(String bwrite) {
		this.bwrite = bwrite;
	}
	public String getBdate() {
		return bdate;
	}
	public void setBdate(String bdate) {
		this.bdate = bdate;
	}
}

 

[ STEP 2 ] 'BoardController.java'에서 DTO 담기

package com.peazh.web;

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

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class BoardController {

//사용자가 board라고 호출하면 동작할 맵핑 메서드 생성
@GetMapping("/board")
public ModelAndView board() {

ModelAndView mv = new ModelAndView("board"); //jsp 파일명
mv.addObject("name", "채여름");

List<BoardDTO> list = new ArrayList<BoardDTO>();

return mv; 
}
}

 

[ STEP 3 ] 'board.jsp'에서 list 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>board</title>
</head>
<body>
<h1>보드 : ${name }</h1>
${list }
</body>
</html>

 

실행화면

 

 

06. jsp 파일에서 JSTL 사용하기

  • JSTL : Jsp Standard Tag Library
  • 아래의 코드를 jsp 파일 상단에 넣으면 jstl의 core 태그를 사용할 수 있음
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

core 태그의 종류

 

[ 예시 1 ]  <c:forEach> 반복문

<%@ 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>
<head>
<meta charset="UTF-8">
<title>board</title>
</head>
<body>
<h1>보드 : ${name }</h1>
${list }
<hr>
<c:forEach begin="1" end="10" var="i">
반복문
</c:forEach>
</body>
</html>

실행화면

 

[ 예시 2 ] <c:forEach> 반복문

<%@ 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>
<head>
<meta charset="UTF-8">
<title>board</title>
</head>
<body>
<h1>보드 : ${name }</h1>
${list }
<hr>
<c:forEach begin="1" end="10" var="i">
${i }<br>
</c:forEach>
</body>
</html>

실행화면

 

[ 예시 3 ] <c:forEach> 이용해서 list 출력하기

  • items : <c:forEach> 태그에서 사용되는 속성으로 반복할 대상을 지정 (배열, 리스트만 들어갈 수 있음)
  • var은 0번지 인덱스부터 차례대로 값을 가져옴
<%@ 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>
<head>
<meta charset="UTF-8">
<title>board</title>
</head>
<body>
<h1>보드 : ${name }</h1>
${list }
<hr>
<c:forEach items="${list }" var="i">
${i }<br>
</c:forEach>
</body>
</html>

실행화면

 

[ 예시 4 ] <c:if test=""> if문과 동일하고 참의 값만 출력함

<c:if test="조건문">참만 나옵니다.</c:if>

 

[ 예시 5 ] <c:choose>문은 when과 otherwise와 함께 사용하며 참과 거짓 중 출력함

<c:choose>
<c:when test="${ 1 + 1 == 3 }">
참입니다.
</c:when>
<c:otherwise>
거짓입니다.
</c:otherwise>
</c:choose>
/* 거짓입니다. */

 

오류 해결 과정🤔

- 아래의 코드에서 없는 변수 ${i.writer } 를 입력해서 에러 발생

<%@ 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>
<head>
<meta charset="UTF-8">
<title>board</title>
</head>
<body>
<h1>보드 : ${name }</h1>
${list }
<hr>
<c:forEach items="${list }" var="i">
${i.bno } / ${i.btitle } / ${i.writer }<br>
</c:forEach>
</body>
</html>

개발자 오류

- 오타를 수정해서 오류 해결 👌

 

 

 

07. list를 표에 넣기

 

[ STEP 1 ] 표 안에 내용 넣기

<%@ 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>
<head>
<meta charset="UTF-8">
<title>board</title>
</head>
<body>
	<table>
		<thead>
			<tr>
				<th>번호</th>
				<th>제목</th>
				<th>작성자</th>
				<th>작성일</th>
				<th>조회수</th>
			</tr>
		</thead>

		<tbody>
			<tr>
				<td>1</td>
				<td>첫 번째 글</td>
				<td>채여름</td>
				<td>2023-07-13</td>
				<td>45</td>
			</tr>
		</tbody>

	</table>
</body>
</html>

실행화면

 

[ STEP 2 ] <c:forEach>태그 이용해서 표 안에 내용 넣기

<%@ 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>
<head>
<meta charset="UTF-8">
<title>board</title>
</head>
<body>
	<h1>보드 : ${name }</h1>

	<table>
		<thead>
			<tr>
				<th>번호</th>
				<th>제목</th>
				<th>작성자</th>
				<th>작성일</th>
				<th>조회수</th>
			</tr>
		</thead>

		<tbody>
			<c:forEach begin="1" end="10" var="row">
				<tr>
					<td>1</td>
					<td>첫 번째 글</td>
					<td>채여름</td>
					<td>2023-07-13</td>
					<td>45</td>
				</tr>
			</c:forEach>
		</tbody>

	</table>
</body>
</html>

실행화면

 

[ STEP 3 ] list를 가지고 와서 표 안에 내용 넣기

  • <c:forEach items="${list }" var="row"> : List를 열어서 row로 하나씩 꺼내주기
<%@ 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>
<head>
<meta charset="UTF-8">
<title>board</title>
</head>
<body>
	<h1>보드 : ${name }</h1>

	<table>
		<thead>
			<tr>
				<th>번호</th>
				<th>제목</th>
				<th>작성자</th>
				<th>작성일</th>
				<th>조회수</th>
			</tr>
		</thead>

		<tbody>
			<c:forEach items="${list }" var="row">
				<tr>
					<td>${row.bno }</td>
					<td>${row.btitle }</td>
					<td>${row.bwrite }</td>
					<td>${row.bdate }</td>
					<td>${row.blike }</td>
				</tr>
			</c:forEach>
		</tbody>

	</table>
</body>
</html>

실행화면

 

08. 'board.css' 파일 생성

 

[ STEP 1 ] 'board.jsp'에 </head> 위 부분에 아래의 코드 추가

<link href="./resources/css/board.css" rel="stylesheet">

 

 

[ STEP 2 ] 'src/main/webapp/resources에 'css' 폴더 만들고 그 안에 'board.css' 파일 생성하기

 

 

[ STEP 3 ] 'board.css' 파일 body에 색을 넣어 'board.jsp'와 잘 연결됐나 확인하기

@charset "UTF-8";
body{ 
background-color: pink;
}

 

 

[ STEP 4 ] 'board.css' 파일에서 스타일 주기

    • margin: 0 auto;   가운데 정렬
    • border-collapse: collapse   셀과 셀 사이의 약간의 기본 공백이 있는데 그 공백을 제거
    • text-align: center;   글자 중앙 정렬
    • border-bottom: 1px solid;   밑줄 1두께 실선
@charset "UTF-8";
@font-face {
    font-family: 'SUITE-Regular';
    src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_2304-2@1.0/SUITE-Regular.woff2') format('woff2');
    font-weight: 400;
    font-style: normal;
}
body {
	font-family: 'SUITE-Regular';
}

table{
	margin: 0 auto;
	width: 800px;
	height: 500px;
}

th {
	background-color: #fcc7f8;
}
td{
	text-align: center;
	border-bottom: 1px solid #fcc7f8;
}

#td1 {
	width: 10%;
}

#td2 {
	width: 20%;
}

tr:hover {
	background-color: #EEEEEE;
}

실행화면

 

 

 

09. 기본 파일 수정

 

01) 파일 경로 줄여주기

 

[ STEP 1 ] '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/" />
   <resources location="/resources/css/" mapping="/css/**"/>
   <resources location="/resources/js/" mapping="/js/**"/>
   <resources location="/resources/img/" mapping="/img/**"/>

 

[ STEP 2 ] 'board.jsp' 파일에서 코드 수정하기

/* 원래의 코드 */
<link href="./resources/css/board.css" rel="stylesheet">

/* 수정된 코드 */
<link href="./css/board.css" rel="stylesheet">

 

 

02) 생성자를 만들어서 <c:forEach>문 줄이기

 

[ STEP 1 ] 'BoardDTO.java'에서 생성자 만들기

package com.peazh.web;

public class BoardDTO {
private int bno, blike;
private String btitle, bcontent, bwrite, bdate;

public BoardDTO() {}

public BoardDTO(int bno, String btitle, String bwrite, String bdate, int blike) {
this.bno = bno;
this.btitle = btitle;
this.bwrite = bwrite;
this.bdate = bdate;
this.blike = blike;
}

public int getBno() {
return bno;
}
public void setBno(int bno) {
this.bno = bno;
}
public int getBlike() {
return blike;
}
public void setBlike(int blike) {
this.blike = blike;
}
public String getBtitle() {
return btitle;
}
public void setBtitle(String btitle) {
this.btitle = btitle;
}
public String getBcontent() {
return bcontent;
}
public void setBcontent(String bcontent) {
this.bcontent = bcontent;
}
public String getBwrite() {
return bwrite;
}
public void setBwrite(String bwrite) {
this.bwrite = bwrite;
}
public String getBdate() {
return bdate;
}
public void setBdate(String bdate) {
this.bdate = bdate;
}
}

 

[ STEP 2 ] 'BoardController.java'에서 코드 수정하기 (list : DTO)

@GetMapping("/board")
public ModelAndView board() {

ModelAndView mv = new ModelAndView("board"); //jsp 파일명
mv.addObject("name", "채여름");

List<BoardDTO> list = new ArrayList<BoardDTO>();
for (int i = 1; i < 11; i++) {
BoardDTO e = new BoardDTO(i, i + "번째 글입니다.", "채여름", "2023-07-" + i, i * 10);
list.add(e);
}
}

 

[ STEP 3 ] 'BoardController.java'에서 list2 추가하기 (list2 : Map)

List<Map<String, Object>> list2 = new ArrayList<Map<String, Object>>();

for (int i = 0; i < 10; i++) {
Map<String, Object> e = new HashMap<String, Object>();
e.put("bno", i);
e.put("btitle", i + "번째 글입니다.");
e.put("bwrite", "채여름");
e.put("bdate", "2023-07-13");
e.put("blike", i * 10);
list2.add(e);
}

mv.addObject("list2", list2);

return mv;

 

 

03) board2.jsp 만들기

 

[ STEP 1 ] 'BoardController.java' 파일에서 아래의 코드 추가

@GetMapping("/board2")
public String board2(Model model) {
model.addAttribute("name", "채여름");

List<BoardDTO> list = new ArrayList<BoardDTO>();
for (int i = 1; i < 11; i++) {
BoardDTO dto = new BoardDTO(i, "제목입니다", "채여름", "2023-07-13", i);
list.add(dto);
}

model.addAttribute("list", list);

return "board2";
}

 

[ STEP 2 ] 'board2.jsp' 파일 생성하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>board2</title>
</head>
<body>
<h1>board2 : ${name }</h1>
</body>
</html>

실행화면

 

[ STEP 3 ] 'board2.jsp' 파일에서 list 출력해보기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>board2</title>
</head>
<body>
<h1>board2 : ${name }</h1>
${list }
</body>
</html>

실행화면

 

[ STEP 4 ] 'board2.jsp' 파일에서 list 표로 출력해보기

<%@ 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>
<head>
<meta charset="UTF-8">
<title>board2</title>
</head>
<body>
	<h1>board2 : ${name }</h1>
	<table>
		<tr>
			<td>번호</td>
			<td>제목</td>
			<td>글쓴이</td>
			<td>날짜</td>
			<td>읽음</td>
		</tr>
		<c:forEach items="${list }" var="row">
			<tr>
				<td>${row.bno }</td>
				<td>${row.btitle }</td>
				<td>${row.bwrite }</td>
				<td>${row.bdate }</td>
				<td>${row.blike }</td>
			</tr>
		</c:forEach>
	</table>
</body>
</html>

실행화면

 

 

 

04) 리스트가 없다면 실행 못하게 제한하기

 

[ STEP 1 ] 'BoardController.java' 에서 아래의 코드로 수정해서 오류 내보기

for (int i = 1; i < 0; i++) {
Map<String, Object> e = new HashMap<String, Object>();

오류화면

 

[ STEP 2 ] 'board2.jsp' 에서 아래의 코드 추가하기

  • Fn 태그에서 'length'를 이용하기 위함
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

Fn태그

 

[ STEP 3 ] 'board2.jsp' 에서 아래의 코드 활용하기

choose
<c:choose>
<c:when test="${fn:length(list) gt 0 }">
참입니다.
</c:when>
<c:otherwise>
출력할 데이터가 없습니다.<br>
관리자에게 문의하세요.
</c:otherwise>
</c:choose>

 

[ STEP 4 ] 'board2.jsp' 에서 위의 코드 적용하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html> 
<head>
<meta charset="UTF-8">
<title>board2</title>
</head>
<body>
<h1>board2 : ${name }</h1>

<c:choose>
<c:when test="${fn:length(list) gt 0 }">
<table>
<tr>
<td>번호</td>
<td>제목</td>
<td>글쓴이</td>
<td>날짜</td>
<td>읽음</td>
</tr>
<c:forEach items="${list }" var="row">
<tr>
<td>${row.bno }</td>
<td>${row.btitle }</td>
<td>${row.bwrite }</td>
<td>${row.bdate }</td>
<td>${row.blike }</td>
</tr>
</c:forEach>
</table>
</c:when>
<c:otherwise>
출력할 데이터가 없습니다.<br>
관리자에게 문의하세요.
</c:otherwise>
</c:choose>
</body>
</html>

 

- 리스트가 있을 경우 실행화면

 

- 리스트가 없을 경우 실행화면

 

05) 'pom.xml' 코드 추가하기

 

[ STEP 1 ] <dependencies> 위에 넣기

  • 전자정부 페이징 사용하기 위함
<repositories>
<repository>
<id>mvn2</id>
<url>http://repo1.maven.org/maven2</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>

<repository>
<id>egovframe</id>
<url>http://www.egovframe.go.kr/maven</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

 

[ STEP 2 ] <dependencies> 안에 추가하기

  • jar 파일 사용하기 위함
<!-- spring jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>

<!-- 전자정부 페이징 -->
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.ptl.mvc</artifactId>
<version>3.8.0</version>
</dependency>

<!-- 파일업로드 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>

<!-- mariadb-java-client -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>3.0.8</version>
</dependency>

<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>

<!-- mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>

 

06) web.xml 수정하기

  • 프로젝트 실행했을 때 처음 나오는 화면을 바꿔주기 위함

[ STEP 1 ] 아래의 코드 추가하기

<welcome-file-list>
<welcome-file>/WEB-INF/views/board.jsp</welcome-file>
</welcome-file-list>

 

[ STEP 2 ] 완성된 코드

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<welcome-file-list>
<welcome-file>/WEB-INF/views/board.jsp</welcome-file>
</welcome-file-list>

<!-- The definition of the Root Spring Container shared by all Servlets 
and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>

<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

</web-app>

 

 

10. mariaDB 연결하기

 

파일의 흐름

01) root-context.xml 파일 수정하기

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- Root Context: defines shared resources visible to all other web components -->

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="username" value="id" />
<property name="password" value="password" />
<property name="url" value="jdbc:mariadb://localhost:/choongang" />
<property name="driverClassName" value="org.mariadb.jdbc.jdbc.Driver" />
</bean>

<bean id="sqlSessionFactoryBean"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="mapperLocations" value="classpath:/mybatis/mappers/*-mapper.xml"></property>
<property name="configLocation" value="classpath:/mybatis/config/mybatisConfig.xml"></property>
</bean>

<bean id="sqlSession"
class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory"
ref="sqlSessionFactoryBean"></constructor-arg>
</bean>

</beans>

 

 

02) 필요한 파일 생성하기

 

03) 'BoardService.java' 파일

package com.peazh.web;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

// 비즈니스 로직 담당
// 컨트롤러랑 연결하기

@Service
public class BoardService {
	
	//DAO와 연결하기
	@Autowired
	private BoardDAO boardDAO;
	
	public List<BoardDTO> boardList() {
		return boardDAO.boardList();
	}
}

 

04) 'BoardDAO.java' 파일

package com.peazh.web;
//데이터베이스(마이바티스)와 연결

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class BoardDAO {

	// sqlSession과 연결합니다.
	@Autowired
	private SqlSession sqlSession;

	public List<BoardDTO> boardList() {
		return sqlSession.selectList("boardtest.boardList");
	}
}

 

05) 'board-mapper.xml' 파일

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="boardtest">
	<select id="boardList" resultType="boardDTO">
		SELECT * FROM board
	</select>
</mapper>

 

06) 'mybatisConfig.xml' 파일

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<typeAliases>
		<typeAlias type="com.peazh.web.BoardDTO" alias="boardDTO"/>
	</typeAliases>
</configuration>

 

07) 'BoardController.java' 수정

package com.peazh.web;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class BoardController {
	
	// 서비스와 연결하기
	// 보드서비스의 객체가 boardService안으로 들어감
	@Autowired
	private BoardService boardService;
	
	//사용자가 board라고 호출하면 동작할 맵핑 메서드 생성
	@GetMapping("/board")
	public ModelAndView board() {
		
		ModelAndView mv = new ModelAndView("board"); //jsp 파일명
		
		// 서비스 일 시키기
		List<BoardDTO> list = boardService.boardList();
		
		mv.addObject("list", list);
		
		return mv; 
	}

}

최종화면

 

오류 해결 과정🤔

- 밑에 화면이 안 뜨는 이유 : jsp에서 컨트롤러가 통과를 안하기 때문

 

 

반응형