📌 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> 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}님이 로그인 하셨습니다.
<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> 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> 회원관리</a>
<a href="${path}/item/list" class="w3-bar-item w3-button w3-padding">
<i class="fa fa-eye fa-fw">
</i> 상품관리</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> 공지사항</a>
<a href="${path}/board/list?boardid=2" class="w3-bar-item w3-button w3-padding">
<i class="fa fa-bullseye fa-fw">
</i> 자유게시판</a>
<a href="${path}/board/list?boardid=3" class="w3-bar-item w3-button w3-padding">
<i class="fa fa-diamond fa-fw">
</i> 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;
}**
}