KDT/WEB

2410220 WEB 메인에서 최신 글 보여주기, 게시판 검색

001cloudid 2024. 2. 20. 13:05
728x90

중복확인을 조금 더 안정적으로 하기 위해서

AjaxController

package com.itwillbs.controller;

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

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.itwillbs.domain.MemberDTO;
import com.itwillbs.service.MemberService;

@RestController
public class AjaxController {
	
	@Inject
	private MemberService memberService;
	
	@GetMapping("/member/idCheck")
	public ResponseEntity<String> idCheck(MemberDTO memberDTO, HttpServletResponse response) {
		System.out.println("MemberController idCheck()");
		System.out.println(memberDTO);
		
		MemberDTO memberDTO1 = memberService.getMember(memberDTO.getId());
		
		System.out.println(memberDTO1);
		//아이디가 있으면 memberDTO1 주소값 전달 => 아이디 중복
		//아이디가 없으면 memberDTO1 null 전달 => 아이디 사용가능
		
		String result ="";
		if(memberDTO1 != null) {
			//아이디 중복
			//result = "사용 불가능한 아이디입니다.";
			result = "iddup";
		}else {
			result = "idok";
			//result = "사용 가능한 아이디입니다.";
		}
		System.out.println(result);
		// 원래 return 이동할 주소 => ajax 처리 return 출력 결과 리턴 => 출력 결과 응답 (어노테이션@ResponseBody)
		// 출력 결과를 가지고 join.jsp 이동(안정적으로 되돌아감) => ResponseEntity
		ResponseEntity<String> entity = new ResponseEntity<String>(result, HttpStatus.OK);
		return entity;
	}
	
}

 


메인 페이지에 최근 글 보이기

json설치

pom.xml

		<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
		<dependency>
		    <groupId>com.fasterxml.jackson.core</groupId>
		    <artifactId>jackson-databind</artifactId>
		    <version>2.15.2</version>
		</dependency>
		<!-- 데이터를 json형태로 변경하는 프로그램 jackson-databind 끝 -->

 

main.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/front.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]--> 

<script src="${pageContext.request.contextPath}/resources/script/jquery-3.7.1.min.js"></script>
</head>
<body>
<div id="wrap">
<!-- 헤더파일들어가는 곳 -->
<jsp:include page="../inc/top.jsp" />
<!-- 헤더파일들어가는 곳 -->
<!-- 메인이미지 들어가는곳 -->
<div class="clear"></div>
<div id="main_img"><img src="${pageContext.request.contextPath}/resources/images/main_img.jpg"
 width="971" height="282"></div>
<!-- 메인이미지 들어가는곳 -->
<!-- 메인 콘텐츠 들어가는 곳 -->
<article id="front">
<div id="solution">
<div id="hosting">
<h3>Web Hosting Solution</h3>
<p>Lorem impsun Lorem impsunLorem impsunLorem
 impsunLorem impsunLorem impsunLorem impsunLorem
  impsunLorem impsunLorem impsun....</p>
</div>
<div id="security">
<h3>Web Security Solution</h3>
<p>Lorem impsun Lorem impsunLorem impsunLorem
 impsunLorem impsunLorem impsunLorem impsunLorem
  impsunLorem impsunLorem impsun....</p>
</div>
<div id="payment">
<h3>Web Payment Solution</h3>
<p>Lorem impsun Lorem impsunLorem impsunLorem
 impsunLorem impsunLorem impsunLorem impsunLorem
  impsunLorem impsunLorem impsun....</p>
</div>
</div>
<div class="clear"></div>
<div id="sec_news">
<h3><span class="orange">Security</span> News</h3>
<dl>
<dt>Vivamus id ligula....</dt>
<dd>Proin quis ante Proin quis anteProin 
quis anteProin quis anteProin quis anteProin 
quis ante......</dd>
</dl>
<dl>
<dt>Vivamus id ligula....</dt>
<dd>Proin quis ante Proin quis anteProin 
quis anteProin quis anteProin quis anteProin 
quis ante......</dd>
</dl>
</div>
<div id="news_notice">
<h3 class="brown">News &amp; Notice</h3>
<table>
<tr><td class="contxt"><a href="#">Vivans....</a></td>
    <td>2012.11.02</td></tr>
<tr><td class="contxt"><a href="#">Vivans....</a></td>
    <td>2012.11.02</td></tr>
<tr><td class="contxt"><a href="#">Vivans....</a></td>
    <td>2012.11.02</td></tr>
