본문 바로가기
수업(국비지원)/Mybatis

[MYBATIS] (MVC 2) 게시판 글쓰기(writer, kiclayout, BoardController)

by byeolsub 2023. 4. 21.

📌 writer.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%-- /springmvc2/src/main/webapp/WEB-INF/view/board/write.jsp --%>    
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>게시글 작성</title></head>
<body>
<form:form modelAttribute="board" action="write" enctype="multipart/form-data" name="f">
  <table class="w3-table-all"><caption>${boardName} 게시글 작성</caption>
  <tr><td>글쓴이</td><td><form:input path="writer" />
  <font color="red"><form:errors path="writer" /></font></td></tr>
  <tr><td>비밀번호</td><td><form:password path="pass" />
  <font color="red"><form:errors path="pass" /></font></td></tr>
  <tr><td>제목</td><td><form:input path="subject" />
  <font color="red"><form:errors path="subject" /></font></td></tr>
  <tr><td>내용</td><td><form:textarea  path="content" rows="15" cols="80"/>
  <script type="text/javascript">
     CKEDITOR.replace("content",{filebrowserImageUploadUrl:"imgupload"})
  </script>
  <font color="red"><form:errors path="content" /></font></td></tr>
  <tr><td>첨부파일</td><td><input type="file" name="file1"></td></tr>
  <tr><td colspan="2"><a href="javascript:document.f.submit()">[게시글등록]</a>
  <a href="list">[게시글목록]</a></td></tr>
</table></form:form></body></html>

 

  • 레이아웃 설정하기

📌 kiclayout.jsp 내용 추가

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="path" value="${pageContext.request.contextPath}"/>    
<%-- /springmvc1/src/main/webapp/layout/kiclayout.jsp --%>    

<!DOCTYPE html>
<html>
<head>
<title><sitemesh:write property="title"/></title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Raleway">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<%-- ckeditor 설정 --%>
<script type="text/javascript" src="http://cdn.ckeditor.com/4.5.7/standard/ckeditor.js"></script>
<style>
html,body,h1,h2,h3,h4,h5 {font-family: "Raleway", sans-serif}
</style>
<sitemesh:write property="head"/>
</head>
<body class="w3-light-grey">

<!-- Top container -->
<div class="w3-bar w3-top w3-black w3-large" style="z-index:4">
  <button class="w3-bar-item w3-button w3-hide-large w3-hover-none w3-hover-text-light-grey" onclick="w3_open();"><i class="fa fa-bars"></i> &nbsp;Menu</button>
  <span class="w3-bar-item w3-right">
    <c:if test="${empty sessionScope.loginUser}">
     <a href="${path}/user/login">로그인</a>
     <a href="${path}/user/join">회원가입</a>
    </c:if>
    <c:if test="${!empty sessionScope.loginUser}">
     ${sessionScope.loginUser.username}님이 로그인 하셨습니다.&nbsp;&nbsp; 
     <a href="${path}/user/logout">로그아웃</a>
    </c:if>
  </span>
</div>

