IT/Spring

[spring 게시판 만들기 #4] 게시판 목록 보이기

jaewon_sss 2020. 9. 14. 11:03
반응형

지난번 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}&nbsp;</td>
<td class="text_ct">${list.id}&nbsp;</td>
<td class="text_ct">${list.name}&nbsp;</td>
<td class="text_ct">${list.goal}&nbsp;</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 mapping
public void getList() throws Exception{

}
}



홈화면에 들어가기를 생성시켜줬고 이걸 누르면 로컬호스트/board/list 로 들어가게된다.




이제 이 페이지에 전에 넣었던 DB 내용을 불러올 것이다.




boardMapper.xml 코드


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//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">
select
no, id, name, goal, date, time
from 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;
@Repository
public class boardDAOImpl implements boardDAO {
@Inject
private SqlSession sql;
private static String namespace = "com.test_spring.mappers.board";
// 게시물 목록
// @Override
public 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;
@Service
public class boardServiceImpl implements boardService {
@Inject
private boardDAO dao;
// 회원 목록
@Override
public 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 {
@Inject
private boardService service;
@RequestMapping(value="/list", method=RequestMethod.GET) //url mapping
public 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" />



화면이 잘 나온다.


다음번엔 등록 수정 삭제 를 차례로 해볼 예정이다.

반응형