<tr><td class="contxt"><a href="#">Vivans....</a></td>
    <td>2012.11.02</td></tr>
<tr><td class="contxt"><a href="#">Vivans....</a></td>
    <td>2012.11.02</td></tr>
</table>
</div>
</article>
<!-- 메인 콘텐츠 들어가는 곳 -->
<div class="clear"></div>
<!-- 푸터 들어가는 곳 -->
<jsp:include page="../inc/bottom.jsp" />
<!-- 푸터 들어가는 곳 -->
</div>

<!-- 
dataType: 'json' => 데이터 리턴타입 종류
xml(eXtensible Markup Language)형태 : 확장된 마크업 언어, 사용자가 정의하는 태그 사용
							ex)		<member>
										<person><id>abc</id><pw>123</pw><name>태조</name></person>
										<person><id>bcd</id><pw>456</pw><name>정조</name></person>
										<person><id>cde</id><pw>789</pw><name>태종</name></person>
									</member>
json(JavaScript Object Notation)형태 : 자바스크립트 객체(배열) 속성,값의 쌍 형태로 데이터 표현, 
									 웹과 컴퓨터 프로그램에서 용량이 적은 데이터를 교환하기 위해 데이터 객체 속성 값의 쌍 형태로 표현하는 형식
							ex)		 [
									 	{"id" : "abc", "pw" : "123", "name" : "태조"},
									 	{"id" : "bcd", "pw" : "456", "name" : "정조"},
									 	{"id" : "cde", "pw" : "789", "name" : "태종"},
									 ]
 -->


<script type="text/javascript">
	$(function(){
		//class="brown"을 클릭했을 때
		$('.brown').click(function(){
			//alert('클릭');
			$.ajax({
				//type : 'get', type은 기본적으로(작성하지 않으면) get방식
				url : '${pageContext.request.contextPath}/board/listjson',
				dataType: 'json',
				success : function(result){
					alert(result);
				}
			});//ajax
		});//$('.brown')
		
	});//$(function()

</script>

</body>
</html>

 

BoardController

	//http://localhost:8080/funweb/board/listjson
	@GetMapping("/listjson")
	@ResponseBody
	public List<BoardDTO> listjson() {
		System.out.println("BoardController listjson()");
		//최근 글 5개
		//한 화면에 보여줄 글 개수 5개
		int pageSize = 5;
		//현 페이지 1페이지 설정
		int currentPage = 1;
		//PageDTO 저장
		PageDTO pageDTO = new PageDTO();
		pageDTO.setPageSize(pageSize);
		pageDTO.setCurrentPage(currentPage);
		
		List<BoardDTO> boardList = boardService.getBoardList(pageDTO);
		
		return boardList;
	}

 

그림 1.

 

AjaxController

	@Inject
	private BoardService boardService;
    
	@GetMapping("/board/listjson")
	public List<BoardDTO> listjson() {
		System.out.println("AjaxController listjson()");
		//최근 글 5개
		//한 화면에 보여줄 글 개수 5개
		int pageSize = 5;
		//현 페이지 1페이지 설정
		int currentPage = 1;
		//PageDTO 저장
		PageDTO pageDTO = new PageDTO();
		pageDTO.setPageSize(pageSize);
		pageDTO.setCurrentPage(currentPage);
		
		List<BoardDTO> boardList = boardService.getBoardList(pageDTO);
		
		return boardList;
	}

 

안정적으로 변경

	@GetMapping("/board/listjson")
	public ResponseEntity<List<BoardDTO>> listjson() {
		System.out.println("AjaxController listjson()");
		//최근 글 5개
		//한 화면에 보여줄 글 개수 5개
		int pageSize = 5;
		//현 페이지 1페이지 설정
		int currentPage = 1;
		//PageDTO 저장
		PageDTO pageDTO = new PageDTO();
		pageDTO.setPageSize(pageSize);
		pageDTO.setCurrentPage(currentPage);
		
		List<BoardDTO> boardList = boardService.getBoardList(pageDTO);
		ResponseEntity<List<BoardDTO>> entity = new ResponseEntity<List<BoardDTO>>(boardList, HttpStatus.OK);
		
		return entity;
	}

 

main.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/front.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]--> 