<!-- Sidebar/menu -->
<nav class="w3-sidebar w3-collapse w3-white w3-animate-left" style="z-index:3;width:300px;" id="mySidebar"><br>
  <div class="w3-container w3-row">
    <div class="w3-col s4">
      <img src="${path}/image/logo.png" class="w3-circle w3-margin-right" style="width:100px">
    </div>
    <div class="w3-col s8 w3-bar">
      <c:if test="${!empty sessionScope.loginUser}">
      <span>반갑습니다, <strong>${sessionScope.loginUser.username}님</strong></span><br>
      </c:if>
      <c:if test="${empty sessionScope.loginUser}">
      <span><strong>로그인 하세요.</strong></span><br>
      </c:if>
    </div>
  </div>
  <hr>
  <div class="w3-bar-block">
    <a href="#" class="w3-bar-item w3-button w3-padding-16 w3-hide-large w3-dark-grey w3-hover-black" onclick="w3_close()" title="close menu"><i class="fa fa-remove fa-fw"></i>&nbsp; Close Menu</a>
    <a href="${path}/user/mypage?id=${loginUser.userid}" class="w3-bar-item w3-button w3-padding w3-blue">
    <i class="fa fa-users fa-fw">
    </i>&nbsp; 회원관리</a>
    <a href="${path}/item/list" class="w3-bar-item w3-button w3-padding">
    <i class="fa fa-eye fa-fw">
    </i>&nbsp; 상품관리</a>
    <hr>
    <a href="${path}/board/list?doardid=1" class="w3-bar-item w3-button w3-padding">
    <i class="fa fa-users fa-fw">
    </i>&nbsp; 공지사항</a>
    <a href="${path}/board/list?boardid=2" class="w3-bar-item w3-button w3-padding">
    <i class="fa fa-bullseye fa-fw">
    </i>&nbsp; 자유게시판</a>
    <a href="${path}/board/list?boardid=3" class="w3-bar-item w3-button w3-padding">
    <i class="fa fa-diamond fa-fw">
    </i>&nbsp; QnA</a>
  </div>
</nav>


<!-- Overlay effect when opening sidebar on small screens -->
<div class="w3-overlay w3-hide-large w3-animate-opacity" onclick="w3_close()" style="cursor:pointer" title="close side menu" id="myOverlay"></div>

<!-- !PAGE CONTENT! -->
<div class="w3-main" style="margin-left:300px;margin-top:43px;">

  <!-- Header -->
  <header class="w3-container" style="padding-top:22px">
    <h5><b><i class="fa fa-dashboard"></i> My Dashboard</b></h5>
  </header>

  <div class="w3-row-padding w3-margin-bottom">
    <div class="w3-quarter">
      <div class="w3-container w3-red w3-padding-16">
        <div class="w3-left"><i class="fa fa-comment w3-xxxlarge"></i></div>
        <div class="w3-right">
          <h3>52</h3>
        </div>
        <div class="w3-clear"></div>
        <h4>Messages</h4>
      </div>
    </div>
    <div class="w3-quarter">
      <div class="w3-container w3-blue w3-padding-16">
        <div class="w3-left"><i class="fa fa-eye w3-xxxlarge"></i></div>
        <div class="w3-right">
          <h3>99</h3>
        </div>
        <div class="w3-clear"></div>
        <h4>Views</h4>
      </div>
    </div>
    <div class="w3-quarter">
      <div class="w3-container w3-teal w3-padding-16">
        <div class="w3-left"><i class="fa fa-share-alt w3-xxxlarge"></i></div>
        <div class="w3-right">
          <h3>23</h3>
        </div>
        <div class="w3-clear"></div>
        <h4>Shares</h4>
      </div>
    </div>
    <div class="w3-quarter">
      <div class="w3-container w3-orange w3-text-white w3-padding-16">
        <div class="w3-left"><i class="fa fa-users w3-xxxlarge"></i></div>
        <div class="w3-right">
          <h3>50</h3>
        </div>
        <div class="w3-clear"></div>
        <h4>Users</h4>
      </div>
    </div>
  </div>

  <div class="w3-panel">
  <sitemesh:write property="body"/>
  </div>
  <hr>
  
  <!-- Footer -->
  <footer class="w3-container w3-padding-16 w3-light-grey">
    <h4>FOOTER</h4>
    <p>Powered by <a href="https://www.w3schools.com/w3css/default.asp" target="_blank">w3.css</a></p>
  </footer>

  <!-- End page content -->
</div>

<script>
// Get the Sidebar
var mySidebar = document.getElementById("mySidebar");

// Get the DIV with overlay effect
var overlayBg = document.getElementById("myOverlay");

