지난번 DB 연동에 이어서
게시판 목록을 화면에 띄우는 방법
src - main -webapp - web-INF - views 에 folder 를 새로 만든다.
board 라는 이름의 폴더 생성
이 폴더에 jsp 파일을 생성해줄 것이다
이름은 list 를 보여줄거니까 list.jsp
home.jsp 코드
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ page session="false" %><html><head><title>Home</title></head><body><h1>코딩이 재밌냐</h1><P> The time on the server is ${serverTime}. </P><a href='<c:url value='/board/list'/>' role="button" class="btn btn-outline-info">들어가기</a></body></html>
list.jsp 코드
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"><meta charset="UTF-8"><title>list</title></head><body><form name="userForm"><h1>List page</h1><table><thead><tr><th scope="col">번호</th><th scope="col">ID</th><th scope="col">성함</th><th scope="col">목표</th><th scope="col">작성일</th><th scope="col">작성시간</th></tr></thead><tbody><c:forEach items="${list}" var="list"><tr><td class="text_ct">${list.no} </td><td class="text_ct">${list.id} </td><td class="text_ct">${list.name} </td><td class="text_ct">${list.goal} </td><td class="text_ct"><fmt:formatDate value="${list.date}" pattern="yyyy/MM/dd" /></td><td class="text_ct"><fmt:formatDate value="${list.time}" pattern="HH:mm:ss" /></td></tr></c:forEach></tbody></table></form></body></html>
board 에 list.jsp 를 만들어줬으니 이 board 페이지로 이동시켜줄 controller 생성
BoardController 코드
package com.myproject.myapp;import java.util.List;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.board.domain.BoardVO;@Controller@RequestMapping("/board/*")public class BoardController {@RequestMapping(value="/list", method=RequestMethod.GET) //url mappingpublic void getList() throws Exception{}}
홈화면에 들어가기를 생성시켜줬고 이걸 누르면 로컬호스트/board/list 로 들어가게된다.
이제 이 페이지에 전에 넣었던 DB 내용을 불러올 것이다.
boardMapper.xml 코드
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.test_spring.mappers.board"><!-- 게시물 목록 --><select id="list" resultType="com.board.domain.BoardVO">selectno, id, name, goal, date, timefrom i_can_do_it</select></mapper>
HTTP Request를 Web Application이 받게 되면 Thread를 생성하게 되는데 비즈니스 로직이 DB로부터 데이터를 얻어오기 위해 매번 Driver를 로드하고 Connection 객체를 생성하게 되면 엄청 많은 커넥션이 일어난다.
그래서 DAO를 하나 만들어 DB 전용 객체로만 쓰기 위해 dao package 를 만들어준다.
Service는 비지니스 로직이 들어가는 부분이다. Controller가 Request를 받으면 적절한 Service에 전달하고, 전달 받은 Service는 비즈니스 로직을 처리한다. DAO로 데이터베이스를 접근하고, DTO로 데이터를 전달받은 다음, 적절한 처리를 해 반환한다.
생성된 패키지에 interface 추가
boardDAO 코드
package com.board.dao;import java.util.List;import com.board.domain.BoardVO;public interface boardDAO {public List<BoardVO> list();//조회}
이어서 class 추가
boardDAOImpl 코드
package com.board.dao;import java.util.List;import javax.inject.Inject;import org.apache.ibatis.session.SqlSession;import org.springframework.stereotype.Repository;import com.board.domain.BoardVO;@Repositorypublic class boardDAOImpl implements boardDAO {@Injectprivate SqlSession sql;private static String namespace = "com.test_spring.mappers.board";// 게시물 목록// @Overridepublic List<BoardVO> list() {return sql.selectList(namespace + ".list");}}
service 부분도 위 dao 와 동일하게
boardService 코드
package com.board.service;import java.util.List;import com.board.domain.BoardVO;public interface boardService {public List<BoardVO> list();}
boardServiceImpl 코드
package com.board.service;import java.util.List;import javax.inject.Inject;import org.springframework.stereotype.Service;import com.board.dao.boardDAO;import com.board.domain.BoardVO;@Servicepublic class boardServiceImpl implements boardService {@Injectprivate boardDAO dao;// 회원 목록@Overridepublic List<BoardVO> list() {return dao.list();}}
BoardController 코드에서
VO를 list 로 받아와서 service 를 연결시켜주는 코드를 새로 추가
BoardController 코드
package com.myproject.myapp;import java.util.List;import javax.inject.Inject;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.board.domain.BoardVO;import com.board.service.boardService;@Controller@RequestMapping("/board/*")public class BoardController {@Injectprivate boardService service;@RequestMapping(value="/list", method=RequestMethod.GET) //url mappingpublic String getList(Model model) throws Exception{List<BoardVO> list = service.list();model.addAttribute("list", list);//board/list.jsp로 포워딩return "board/list";}}
root- context 에 domain, dao, service 사용하겠다고 선언
root-context 코드
<context:component-scan base-package="com.board.domain" />
<context:component-scan base-package="com.board.dao" />
<context:component-scan base-package="com.board.service" />
화면이 잘 나온다.
다음번엔 등록 수정 삭제 를 차례로 해볼 예정이다.
'IT > Spring' 카테고리의 다른 글
[spring 게시판 만들기 #5] 게시판 상세보기 Detail (2) | 2020.09.14 |
---|---|
[spring 게시판 만들기 #5] 게시판 등록 Create (0) | 2020.09.14 |
[spring 게시판 만들기 #3] MYSQL DB 데이터베이스 연결과 테이블 생성 (0) | 2020.09.09 |
[spring] 이클립스 eclipse 크롬 창으로 브라우저 띄우기 (0) | 2020.09.08 |
[spring 게시판 만들기 #2] tomcat 서버 연동과 url 변경 (0) | 2020.09.02 |