<script src="${pageContext.request.contextPath}/resources/script/jquery-3.7.1.min.js"></script>
</head>
<body>
<div id="wrap">
<!-- 헤더파일들어가는 곳 -->
<jsp:include page="../inc/top.jsp" />
<!-- 헤더파일들어가는 곳 -->
<!-- 메인이미지 들어가는곳 -->
<div class="clear"></div>
<div id="main_img"><img src="${pageContext.request.contextPath}/resources/images/main_img.jpg"
 width="971" height="282"></div>
<!-- 메인이미지 들어가는곳 -->
<!-- 메인 콘텐츠 들어가는 곳 -->
<article id="front">
<div id="solution">
<div id="hosting">
<h3>Web Hosting Solution</h3>
<p>Lorem impsun Lorem impsunLorem impsunLorem
 impsunLorem impsunLorem impsunLorem impsunLorem
  impsunLorem impsunLorem impsun....</p>
</div>
<div id="security">
<h3>Web Security Solution</h3>
<p>Lorem impsun Lorem impsunLorem impsunLorem
 impsunLorem impsunLorem impsunLorem impsunLorem
  impsunLorem impsunLorem impsun....</p>
</div>
<div id="payment">
<h3>Web Payment Solution</h3>
<p>Lorem impsun Lorem impsunLorem impsunLorem
 impsunLorem impsunLorem impsunLorem impsunLorem
  impsunLorem impsunLorem impsun....</p>
</div>
</div>
<div class="clear"></div>
<div id="sec_news">
<h3><span class="orange">Security</span> News</h3>
<dl>
<dt>Vivamus id ligula....</dt>
<dd>Proin quis ante Proin quis anteProin 
quis anteProin quis anteProin quis anteProin 
quis ante......</dd>
</dl>
<dl>
<dt>Vivamus id ligula....</dt>
<dd>Proin quis ante Proin quis anteProin 
quis anteProin quis anteProin quis anteProin 
quis ante......</dd>
</dl>
</div>
<div id="news_notice">
<h3 class="brown">News &amp; Notice</h3>
<table>

<!-- <tr><td class="contxt"><a href="#">Vivans....</a></td> -->
<!--     <td>2012.11.02</td></tr> -->
<!-- <tr><td class="contxt"><a href="#">Vivans....</a></td> -->
<!--     <td>2012.11.02</td></tr> -->
<!-- <tr><td class="contxt"><a href="#">Vivans....</a></td> -->
<!--     <td>2012.11.02</td></tr> -->
<!-- <tr><td class="contxt"><a href="#">Vivans....</a></td> -->
<!--     <td>2012.11.02</td></tr> -->
<!-- <tr><td class="contxt"><a href="#">Vivans....</a></td> -->
<!--     <td>2012.11.02</td></tr> -->
</table>
</div>
</article>
<!-- 메인 콘텐츠 들어가는 곳 -->
<div class="clear"></div>
<!-- 푸터 들어가는 곳 -->
<jsp:include page="../inc/bottom.jsp" />
<!-- 푸터 들어가는 곳 -->
</div>

<!-- 
dataType: 'json' => 데이터 리턴타입 종류
xml(eXtensible Markup Language)형태 : 확장된 마크업 언어, 사용자가 정의하는 태그 사용
							ex)		<member>
										<person><id>abc</id><pw>123</pw><name>태조</name></person>
										<person><id>bcd</id><pw>456</pw><name>정조</name></person>
										<person><id>cde</id><pw>789</pw><name>태종</name></person>
									</member>
json(JavaScript Object Notation)형태 : 자바스크립트 객체(배열) 속성,값의 쌍 형태로 데이터 표현, 
									 웹과 컴퓨터 프로그램에서 용량이 적은 데이터를 교환하기 위해 데이터 객체 속성 값의 쌍 형태로 표현하는 형식
							ex)		 [
									 	{"id" : "abc", "pw" : "123", "name" : "태조"},
									 	{"id" : "bcd", "pw" : "456", "name" : "정조"},
									 	{"id" : "cde", "pw" : "789", "name" : "태종"},
									 ]
 -->