// Toggle between showing and hiding the sidebar, and add overlay effect
function w3_open() {
  if (mySidebar.style.display === 'block') {
    mySidebar.style.display = 'none';
    overlayBg.style.display = "none";
  } else {
    mySidebar.style.display = 'block';
    overlayBg.style.display = "block";
  }
}

// Close the sidebar with the close button
function w3_close() {
  mySidebar.style.display = "none";
  overlayBg.style.display = "none";
}
</script>

</body>
</html>

📌 BoardController 내용 추가

package controller;

import java.util.List;

import javax.servlet.http.HttpSession;

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

import logic.Board;
import logic.ShopService;

@Controller
@RequestMapping("board")
public class BoardController {
	
	@Autowired
	private ShopService service;
	
	@RequestMapping("list")
	public ModelAndView list(Integer pageNum, String boardid, HttpSession session) {
		ModelAndView mav = new ModelAndView();
		if(pageNum == null || pageNum.toString().equals("")) {
			pageNum = 1; //pageNum 파라미터가 없는 경우 1로 설정
		}  
		if(boardid == null || boardid.equals("")) {
			boardid = "1"; //boardid 파라미터가 없는 경우 1로 설정
		}
		session.setAttribute("boardid",boardid); //게시판 종류 세션에 등록
		String boardName = null; //게사판 이름을 저장
		switch(boardid) {
		case "1" : boardName = "공지사항"; break;
		case "2" : boardName = "자유게시판"; break;
		case "3" : boardName = "QNA"; break;
		}
		int limit = 10; //한 페이지에 출력을 해야하는 게시물의 개수. 한페이지에 10개씩 화면에 출력
		//게시판 종류별 등록된 게시글 개수
		int listcount = service.boardcount(boardid); 
		//boardlist : 한페이지에 출력될 게시물 목록
		List<Board> boardlist = service.boardlist(pageNum,limit,boardid);
		
		//페이징 처리를 위한 데이터
		/* 최대 페이지
		 *  listcount     maxpage
		 *     1             1
		 *     10            1
		 *     11            2
		 */
		int maxpage = (int)((double)listcount/limit + 0.95); 
		//화면에 표시될 페이지의 시작번호
		/*
		 * pageNum     startpage
		 *    1            1
		 *    5            1
		 *    10           1
		 *    11           11
		 *    20           11
		 */
		int startpage = (int)((pageNum/10.0 + 0.9) -1) * 10 + 1;
		//화면에 표시될 페이지의 끝번호, 시작번호부터 10개
		int endpage = startpage + 9;
		//endpage는 maxpage를 넘으면 안된다.
		if(endpage > maxpage) endpage = maxpage;
		//화면에 표시 될 순차적인 게시물 번호
		/*
		 *  listcount   pageNum   boardno
		 *      1          1         1 
		 *      11         1         11
		 *      11         2         1 
		 */
		int boardno = listcount - (pageNum - 1) * limit;
		//list.jsp 뷰에 전달할 데이터 설정
		mav.addObject("boardid",boardid);
		mav.addObject("boardName",boardName);
		mav.addObject("pageNum",pageNum);
		mav.addObject("maxpage",maxpage);
		mav.addObject("startpage",startpage);
		mav.addObject("endpage",endpage);
		mav.addObject("listcount",listcount);
		mav.addObject("boardlist",boardlist);
		mav.addObject("boardno",boardno);
		return mav;
	}
	**@GetMapping("write")
	public ModelAndView getBoard(HttpSession session) {
		ModelAndView mav = new ModelAndView();
		String boardid = (String)session.getAttribute("boardid");
		if(boardid == null) boardid="1";
		String boardName = null;
		switch(boardid) {
		case "1" : boardName="공지사항";break;
		case "2" : boardName="자유게시판";break;
		case "3" : boardName="QNA";break;
		}
		mav.addObject("board",new Board());
		mav.addObject("boardName", boardName);
		return mav;
	}**
}