KDT/WEB

240208 WEB(펀웹4(board))

001cloudid 2024. 2. 8. 13:28
728x90

게시판

top.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<header>

<!-- 로그인 유무 표시값 세션에서 가져와서 => 있으면 로그인이 됨, 없으면 로그인이 되지 않음 -->

<!-- 로그인 되지 않았을 때 나타내야할 정보(login, join) -->
<c:if test="${empty sessionScope.id }">
<div id="login"><a href="${pageContext.request.contextPath}/member/login">login</a> | <a href="${pageContext.request.contextPath}/member/insert">join</a></div>
</c:if>

<!-- 로그인 되었을 때 나타나야할 정보(logout, update) -->
<c:if test="${!empty sessionScope.id }">
<div id="login">${sessionScope.id}님 | <a href="${pageContext.request.contextPath}/member/logout">logout</a> | <a href="${pageContext.request.contextPath}/member/update">update</a></div>
</c:if>

<div class="clear"></div>
<!-- 로고들어가는 곳 -->
<div id="logo"><img src="${pageContext.request.contextPath}/resources/images/logo.gif" width="265" height="62" alt="Fun Web"></div>
<!-- 로고들어가는 곳 -->
<nav id="top_menu">
<ul>
	<li><a href="${pageContext.request.contextPath}/member/main">HOME</a></li>
	<li><a href="../company/welcome.html">COMPANY</a></li>
	<li><a href="#">SOLUTIONS</a></li>
	<li><a href="${pageContext.request.contextPath}/board/list">CUSTOMER CENTER</a></li>
	<li><a href="#">CONTACT US</a></li>
</ul>
</nav>
</header>

 

 

package com.itwillbs.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	@GetMapping("/list")
	public String list() {
		System.out.println("BoardController list()");
		
		// center/notice.jsp 주소변경없이 이동
		return "center/notice";
	}
	
}

 

notice.jsp

<%@ 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>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="${pageContext.request.contextPath}/resources/css/default.css" rel="stylesheet" type="text/css">
<link href="${pageContext.request.contextPath}/resources/css/subpage.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js" type="text/javascript"></script>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/ie7-squish.js" type="text/javascript"></script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
<![endif]-->
<!--[if IE 6]>
 <script src="../script/DD_belatedPNG_0.0.8a.js"></script>
 <script>
   /* EXAMPLE */
   DD_belatedPNG.fix('#wrap');
   DD_belatedPNG.fix('#main_img');   

 </script>
 <![endif]-->
</head>
<body>
<div id="wrap">
<!-- 헤더들어가는 곳 -->
<jsp:include page="../inc/top.jsp" />
<!-- 헤더들어가는 곳 -->

<!-- 본문들어가는 곳 -->
<!-- 메인이미지 -->
<div id="sub_img_center"></div>
<!-- 메인이미지 -->

<!-- 왼쪽메뉴 -->
<nav id="sub_menu">
<ul>
<li><a href="#">Notice</a></li>
<li><a href="#">Public News</a></li>
<li><a href="#">Driver Download</a></li>
<li><a href="#">Service Policy</a></li>
</ul>
</nav>
<!-- 왼쪽메뉴 -->

<!-- 게시판 -->
<article>
<h1>Notice</h1>
<table id="notice">
<tr><th class="tno">No.</th>
    <th class="ttitle">Title</th>
    <th class="twrite">Writer</th>
    <th class="tdate">Date</th>
    <th class="tread">Read</th></tr>
<tr><td>15</td><td class="left">Vivanus viveer portitor commodo.</td>
    <td>Host Admin</td><td>2012.11.06</td><td>15</td></tr>
<tr><td>14</td><td class="left">Vivanus viveer portitor commodo.</td>
    <td>Host Admin</td><td>2012.11.06</td><td>15</td></tr>
<tr><td>13</td><td class="left">Vivanus viveer portitor commodo.</td>
    <td>Host Admin</td><td>2012.11.06</td><td>15</td></tr>
<tr><td>12</td><td class="left">Vivanus viveer portitor commodo.</td>
    <td>Host Admin</td><td>2012.11.06</td><td>15</td></tr>
<tr><td>11</td><td class="left">Vivanus viveer portitor commodo.</td>
    <td>Host Admin</td><td>2012.11.06</td><td>15</td></tr>