<script type="text/javascript">
	$(function(){
		//class="brown"을 클릭했을 때
		$('.brown').click(function(){
			//alert('클릭');
			//table 화면 초기화
			$('table').html('');
			
			
			$.ajax({
				//type : 'get', type은 기본적으로(작성하지 않으면) get방식
				url : '${pageContext.request.contextPath}/board/listjson',
				dataType: 'json',
				success : function(result){
					//alert(result);
					//[object Object],[object Object],[object Object],[object Object],[object Object]
					//json => 자바스크립트 배열 => 반복문을 이용한 접근 => 출력
					//$.each(배열 대상, 접근(function));
					//.each() 반복문, result 배열변수, index 배열접근 순서값, item 배열의 하나의 값, 한칸의 배열내용을 저장
					$.each(result,function(index, item){
						//alert(index);
						//tiem.키 이름 접근
						//alert(item.subject);
						
						//.html() => table 대상에 html 내용을 넣음. 기존 내용은 사라짐
						//$('table').html('<tr><td class="contxt"><a href="#">'+item.subject+'</a></td><td>'+item.date+'</td></tr>');
						//.append() => table 대상에 내용 뒷부분에 추가해서 넣음. 기존 내용은 유지
						//item.date 숫자 => 날짜 변경
						var date = new Date(item.date);
						var d = date.getFullYear() +"."+ (date.getMonth()+1) +"."+ date.getDate();
						$('table').append('<tr><td class="contxt"><a href="#">'+item.subject+'</a></td><td>'+d+'</td></tr>');
						
					});//$.each
				}//function(result)
			});//ajax
			
			//이벤트 중지 => 클릭한 이벤트 자기자신 this => unbind()
			//$(this).unbind();
            //$('.brown').off('click');
		});//$('.brown')
		
	});//$(function()

</script>

</body>
</html>

 

json은 반복문으로 접근해야한다.

 


게시판 검색

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" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <!-- => 날짜 모양 변경 태그 라이브러리 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>center/notice.jsp</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>
<!-- 메인이미지 -->

<!-- 왼쪽메뉴 -->
<jsp:include page="../inc/left.jsp" />
<!-- 왼쪽메뉴 -->

<!-- 게시판 -->
<article>
<h1>Notice [전체 글의 개수 ${pageDTO.count }]</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>

<c:forEach var="boardDTO" items="${boardList}">
<tr onclick="location.href='${pageContext.request.contextPath}/board/content?num=${boardDTO.num}'">
	<td>${boardDTO.num}</td>
	<td class="left">${boardDTO.subject}</td>
    <td>${boardDTO.name}</td>
    
    <td><fmt:formatDate value="${boardDTO.date}" pattern="yyyy-MM-dd"/></td>
    <td>${boardDTO.readcount}</td></tr>

</c:forEach>

</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">
<form action="${pageContext.request.contextPath}/board/list" method="get">
<input type="text" name="search" class="input_box">
<input type="button" value="search" class="btn">
</form>
</div>

<div class="clear"></div>
<div id="page_control">
<c:if test="${pageDTO.startPage > pageDTO.pageBlock }">
<a href="${pageContext.request.contextPath}/board/list?pageNum=${pageDTO.startPage - pageDTO.pageBlock}">Prev</a>
</c:if>

<c:forEach var="i" begin="${pageDTO.startPage }" end="${pageDTO.endPage }" step="1">
<a href="${pageContext.request.contextPath}/board/list?pageNum=${i}">${i}</a>
</c:forEach>

<c:if test="${pageDTO.endPage < pageDTO.pageCount}">
<a href="${pageContext.request.contextPath}/board/list?pageNum=${pageDTO.startPage + pageDTO.pageBlock}">Next</a>
</c:if>

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

 

PageDTO

	//검색어 추가
	private String search;
    
	public String getSearch() {
		return search;
	}
	public void setSearch(String search) {
		this.search = search;
	}

 

BoardController

