스프링 부트 게시판 만들기
제8강 게시글 보기
게시글 목록에 이어서 게시글 상세화면 구현입니다.
오늘도 Controller에서 시작~
package com.soledot.board.boardarticle;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URLConnection;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
/**
* @author soledot
* @since 20191108
* @version soledot
* @description boardarticle Controller
*
*/
@Controller
@RequestMapping("/boardarticle/*")
public class BoardarticleCtrl {
private static final Logger logger = LoggerFactory.getLogger(BoardarticleCtrl.class);
@Autowired BoardarticleSvc boardarticleSvc;
//---* 보기
@RequestMapping( "boardarticleview.sd" )
public String view( @RequestParam Map<String, Object> param, ModelMap model ){
try{
boardarticleSvc.view( param, model );
}catch( Exception e ){
logger.error( e.toString(), e );
}
return "boardarticle/boardarticleview";
}
}
http://localhost:8080/boardarticle/boardarticleview.sd 로 요청이 들어오면
BoardarticleSvcImpl의 view method로 넘겨주고 처리가 끝나면 boardarticleview.jsp로 결과 페이지가 출력됩니다.
package com.soledot.board.boardarticle;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
/**
* @author soledot
* @since 20191108
* @version soledot
* @description boardarticle Service Interface
*
*/
public interface BoardarticleSvc {
public boolean view( Map<String, Object> param, ModelMap model )throws Exception;
}
interface BoardarticleSvc
package com.soledot.board.boardarticle;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.ui.ModelMap;
import org.springframework.web.multipart.MultipartFile;
/**
* @author soledot
* @since 20191108
* @version soledot
* @description boardarticle Service 구현 클래스
*
*/
@Service("BoardarticleSvc")
public class BoardarticleSvcImpl implements BoardarticleSvc {
private static final Logger logger = LoggerFactory.getLogger(BoardarticleSvcImpl.class);
@Autowired HttpSession ss;
@Autowired BoardarticleDao boardarticleDao;
//---*fo 보기
@Override
public boolean view( Map<String, Object> param, ModelMap model ) throws Exception {
model.put("boardarticle", boardarticleDao.one( param ) ); //--- boardarticleDao의 one method에 param을 전달인자로 호출하고 결과를 model에 boardarticle로 담습니다.
return true;
}
}
BoardarticleSvc 의 구현 클래스 BoardarticleSvcImpl
마찬가지로 boardarticleDao의 one을 통해 Database에 Access하여 Database에 저장 된 Data를 가져오게 됩니다.
package com.soledot.board.boardarticle;
import java.util.List;
import java.util.Map;
/**
* @author soledot
* @since 20191108
* @version soledot
* @description boardarticle Dao Interface
*
*/
public interface BoardarticleDao {
//---*one row
public Map<String, Object> one( Map<String, Object> param );
}
interface BoardarticleDao
package com.soledot.board.boardarticle;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
/**
* @author soledot
* @since 20191108
* @version soledot
* @description boardarticle Dao 구현 클래스
*
*/
@Repository("BoardarticleDao")
public class BoardarticleDaoImpl implements BoardarticleDao {
@Autowired private SqlSession sqlSession;
//---*one row
@Override
public Map<String, Object> one( Map<String, Object> param ){
return (Map<String, Object>)sqlSession.selectOne( "boardarticle.one", param );
}
}
BoardarticleDao 구현 BoardarticleDaoImpl Class
<?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="boardarticle">
<select id="one" parameterType="hashmap" resultType="hashmap">
SELECT * FROM BOARDARTICLE
<!-- 아래 parameter 있을 경우 where가 자동으로 삽입됨. -->
<where>
<!-- 조건이 하나일 경우에는 AND가 붙지 않고, 앞에 조건이 있을 경우에만 AND가 자동으로 삽입됨 -->
<if test="null != seq and '' != seq">AND SEQ = #{seq}</if>
<if test="null != title and '' != title">AND TITLE = #{title}</if>
<if test="null != content and '' != content">AND CONTENT = #{content}</if>
</where>
</select>
</mapper>
boardarticle.xml 내용입니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" type="text/css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<div class="container">
<form action="boardarticleview.sd" id="frm" name="frm" method="post">
<table class="table table-bordered" >
<colgroup>
<col style="width: 20%;">
<col style="width: 80%">
</colgroup>
<tr>
<th>고유번호</th>
<td><c:out value='${boardarticle.seq}' /></td>
</tr>
<tr>
<th>제목</th>
<td><c:out value='${boardarticle.title}' /></td>
</tr>
<tr>
<th>내용</th>
<td><c:out value='${boardarticle.content}' /></td>
</tr>
<tr>
<th>첨부파일</th>
<td>
<!-- 첨부파일 다운로드를 위한 링크삽입 -->
<a href="/boardarticle/filedown.sd?seq=${boardarticle.seq}">${boardarticle.filename}</a>
</td>
</tr>
<tr>
<th>조회수</th>
<td><c:out value='${boardarticle.readcnt}' /></td>
</tr>
<tr>
<th>코멘트수</th>
<td><c:out value='${boardarticle.commentcnt}' /></td>
</tr>
<tr>
<th>추천수</th>
<td><c:out value='${boardarticle.recommendcnt}' /></td>
</tr>
<tr>
<th>그룹번호</th>
<td><c:out value='${boardarticle.groupnum}' /></td>
</tr>
<tr>
<th>레벨번호</th>
<td><c:out value='${boardarticle.levelnum}' /></td>
</tr>
<tr>
<th>스텝번호</th>
<td><c:out value='${boardarticle.stepnum}' /></td>
</tr>
<tr>
<th>등록IP</th>
<td><c:out value='${boardarticle.inip}' /></td>
</tr>
<tr>
<th>등록일</th>
<td>${ boardarticle.indate }</td>
</tr>
</table>
<div class="ln_solid"></div>
<div class="form-group">
<div class="col-sm-12">
<a class="btn btn-info" href="boardarticleadd.sd" role="button" title="등록"><i class="fa fa-plus"></i> 등록</a>
<a class="btn btn-primary" href="boardarticlelist.sd" role="button" title="리스트"><i class="fa fa-list-ul"></i> 리스트</a>
</div>
</div>
</form>
</div>
</body>
</html>
boardarticleview.jsp 게시글 상세화면 소스 입니다.
http://localhost:8080/boardarticle/boardarticlelist.sd로 접속하여
제목을 클릭하시면 아래와 같은 상세 페이지가 출력됩니다.