Jsp paging 쉽게 이해하기
Paging 이란?
게시판을 Page 단위로 나누는 행위를 의미
Paging 계산방법 (게시판 만들기, 방명록 만들기, 한줄 메모장 만들기..등등)
기본적이고 자주 쓸 기회가 있을 수 있으므로 어떻게 계산하는지 이해하고 외워두도록 하자.
Paging(페이징) 만드는법 잘 알아두기
Paging을 구현하기 전 페이징이 어떤 식으로 처리되는지 이해하고
어떤것들이 필요한지 생각해보고 만들기
Oracle(오라클)연동으로 Paging(페이징) 만들때
Oracle Paging계산방법
필요한 변수명들 정하기
전체개수 - totalCount
현재 페이지 수 - currentPage
페이지당 글수 - sizeOfPage
페이지 하단에 표시될 페이지 개수 - sizeOfBlock
전체 페이지수 - totalPage
시작 글번호 - startNo
종료 글번호 - endNo
시작 페이지 번호 - startPage
종료 페이지 번호 - endPage
// 전체 페이지 수 = (전체개수 -1)/페이지당 글수 + 1
totalPage = (totalCount - 1) / sizeOfPage + 1;
//현재페이지가 전체페이지수보다 클 수 없다
if(currentPage>totalPage) currentPage =1;
// 시작 글번호 = (현재페이지-1)*페이지당 글수 + 1 (오라클은 index가 1이다 )
startNo = (currentPage - 1) * sizeOfPage + 1;
// 끝 글번호 = 시작 글번호 + 페이지당 글수 - 1
endNo = startNo + sizeOfPage - 1;
// 시작 페이지 번호 = (현재페이지-1)/페이지번호 표시 개수 * 페이지번호 표시 개수 + 1
startPage = (currentPage - 1) / sizeOfBlock * sizeOfBlock + 1;
// 끝 페이지 번호 = 시작 페이지 번호 + 페이지번호 표시 개수 - 1
endPage = startPage + sizeOfBlock - 1;
Paging<T>
class 만들때 제네릭으로 만든다.
제네릭이란 ?
자바에서 제네릭(generic)이란 데이터의 타입(data type)을 일반화한다(generalize)는 것을 의미하며,
제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다.
public class PagingVO<T> {
// 글 목록을 저장할 리스트
private List<T> list;
}
// 넘겨받을 매개변수 4개
private int totalCount; // 전체 개수
private int currentPage; // 현재 페이지
private int sizeOfPage; // 페이지당 글수
private int sizeOfBlock; // 페이지번호 표시 개수
// 나머지는 계산할 변수
private int totalPage; // 전체 페이지 수
private int startNo; // 시작 글번호
private int endNo; // 끝 글번호
private int startPage; // 시작 페이지 번호
private int endPage; // 끝 페이지 번호
// 생성자에서 넘겨 받는다.
this.totalCount = totalCount;
this.currentPage = currentPage;
this.sizeOfPage = sizeOfPage;
this.sizeOfBlock = sizeOfBlock;
calc(); // 계산해주는 메서드
Paging 계산할때 요효성 검사도 같이 해줘야한다.
전체 게시물 개수가 0 보다 커야 페이지 나누기가 가능하다.
(totalCount > 0)
페이지 번호는 1보다 적을수 없다.
(currentPage <= 0) currentPage = 1;
최소 1페이지에 글이 1개 이상은 있어야 한다.
(sizeOfPage <= 1) sizeOfPage = 10;
최소 페이지 번호 리스트는 2개 이상은 있어야한다 .
(sizeOfBlock <= 1) sizeOfBlock = 10;
현재 페이지가 전체 페이지보다 클 수 없다.
(currentPage>totalPage) currentPage =1;
마지막 글번호는 전체 개수를 넘을 수 없다 .
(endNo > totalCount) endNo = totalCount;
마지막 페이지 번호는 전체 페이지 수를 넘을 수 없다 .
(endPage > totalPage) endPage = totalPage;
// 글이 잇어야 페이지 나누기를 할수 있다.
if (totalCount > 0) {
// 받은 값 검증
if (currentPage <= 0)
currentPage = 1; // 페이지 번호는 1보다 적을 수 없다.
if (sizeOfPage <= 1)
sizeOfPage = 10; // 최소 1페이지에 글이 1개 이상은 있어야 한다.
if (sizeOfBlock <= 1)
sizeOfBlock = 10; // 최소 페이지 번호 리스트는 2개 이상은 있어야 한다.
// 전체 페이지 수 = (전체개수 -1)/페이지당 글수 + 1
totalPage = (totalCount - 1) / sizeOfPage + 1;
//현재페이지가 전체페이지수보다 클 수 없다.
if(currentPage>totalPage) currentPage =1;
// 시작 글번호 = (현재페이지-1)*페이지당 글수 + 1
startNo = (currentPage - 1) * sizeOfPage + 1; // 오라클은 인덱스가 1
// 끝 글번호 = 시작 글번호 + 페이지당 글수 - 1
endNo = startNo + sizeOfPage - 1;
// 마지막 글번호는 전체 개수를 넘을 수 없다.
if (endNo > totalCount)
endNo = totalCount;
// 시작 페이지 번호 = (현재페이지-1)/페이지번호 표시 개수 * 페이지번호 표시 개수 + 1
startPage = (currentPage - 1) / sizeOfBlock * sizeOfBlock + 1;
// 끝 페이지 번호 = 시작 페이지 번호 + 페이지번호 표시 개수 - 1
endPage = startPage + sizeOfBlock - 1;
// 마지막 페이지 번호는 전체 페이지 수를 넘을 수 없다.
if (endPage > totalPage)
endPage = totalPage;
Oracle(오라클)
PagingVO<T>
public class PagingVO<T> {
// 글 목록을 저장할 리스트
private List<T> list;
// 넘겨받을 매개변수 4개
private int totalCount; // 전체 개수
private int currentPage; // 현재 페이지
private int sizeOfPage; // 페이지당 글수
private int sizeOfBlock; // 페이지번호 표시 개수
// 나머지는 계산할 변수
private int totalPage; // 전체 페이지 수
private int startNo; // 시작 글번호
private int endNo; // 끝 글번호
private int startPage; // 시작 페이지 번호
private int endPage; // 끝 페이지 번호
// 생성자에서 넘겨 받는다.
public PagingVO(int totalCount, int currentPage, int sizeOfPage, int sizeOfBlock) {
super();
this.totalCount = totalCount;
this.currentPage = currentPage;
this.sizeOfPage = sizeOfPage;
this.sizeOfBlock = sizeOfBlock;
calc(); // 계산해주는 메서드
}
private void calc() {
// 글이 잇어야 페이지 나누기를 할수 있다.
if (totalCount > 0) {
// 받은 값 검증
if (currentPage <= 0)
currentPage = 1; // 페이지 번호는 1보다 적을 수 없다.
if (sizeOfPage <= 1)
sizeOfPage = 10; // 최소 1페이지에 글이 1개 이상은 있어야 한다.
if (sizeOfBlock <= 1)
sizeOfBlock = 10; // 최소 페이지 번호 리스트는 2개 이상은 있어야 한다.
// 전체 페이지 수 = (전체개수 -1)/페이지당 글수 + 1
totalPage = (totalCount - 1) / sizeOfPage + 1;
//현재페이지가 전체페이지수보다 클 수 없다.
if(currentPage>totalPage) currentPage =1;
// 시작 글번호 = (현재페이지-1)*페이지당 글수 + 1
startNo = (currentPage - 1) * sizeOfPage + 1; // 오라클은 인덱스가 1
// 끝 글번호 = 시작 글번호 + 페이지당 글수 - 1
endNo = startNo + sizeOfPage - 1;
// 마지막 글번호는 전체 개수를 넘을 수 없다.
if (endNo > totalCount)
endNo = totalCount;
// 시작 페이지 번호 = (현재페이지-1)/페이지번호 표시 개수 * 페이지번호 표시 개수 + 1
startPage = (currentPage - 1) / sizeOfBlock * sizeOfBlock + 1;
// 끝 페이지 번호 = 시작 페이지 번호 + 페이지번호 표시 개수 - 1
endPage = startPage + sizeOfBlock - 1;
// 마지막 페이지 번호는 전체 페이지 수를 넘을 수 없다.
if (endPage > totalPage)
endPage = totalPage;
Mariadb(마리아데이터베이스,마리아디비)
Mariadb 연동으로 Paging(페이징) 만들때
필요한 변수명들 정하기
전체개수 - totalCount
현재 페이지 수 - currentPage
페이지당 글수 - sizeOfPage
페이지 하단에 표시될 페이지 개수 - sizeOfBlock
전체 페이지수 - totalPage
시작 글번호 - startNo
종료 글번호 - endNo
시작 페이지 번호 - startPage
종료 페이지 번호 - endPage
Mariadb Paging계산방법
// 전체 페이지 수 = (전체개수 -1)/페이지당 글수 + 1
totalPage = (totalCount - 1) / sizeOfPage + 1;
//현재페이지가 전체페이지수보다 클 수 없다
if(currentPage>totalPage) currentPage =1;
// 시작 글번호 = (현재페이지-1)*페이지당 글수 (마리아는 index가 0이다 )
startNo = (currentPage - 1) * sizeOfPage + 1;
// 끝 글번호 = 시작 글번호 + 페이지당 글수 - 1
endNo = startNo + sizeOfPage - 1;
// 시작 페이지 번호 = (현재페이지-1)/페이지번호 표시 개수 * 페이지번호 표시 개수 + 1
startPage = (currentPage - 1) / sizeOfBlock * sizeOfBlock + 1;
// 끝 페이지 번호 = 시작 페이지 번호 + 페이지번호 표시 개수 - 1
endPage = startPage + sizeOfBlock - 1;
Paging<T>
class 만들때 제네릭으로 만든다.
제네릭이란 ?
자바에서 제네릭(generic)이란 데이터의 타입(data type)을 일반화한다(generalize)는 것을 의미하며,
제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다.
public class PagingVO<T> {
// 글 목록을 저장할 리스트
private List<T> list;
}
// 넘겨받을 매개변수 4개
private int totalCount; // 전체 개수
private int currentPage; // 현재 페이지
private int sizeOfPage; // 페이지당 글수
private int sizeOfBlock; // 페이지번호 표시 개수
// 나머지는 계산할 변수
private int totalPage; // 전체 페이지 수
private int startNo; // 시작 글번호
private int endNo; // 끝 글번호
private int startPage; // 시작 페이지 번호
private int endPage; // 끝 페이지 번호
// 생성자에서 넘겨 받는다.
this.totalCount = totalCount;
this.currentPage = currentPage;
this.sizeOfPage = sizeOfPage;
this.sizeOfBlock = sizeOfBlock;
calc(); // 계산해주는 메서드
Paging 계산할때 요효성 검사도 같이 해줘야한다.
전체 게시물 개수가 0 보다 커야 페이지 나누기가 가능하다.
(totalCount > 0)
페이지 번호는 1보다 적을수 없다.
(currentPage <= 0) currentPage = 1;
최소 1페이지에 글이 1개 이상은 있어야 한다.
(sizeOfPage <= 1) sizeOfPage = 10;
최소 페이지 번호 리스트는 2개 이상은 있어야한다 .
(sizeOfBlock <= 1) sizeOfBlock = 10;
현재 페이지가 전체 페이지보다 클 수 없다.
(currentPage>totalPage) currentPage =1;
마지막 글번호는 전체 개수를 넘을 수 없다 .
(endNo > totalCount) endNo = totalCount;
마지막 페이지 번호는 전체 페이지 수를 넘을 수 없다 .
(endPage > totalPage) endPage = totalPage;
// 글이 잇어야 페이지 나누기를 할수 있다.
if (totalCount > 0) {
// 받은 값 검증
if (currentPage <= 0)
currentPage = 1; // 페이지 번호는 1보다 적을 수 없다.
if (sizeOfPage <= 1)
sizeOfPage = 10; // 최소 1페이지에 글이 1개 이상은 있어야 한다.
if (sizeOfBlock <= 1)
sizeOfBlock = 10; // 최소 페이지 번호 리스트는 2개 이상은 있어야 한다.
// 전체 페이지 수 = (전체개수 -1)/페이지당 글수 + 1
totalPage = (totalCount - 1) / sizeOfPage + 1;
//현재페이지가 전체페이지수보다 클 수 없다.
if(currentPage>totalPage) currentPage =1;
// 시작 글번호 = (현재페이지-1)*페이지당 글수 + 1
startNo = (currentPage - 1) * sizeOfPage ; // 마리아는 인덱스가 0
// 끝 글번호 = 시작 글번호 + 페이지당 글수 - 1
endNo = startNo + sizeOfPage - 1;
// 마지막 글번호는 전체 개수를 넘을 수 없다.
if (endNo > totalCount)
endNo = totalCount;
// 시작 페이지 번호 = (현재페이지-1)/페이지번호 표시 개수 * 페이지번호 표시 개수 + 1
startPage = (currentPage - 1) / sizeOfBlock * sizeOfBlock + 1;
// 끝 페이지 번호 = 시작 페이지 번호 + 페이지번호 표시 개수 - 1
endPage = startPage + sizeOfBlock - 1;
// 마지막 페이지 번호는 전체 페이지 수를 넘을 수 없다.
if (endPage > totalPage)
endPage = totalPage;
Mariadb
PagingVO<T>
public class PagingVO<T> {
// 글 목록을 저장할 리스트
private List<T> list;
// 넘겨받을 매개변수 4개
private int totalCount; // 전체 개수
private int currentPage; // 현재 페이지
private int sizeOfPage; // 페이지당 글수
private int sizeOfBlock; // 페이지번호 표시 개수
// 나머지는 계산할 변수
private int totalPage; // 전체 페이지 수
private int startNo; // 시작 글번호
private int endNo; // 끝 글번호
private int startPage; // 시작 페이지 번호
private int endPage; // 끝 페이지 번호
// 생성자에서 넘겨 받는다.
public PagingVO(int totalCount, int currentPage, int sizeOfPage, int sizeOfBlock) {
super();
this.totalCount = totalCount;
this.currentPage = currentPage;
this.sizeOfPage = sizeOfPage;
this.sizeOfBlock = sizeOfBlock;
calc(); // 계산해주는 메서드
}
private void calc() {
// 글이 잇어야 페이지 나누기를 할수 있다.
if (totalCount > 0) {
// 받은 값 검증
if (currentPage <= 0)
currentPage = 1; // 페이지 번호는 1보다 적을 수 없다.
if (sizeOfPage <= 1)
sizeOfPage = 10; // 최소 1페이지에 글이 1개 이상은 있어야 한다.
if (sizeOfBlock <= 1)
sizeOfBlock = 10; // 최소 페이지 번호 리스트는 2개 이상은 있어야 한다.
// 전체 페이지 수 = (전체개수 -1)/페이지당 글수 + 1
totalPage = (totalCount - 1) / sizeOfPage + 1;
//현재페이지가 전체페이지수보다 클 수 없다.
if(currentPage>totalPage) currentPage =1;
// 시작 글번호 = (현재페이지-1)*페이지당 글수 + 1
startNo = (currentPage - 1) * sizeOfPage; // 마리아는 인덱스가 0
// 끝 글번호 = 시작 글번호 + 페이지당 글수 - 1
endNo = startNo + sizeOfPage - 1;
// 마지막 글번호는 전체 개수를 넘을 수 없다.
if (endNo > totalCount)
endNo = totalCount;
// 시작 페이지 번호 = (현재페이지-1)/페이지번호 표시 개수 * 페이지번호 표시 개수 + 1
startPage = (currentPage - 1) / sizeOfBlock * sizeOfBlock + 1;
// 끝 페이지 번호 = 시작 페이지 번호 + 페이지번호 표시 개수 - 1
endPage = startPage + sizeOfBlock - 1;
// 마지막 페이지 번호는 전체 페이지 수를 넘을 수 없다.
if (endPage > totalPage)
endPage = totalPage;
오라클과 마리아 DB는 많이 다를줄 알았는데 사용하다보니 거희 비슷하다는걸 알게되었다.
계산 방법도 시작 글번호만 다르고 나머지는 다 똑같았다 .
오라클은 인덱스가 1 , 마리아는 인덱스가 0 이여서 +1 을 해주냐 안해주냐 그 차이만 있었다.
Paging 만들때 <T> 제네릭으로 만들었는데
제네릭에 대해서 정리한 포스팅 ▼
https://h0-0cat.tistory.com/30
'JSP > JSP 정리' 카테고리의 다른 글
[JSP] JSP 기본태그(수정 159) (0) | 2023.06.01 |
---|---|
[JSP] JSP (Java Server Page) 란? (0) | 2023.05.31 |
[JSP] JSP로 시작하기 (0) | 2023.05.31 |
[JSP] DAO란? DTO란? VO란? (0) | 2023.05.30 |
[JSP] JSP(Java Server Page) 란? (0) | 2023.05.29 |