@GetMapping("/list")
	public String list(HttpServletRequest request, PageDTO pageDTO, Model model) {
		System.out.println("BoardController list()");
		
		//검색어 가져오기
		String search = request.getParameter("search");
		
		// 한 화면에 보여줄 글의 개수 설정
		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);
		
		//검색어 추가
		pageDTO.setSearch(search);
		
		List<BoardDTO> boardList = boardService.getBoardList(pageDTO);
		
		//페이징 작업
		//전체 글의 개수 구하기 int count = getBoardCount(pageDTO) 검색어 포함
		int count = boardService.getBoardCount(pageDTO);
		//한 화면에 보여줄 페이지 개수 설정
		int pageBlock = 10;
		//한 화면에 보여줄 시작 페이지 구하기
		//1~10 => 1, 11~20 => 11,..
		int startPage = (currentPage-1)/pageBlock*pageBlock+1;
		
		//한 화면에 보여줄 끝 페이지 구하기
		int endPage = startPage + pageBlock -1;
		//전체 페이지 개수 구하기
		int pageCount = count / pageSize + (count%pageSize == 0 ? 0 : 1);
		if(endPage > pageCount) {
			endPage = pageCount; //끝 페이지, 전체 페이지 수를 비교해서 => 끝 페이지가 크면 전체 페이지 수로 끝 페이지 변경
		}
		
		
		//pageDTO 저장
		pageDTO.setCount(count); //[전체 글의 개수 ${pageDTO.count }]
		pageDTO.setPageBlock(pageBlock);
		pageDTO.setStartPage(startPage);
		pageDTO.setEndPage(endPage);
		pageDTO.setPageCount(pageCount);
		
		//model 저장
		model.addAttribute("pageDTO", pageDTO);
		
		model.addAttribute("boardList", boardList);
		
		// center/notice.jsp 주소변경없이 이동
		return "center/notice";
        
        //오류 발생
        	@GetMapping("/flist")
	public String flist(HttpServletRequest request, PageDTO pageDTO, Model model) {
		System.out.println("BoardController flist()");
		
		// 한 화면에 보여줄 글의 개수 설정
		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);
		
		//페이징 작업
		//전체 글의 개수 구하기 int count = getBoardCount()
		int count = boardService.getBoardCount(pageDTO);
		//한 화면에 보여줄 페이지 개수 설정
		int pageBlock = 10;
		//한 화면에 보여줄 시작 페이지 구하기
		//1~10 => 1, 11~20 => 11,..
		int startPage = (currentPage-1)/pageBlock*pageBlock+1;
		
		//한 화면에 보여줄 끝 페이지 구하기
		int endPage = startPage + pageBlock -1;
		//전체 페이지 개수 구하기
		int pageCount = count / pageSize + (count%pageSize == 0 ? 0 : 1);
		if(endPage > pageCount) {
			endPage = pageCount; //끝 페이지, 전체 페이지 수를 비교해서 => 끝 페이지가 크면 전체 페이지 수로 끝 페이지 변경
		}
		
		
		//pageDTO 저장
		pageDTO.setCount(count); //[전체 글의 개수 ${pageDTO.count }]
		pageDTO.setPageBlock(pageBlock);
		pageDTO.setStartPage(startPage);
		pageDTO.setEndPage(endPage);
		pageDTO.setPageCount(pageCount);
		
		//model 저장
		model.addAttribute("pageDTO", pageDTO);
		
		model.addAttribute("boardList", boardList);
		
		// center/fnotice.jsp 주소변경없이 이동
		return "center/fnotice";
	}

 

BoardService

	public int getBoardCount(PageDTO pageDTO) {
		System.out.println("BoardService getBoardCount()");
		return boardDAO.getBoardCount(pageDTO);
	}

 

boardMapper

	<!-- %검색어% 검색어 포함  
	
	concat() 문자열 합치기 mysql 함수 
	
	동적SQL 검색어가 null이 아니면
	<if test="search != null">
	where subject like concat('%','#{search}','%')
  	</if>
	
	-->
	<select id="getBoardList" resultType="com.itwillbs.domain.BoardDTO">
		select * from board
		<if test="search !=null">
		where subject like CONCAT('%',#{search},'%')
		</if>
		order by num desc
		limit #{startRow},#{pageSize}
<!-- 		where 시작행 - 1, 개수 db에서 -1을 할 수 없기 때문에 BoardService에서 작업-->
	</select>

	<!-- 검색어 포함 -->
	<select id="getBoardCount" resultType="java.lang.Integer">
		select count(*)
		from board
		<if test="search !=null">
		where subject like CONCAT('%',#{search},'%');
		</if>
	</select>

 

notice.jsp

<div class="clear"></div>
<div id="page_control">
<c:if test="${pageDTO.startPage > pageDTO.pageBlock }">
<a href="${pageContext.request.contextPath}/board/list?pageNum=${pageDTO.startPage - pageDTO.pageBlock}&search=${pageDTO.search}">Prev</a>
</c:if>

<c:forEach var="i" begin="${pageDTO.startPage }" end="${pageDTO.endPage }" step="1">
<a href="${pageContext.request.contextPath}/board/list?pageNum=${i}&search=${pageDTO.search}">${i}</a>
</c:forEach>

<c:if test="${pageDTO.endPage < pageDTO.pageCount}">
<a href="${pageContext.request.contextPath}/board/list?pageNum=${pageDTO.startPage + pageDTO.pageBlock}&search=${pageDTO.search}">Next</a>
</c:if>
728x90