<tr><td>10</td><td class="left">Vivanus viveer portitor commodo.</td>
    <td>Host Admin</td><td>2012.11.06</td><td>15</td></tr>
<tr><td>9</td><td class="left">Vivanus viveer portitor commodo.</td>
    <td>Host Admin</td><td>2012.11.06</td><td>15</td></tr>
<tr><td>8</td><td class="left">Vivanus viveer portitor commodo.</td>
    <td>Host Admin</td><td>2012.11.06</td><td>15</td></tr>
<tr><td>7</td><td class="left">Vivanus viveer portitor commodo.</td>
    <td>Host Admin</td><td>2012.11.06</td><td>15</td></tr>
<tr><td>6</td><td class="left">Vivanus viveer portitor commodo.</td>
    <td>Host Admin</td><td>2012.11.06</td><td>15</td></tr>
<tr><td>5</td><td class="left">Vivanus viveer portitor commodo.</td>
    <td>Host Admin</td><td>2012.11.06</td><td>15</td></tr>
<tr><td>4</td><td class="left">Vivanus viveer portitor commodo.</td>
    <td>Host Admin</td><td>2012.11.06</td><td>15</td></tr>
<tr><td>3</td><td class="left">Vivanus viveer portitor commodo.</td>
    <td>Host Admin</td><td>2012.11.06</td><td>15</td></tr>
<tr><td>2</td><td class="left">Vivanus viveer portitor commodo.</td>
    <td>Host Admin</td><td>2012.11.06</td><td>15</td></tr>
<tr><td>1</td><td class="left">Vivanus viveer portitor commodo.</td>
    <td>Host Admin</td><td>2012.11.06</td><td>15</td></tr>    
</table>

<!-- 로그인을 하지 않으면 글쓰기 버튼이 보이지 않게 설정 -->
<c:if test="${!empty sessionScope.id }">
<div id="table_search">
<!-- location 자바스크립트 내장 객체 => 웹 브라우저 주소줄을 객체로 정의
     location 내장객체 멤버 변수 => href 변수 : 웹 브라우저 주소줄 내용을 저장하고 있는 변수
						  => href 변수 내용이 변경되어지면 웹 브라우저 주소도 변경 
						  location.href='${pageContext.request.contextPath}/board/write -->
<input type="button" value="글쓰기" class="btn" onclick="location.href='${pageContext.request.contextPath}/board/write'">
</div>
</c:if>

<div id="table_search">
<input type="text" name="search" class="input_box">
<input type="button" value="search" class="btn">
</div>
<div class="clear"></div>
<div id="page_control">
<a href="#">Prev</a>
<a href="#">1</a><a href="#">2</a><a href="#">3</a>
<a href="#">4</a><a href="#">5</a><a href="#">6</a>
<a href="#">7</a><a href="#">8</a><a href="#">9</a>
<a href="#">10</a>
<a href="#">Next</a>
</div>
</article>
<!-- 게시판 -->
<!-- 본문들어가는 곳 -->
<div class="clear"></div>
<!-- 푸터들어가는 곳 -->
<jsp:include page="../inc/bottom.jsp" />
<!-- 푸터들어가는 곳 -->
</div>
</body>
</html>

 

write.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="${pageContext.request.contextPath}/resources/css/default.css" rel="stylesheet" type="text/css">
<link href="${pageContext.request.contextPath}/resources/css/subpage.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js" type="text/javascript"></script>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/ie7-squish.js" type="text/javascript"></script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
<![endif]-->
<!--[if IE 6]>
 <script src="../script/DD_belatedPNG_0.0.8a.js"></script>
 <script>
   /* EXAMPLE */
   DD_belatedPNG.fix('#wrap');
   DD_belatedPNG.fix('#main_img');   

 </script>
 <![endif]-->
</head>
<body>
<div id="wrap">
<!-- 헤더들어가는 곳 -->
<jsp:include page="../inc/top.jsp" />
<!-- 헤더들어가는 곳 -->

<!-- 본문들어가는 곳 -->
<!-- 메인이미지 -->
<div id="sub_img_center"></div>
<!-- 메인이미지 -->

