//페이징에 필요한 변수
int totalPage; //총 페이지 수
int startPage; //각 블럭의 시작 페이지
int endPage; //각 블럭의 끝 페이지
int start; //각 페이지의 시작 번호
int perPage = 3; //한 페이지에 보여질 글 갯수
int perBlock = 5; //한 블럭 당 보여지는 페이지 갯수
//총 갯수:
totalCount = dao.getTotalCount();
//총 페이지 갯수 구하기
totalPage = totalCount/perPage + (totalCount%perPage==0?0:1);
//각 블럭의 시작페이지(ex.현재 페이지가 3인 경우, 시작:1, 끝:5 / 현재: 6, 시작: 6, 끝: 10)
startPage = (currentPage -1)/perBlock*perBlock+1;
endPage = startPage + perBlock -1;
//총 페이지 수가 8이라고 할 때, 2번째 블럭은 startPage= 6, endPage=10이 되어야 하는데 총 페이지가 8까지니까 endPage를 10=>8로 수정해줘야 한다
if(endPage>totalPage){
endPage = totalPage;
}
//각 페이지에서 불러올 시작 번호
//ex.현재페이지 1일 경우 start=1 / 현재 2, start = 6 /
start = (currentPage-1)*perPage;
//각 페이지에서 필요한 게시물 불러오기
List<BoardDto>list=dao.getList(start, perPage);
//각 글 앞에 붙일 번호 붙이기
//ex. 총 글이 20개이면 1페이지는 20부터~, 2페이지는 15부터~
//출력해서 1씩 감소하면서 출력
int no = totalCount-(currentPage-1)*perPage;
//출력에 필요한 변수들을 request에 저장
mview.addObject("totalCount", totalCount);
mview.addObject("list", list);
mview.addObject("totalPage", totalPage);
mview.addObject("startPage", startPage);
mview.addObject("endPage", endPage);
mview.addObject("currentPage", currentPage);
mview.addObject("no", no);
<c:if test="${totalCount>0}">
<div style="width: 800px; text-align: center;" >
<ul class="pagination">
<c:if test="${startPage>1}">
<li>
<a href="list?currentPage=${startPage-1}">이전</a>
</li>
</c:if>
<c:forEach var="pp" begin="${startPage}" end="${endPage}">
<c:if test="${currentPage==pp}">
<li class="active">
<a href="list?currentPage=${pp}">${pp}</a>
</li>
</c:if>
<c:if test="${currentPage!=pp}">
<li>
<a href="list?currentPage=${pp}">${pp}</a>
</li>
</c:if>
</c:forEach>
<c:if test="${endPage<totalPage}">
<li>
<a href="list?currentPage=${endPage+1}">다음</a>
</li>
</c:if>
</ul>
</div>
</c:if>