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

    반응형

     

    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에서 컨트롤러가 통과를 안하기 때문

     

     

    반응형

    댓글