<!-- 왼쪽메뉴 -->
<nav id="sub_menu">
<ul>
<li><a href="#">Notice</a></li>
<li><a href="#">Public News</a></li>
<li><a href="#">Driver Download</a></li>
<li><a href="#">Service Policy</a></li>
</ul>
</nav>
<!-- 왼쪽메뉴 -->

<!-- 게시판 -->
<article>
<h1>Write Notice</h1>
<form action="${pageContext.request.contextPath}/board/writePro" method="post">
<table id="notice">
<!-- 글쓴이 : 로그인 값 -->
<tr><td>글쓴이</td><td><input type="text" name="name" value="${sessionScope.id}" readonly></td></tr>
<!-- input name, value에 값을 넣어줘야 서버로 넘어감 -->
<tr><td>글제목</td><td><input type="text" name="subject" required></td></tr>
<tr><td>글내용</td><td><textarea name="content" rows="10" cols="20"></textarea></td></tr>


</table>

<div id="table_search">
<!-- location 자바스크립트 내장 객체 => 웹 브라우저 주소줄을 객체로 정의
     location 내장객체 멤버 변수 => href 변수 : 웹 브라우저 주소줄 내용을 저장하고 있는 변수
						  => href 변수 내용이 변경되어지면 웹 브라우저 주소도 변경 
						  location.href='${pageContext.request.contextPath}/board/write -->
<input type="submit" value="글쓰기" class="btn">
<input type="button" value="글목록" class="btn" onclick="location.href='${pageContext.request.contextPath}/board/list'">
</div>
</form>

<div class="clear"></div>
</article>
<!-- 게시판 -->
<!-- 본문들어가는 곳 -->
<div class="clear"></div>
<!-- 푸터들어가는 곳 -->
<jsp:include page="../inc/bottom.jsp" />
<!-- 푸터들어가는 곳 -->
</div>
</body>
</html>

 


package com.itwillbs.controller;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.itwillbs.domain.BoardDTO;
import com.itwillbs.service.BoardService;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	// BoardService 만들고 객체 생성 => 자동으로 객체생성 주입
	@Inject
	private BoardService boardService;
	
	@GetMapping("/list")
	public String list() {
		System.out.println("BoardController list()");
		
		// center/notice.jsp 주소변경없이 이동
		return "center/notice";
	}
	
	// get 방식 /board/write 주소 매핑
	// center/write.jsp 주소변경없이 이동
	@GetMapping("/write")
	public String write() {
		System.out.println("BoardController write()");
		
		return "center/write";
	}
	
	// post방식 /board/wrtiePro 주소 매핑
	// BoardDTO boardDTO 전달받으면 자동으로 request에 담긴 파라미터 값이 저장
	// insertBoard(boardDTO) 메소드 호출
	// /board/list 글 목록으로 주소 변경하면서 이동
	@PostMapping("/writePro")
	public String writePro(BoardDTO boardDTO) {
		System.out.println("BoardController writePro()");
		System.out.println(boardDTO);
		
		boardService.insertBoard(boardDTO);
		
		return "redirect:/board/list";
	}
	
}

 

package com.itwillbs.service;

import java.sql.Time;
import java.sql.Timestamp;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.itwillbs.dao.BoardDAO;
import com.itwillbs.domain.BoardDTO;

@Service
public class BoardService {
	
	//BoardDAO 객체생성 주입
	@Inject
	private BoardDAO boardDAO;
	
	public void insertBoard(BoardDTO boardDTO) {
		System.out.println("BoardService insertBoard()");
		//boardDTO에 담긴 값 : name=park1, subject=제목, content=내용
		//num, readcount, date를 처리 => boardDTO 저장		
		//num
		boardDTO.setNum(boardDAO.getMaxNum()+1);
		//readcount
		boardDTO.setReadcount(0);
		//date
		boardDTO.setDate(new Timestamp(System.currentTimeMillis()));
				
		boardDAO.insertBoard(boardDTO);
	}

}

 

package com.itwillbs.dao;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import com.itwillbs.domain.BoardDTO;

@Repository
public class BoardDAO {
	
	//마이바티스(SqlSession) 객체생성 주입 
	@Inject
	private SqlSession sqlSession;
	
	private static final String namespace = "com.itwillbs.mappers.boardMapper";

	public void insertBoard(BoardDTO boardDTO) {
		System.out.println("BoardDAO insertBoard()");
		System.out.println("BoardDTO : " + boardDTO);
		sqlSession.insert(namespace+".insertBoard",boardDTO);
	}

	public int getMaxNum() {
		System.out.println("BoardDAO getMaxNum()");
		return sqlSession.selectOne(namespace+".getMaxNum");
	}
	
}

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<mapper namespace="com.itwillbs.mappers.boardMapper">

	<insert id="insertBoard">
		insert into board(num, name, subject, content, readcount, date)
		values (#{num},#{name}, #{subject}, #{content}, #{readcount}, #{date}) 
	</insert>
	
	<select id="getMaxNum" resultType="java.lang.Integer">
		select max(num) from board
	</select>

</mapper>

 


글 잘라서 가져오기(페이지 처리)

package com.itwillbs.controller;

import java.util.List;

import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.itwillbs.domain.BoardDTO;
import com.itwillbs.domain.PageDTO;
import com.itwillbs.service.BoardService;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	// BoardService 만들고 객체 생성 => 자동으로 객체생성 주입
	@Inject
	private BoardService boardService;
	
	@GetMapping("/list")
	public String list(HttpServletRequest request, PageDTO pageDTO, Model model) {
		System.out.println("BoardController list()");
		
		// 한 화면에 보여줄 글의 개수 설정
		int pageSize = 15;
		// pageNum에 파라미터 값을 가져오기
		String pageNum = request.getParameter("pageNum"); //request에서 값을 받아옴
		// pageNum값이 없으면 1로 설정
		if(pageNum == null) {
			pageNum = "1";
		}
		
		//pageNum => 정수형 변경
		int currentPage = Integer.parseInt(pageNum);
		
		//pageDTO에 저장
		pageDTO.setPageSize(pageSize);
		pageDTO.setPageNum(pageNum);
		pageDTO.setCurrentPage(currentPage);
		
		List<BoardDTO> boardList = boardService.getBoardList(pageDTO);
		
		model.addAttribute("boardList", boardList);
		
		// center/notice.jsp 주소변경없이 이동
		return "center/notice";
	}
	
	// get 방식 /board/write 주소 매핑
	// center/write.jsp 주소변경없이 이동
	@GetMapping("/write")
	public String write() {
		System.out.println("BoardController write()");
		return "center/write";
	}
	
	// post방식 /board/wrtiePro 주소 매핑
	// BoardDTO boardDTO 전달받으면 자동으로 request에 담긴 파라미터 값이 저장
	// insertBoard(boardDTO) 메소드 호출
	// /board/list 글 목록으로 주소 변경하면서 이동
	@PostMapping("/writePro")
	public String writePro(BoardDTO boardDTO) {
		System.out.println("BoardController writePro()");
		System.out.println(boardDTO);
		
		boardService.insertBoard(boardDTO);
		
		return "redirect:/board/list";
	}
	
}

 

package com.itwillbs.service;

import java.sql.Time;
import java.sql.Timestamp;
import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.itwillbs.dao.BoardDAO;
import com.itwillbs.domain.BoardDTO;
import com.itwillbs.domain.PageDTO;

@Service
public class BoardService {
	
	//BoardDAO 객체생성 주입
	@Inject
	private BoardDAO boardDAO;
	
	public void insertBoard(BoardDTO boardDTO) {
		System.out.println("BoardService insertBoard()");
		//boardDTO에 담긴 값 : name=park1, subject=제목, content=내용
		//num, readcount, date를 처리 => boardDTO 저장		
		//num
		boardDTO.setNum(boardDAO.getMaxNum()+1);
		//readcount
		boardDTO.setReadcount(0);
		//date
		boardDTO.setDate(new Timestamp(System.currentTimeMillis()));
				
		boardDAO.insertBoard(boardDTO);
	}

	public List<BoardDTO> getBoardList(PageDTO pageDTO) {
		System.out.println("BoardService getBoardList()");
		
		//시작하는 행 번호 구하기 (currentPage, pageSize를 이용해서)
		int currentPage = pageDTO.getCurrentPage();
		int pageSize = pageDTO.getPageSize();
		int startRow = (currentPage - 1) * pageSize + 1;
		
		//끝나는 행 번호 구하기
		int endRow = startRow + pageSize - 1;
		
		//pageDTO에 저장
		//boardMapper => limit(한계까지 자르기) 시작행 - 1, 개수
		pageDTO.setStartRow(startRow - 1);
		pageDTO.setEndRow(endRow);
		
		return boardDAO.getBoardList(pageDTO);
	}

}

 

package com.itwillbs.dao;

import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import com.itwillbs.domain.BoardDTO;
import com.itwillbs.domain.PageDTO;

@Repository
public class BoardDAO {
	
	//마이바티스(SqlSession) 객체생성 주입 
	@Inject
	private SqlSession sqlSession;
	
	private static final String namespace = "com.itwillbs.mappers.boardMapper";

	public void insertBoard(BoardDTO boardDTO) {
		System.out.println("BoardDAO insertBoard()");
		System.out.println("BoardDTO : " + boardDTO);
		sqlSession.insert(namespace+".insertBoard",boardDTO);
	}

	public int getMaxNum() {
		System.out.println("BoardDAO getMaxNum()");
		
		
		return sqlSession.selectOne(namespace+".getMaxNum");
	}

	public List<BoardDTO> getBoardList(PageDTO pageDTO) {
		System.out.println("BoardDAO getBoardList()");
		System.out.println(pageDTO);
		return sqlSession.selectList(namespace+".getBoardList", pageDTO);
	}
	
}

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<mapper namespace="com.itwillbs.mappers.boardMapper">

	<insert id="insertBoard">
		insert into board(num, name, subject, content, readcount, date)
		values (#{num},#{name}, #{subject}, #{content}, #{readcount}, #{date}) 
	</insert>
	
	<select id="getMaxNum" resultType="java.lang.Integer">
		select max(num) from board
	</select>
	
	<select id="getBoardList" resultType="com.itwillbs.domain.BoardDTO">
		select * from board
		order by num desc
		limit #{startRow}, #{pageSize}
<!-- 		where 시작행 - 1, 개수 db에서 -1을 할 수 없기 때문에 BoardService에서 작업-->
	</select>

</mapper>

 

 

package com.itwillbs.service;

import java.sql.Time;
import java.sql.Timestamp;
import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.itwillbs.dao.BoardDAO;
import com.itwillbs.domain.BoardDTO;
import com.itwillbs.domain.PageDTO;

@Service
public class BoardService {
	
	//BoardDAO 객체생성 주입
	@Inject
	private BoardDAO boardDAO;
	
	public void insertBoard(BoardDTO boardDTO) {
		System.out.println("BoardService insertBoard()");
		//boardDTO에 담긴 값 : name=park1, subject=제목, content=내용
		//num, readcount, date를 처리 => boardDTO 저장		
		//num
		boardDTO.setNum(boardDAO.getMaxNum()+1);
		//readcount
		boardDTO.setReadcount(0);
		//date
		boardDTO.setDate(new Timestamp(System.currentTimeMillis()));
				
		boardDAO.insertBoard(boardDTO);
	}

	public List<BoardDTO> getBoardList(PageDTO pageDTO) {
		System.out.println("BoardService getBoardList()");
		
		//시작하는 행 번호 구하기 (currentPage, pageSize를 이용해서)
		int currentPage = pageDTO.getCurrentPage();
		int pageSize = pageDTO.getPageSize();
		int startRow = (currentPage - 1) * pageSize + 1;
		
		//끝나는 행 번호 구하기
		int endRow = startRow + pageSize - 1;
		
		//pageDTO에 저장
		//boardMapper => limit(한계까지 자르기) 시작행 - 1, 개수
		pageDTO.setStartRow(startRow - 1);
		pageDTO.setEndRow(endRow);
		
		return boardDAO.getBoardList(pageDTO);
	}

}

 

 

 

728x90

'KDT > WEB' 카테고리의 다른 글

240215 WEB - 글 수정, 삭제, 파일 업로드 1  (0) 2024.02.15
240213 WEB(펀웹5)  (0) 2024.02.13
240206 WEB(펍웹3, GitHub)  (0) 2024.02.06
240205 WEB(펀웹2)  (0) 2024.02.05
240201 WEB(조회, 펀웹1)  (0) 2024.02.01