디지털 컨버전스/Project
[BoardProject] 페이지 네비게이터
gimyeondong
2020. 5. 7. 12:14
연습용 Main 클래스 만들기
package kh.backend.controller;
public class Main {
public static String getpageNavi() {
//총 몇개의 글이 있는가? 한페이지에 몇개의 글을 보여줄 것인가?
int recordTotalCount = 147; // 총 게시물의 개수
int recordCountPerPage = 10;// 한 페이지에 게시글 몇개를 보여줄 것인가?
int naviCountPerPage = 10; //한 페이지에 네비게이터 몇개를 보여줄 것인가?
int pageTotalCount = 0; // 전체 페이지의 개수
if(recordTotalCount % recordCountPerPage > 0) {
pageTotalCount = recordTotalCount / recordCountPerPage + 1;
// 게시글 개수를 페이지당 게시글로 나누어 나머지 값이 있으면 한페이지를 더한다.
// ex) 147개의 글이 있다면 10글 짜리 14페이지 + 7글짜리 1페이지 -> 총 15페이지 필요
}else {
pageTotalCount = recordTotalCount / recordCountPerPage;
// 게시글 개수를 페이지당 게시글로 나누어 나머지 값이 없으면 더할 필요없다.
// ex) 140개의 글이 있다면 10글 짜리 14페이지로 끝.
}
int currentPage = 12; //현재 내가 위치한 페이지 번호, 1~pageTotalCount까지의 범위를 가진다.
if(currentPage < 1) {
currentPage = 1;
}else if(currentPage > pageTotalCount) {
currentPage = pageTotalCount;
} // 공격자가 currentPage 값을 변조할 경우에 대한 보안 코드
int startNavi = (currentPage - 1) / naviCountPerPage * naviCountPerPage + 1 ;
int endNavi = startNavi + naviCountPerPage - 1 ;
if(endNavi > pageTotalCount) {
endNavi = pageTotalCount;
}
boolean needPrev = true;
boolean needNext = true;
if(startNavi == 1) {needPrev = false;}
if(endNavi == pageTotalCount) {needNext = false;}
System.out.println("총 페이지 개수 : " + pageTotalCount);
System.out.println("현재 페이지 : " + currentPage);
System.out.println("네비게이터 시작 : " + startNavi);
System.out.println("네비게이터 끝 : " + endNavi);
if(needPrev) {
System.out.print("< ");
}
for (int i = startNavi;i <= endNavi;i++) {
System.out.print(i+" ");
}
if(needNext) {
System.out.print(">");
}
return "";
}
public static void main(String[] args) {
getpageNavi();
}
}
DAO로 이동
sysout말고 스트링으로 조립해야함
StringBuilder sd = new StringBuilder();
package kh.backend.controller;
public class Main {
public static String getpageNavi() {
//총 몇개의 글이 있는가? 한페이지에 몇개의 글을 보여줄 것인가?
int recordTotalCount = 147; // 총 게시물의 개수
int recordCountPerPage = 10;// 한 페이지에 게시글 몇개를 보여줄 것인가?
int naviCountPerPage = 10; //한 페이지에 네비게이터 몇개를 보여줄 것인가?
int pageTotalCount = 0; // 전체 페이지의 개수
if(recordTotalCount % recordCountPerPage > 0) {
pageTotalCount = recordTotalCount / recordCountPerPage + 1;
// 게시글 개수를 페이지당 게시글로 나누어 나머지 값이 있으면 한페이지를 더한다.
// ex) 147개의 글이 있다면 10글 짜리 14페이지 + 7글짜리 1페이지 -> 총 15페이지 필요
}else {
pageTotalCount = recordTotalCount / recordCountPerPage;
// 게시글 개수를 페이지당 게시글로 나누어 나머지 값이 없으면 더할 필요없다.
// ex) 140개의 글이 있다면 10글 짜리 14페이지로 끝.
}
int currentPage = 12; //현재 내가 위치한 페이지 번호, 1~pageTotalCount까지의 범위를 가진다.
if(currentPage < 1) {
currentPage = 1;
}else if(currentPage > pageTotalCount) {
currentPage = pageTotalCount;
} // 공격자가 currentPage 값을 변조할 경우에 대한 보안 코드
int startNavi = (currentPage - 1) / naviCountPerPage * naviCountPerPage + 1 ;
int endNavi = startNavi + naviCountPerPage - 1 ;
if(endNavi > pageTotalCount) {
endNavi = pageTotalCount;
}
boolean needPrev = true;
boolean needNext = true;
if(startNavi == 1) {needPrev = false;}
if(endNavi == pageTotalCount) {needNext = false;}
System.out.println("총 페이지 개수 : " + pageTotalCount);
System.out.println("현재 페이지 : " + currentPage);
System.out.println("네비게이터 시작 : " + startNavi);
System.out.println("네비게이터 끝 : " + endNavi);
StringBuilder sb = new StringBuilder();
if(needPrev) {
sb.append("< ");
}
for (int i = startNavi;i <= endNavi;i++) {
sb.append(i+" ");
}
if(needNext) {
sb.append(">");
}
return sb.toString();
}
public static void main(String[] args) {
String naviString = getpageNavi();
System.out.println(naviString);
}
}
currentPage는 JSP에서 클라이언트가 클릭한 값이 컨트롤러로 들어와서 정해져야함
-> 매개변수
package kh.backend.controller;
public class Main {
public static String getpageNavi(int currentPage) {
//총 몇개의 글이 있는가? 한페이지에 몇개의 글을 보여줄 것인가?
int recordTotalCount = 147; // 총 게시물의 개수
int recordCountPerPage = 10;// 한 페이지에 게시글 몇개를 보여줄 것인가?
int naviCountPerPage = 10; //한 페이지에 네비게이터 몇개를 보여줄 것인가?
int pageTotalCount = 0; // 전체 페이지의 개수
if(recordTotalCount % recordCountPerPage > 0) {
pageTotalCount = recordTotalCount / recordCountPerPage + 1;
// 게시글 개수를 페이지당 게시글로 나누어 나머지 값이 있으면 한페이지를 더한다.
// ex) 147개의 글이 있다면 10글 짜리 14페이지 + 7글짜리 1페이지 -> 총 15페이지 필요
}else {
pageTotalCount = recordTotalCount / recordCountPerPage;
// 게시글 개수를 페이지당 게시글로 나누어 나머지 값이 없으면 더할 필요없다.
// ex) 140개의 글이 있다면 10글 짜리 14페이지로 끝.
}
//현재 내가 위치한 페이지 번호, 1~pageTotalCount까지의 범위를 가진다.
if(currentPage < 1) {
currentPage = 1;
}else if(currentPage > pageTotalCount) {
currentPage = pageTotalCount;
} // 공격자가 currentPage 값을 변조할 경우에 대한 보안 코드
int startNavi = (currentPage - 1) / naviCountPerPage * naviCountPerPage + 1 ;
int endNavi = startNavi + naviCountPerPage - 1 ;
if(endNavi > pageTotalCount) {
endNavi = pageTotalCount;
}
boolean needPrev = true;
boolean needNext = true;
if(startNavi == 1) {needPrev = false;}
if(endNavi == pageTotalCount) {needNext = false;}
System.out.println("총 페이지 개수 : " + pageTotalCount);
System.out.println("현재 페이지 : " + currentPage);
System.out.println("네비게이터 시작 : " + startNavi);
System.out.println("네비게이터 끝 : " + endNavi);
StringBuilder sb = new StringBuilder();
if(needPrev) {
sb.append("< ");
}
for (int i = startNavi;i <= endNavi;i++) {
sb.append(i+" ");
}
if(needNext) {
sb.append(">");
}
return sb.toString();
}
public static void main(String[] args) {
String naviString = getpageNavi(2);
System.out.println(naviString);
}
}
DAO
public String getpageNavi(int currentPage) throws Exception {
//총 몇개의 글이 있는가? 한페이지에 몇개의 글을 보여줄 것인가?
int recordTotalCount = this.getArticleCount(); // 총 게시물의 개수
int recordCountPerPage = 10;// 한 페이지에 게시글 몇개를 보여줄 것인가?
int naviCountPerPage = 10; //한 페이지에 네비게이터 몇개를 보여줄 것인가?
int pageTotalCount = 0; // 전체 페이지의 개수
if(recordTotalCount % recordCountPerPage > 0) {
pageTotalCount = recordTotalCount / recordCountPerPage + 1;
// 게시글 개수를 페이지당 게시글로 나누어 나머지 값이 있으면 한페이지를 더한다.
// ex) 147개의 글이 있다면 10글 짜리 14페이지 + 7글짜리 1페이지 -> 총 15페이지 필요
}else {
pageTotalCount = recordTotalCount / recordCountPerPage;
// 게시글 개수를 페이지당 게시글로 나누어 나머지 값이 없으면 더할 필요없다.
// ex) 140개의 글이 있다면 10글 짜리 14페이지로 끝.
}
//현재 내가 위치한 페이지 번호, 1~pageTotalCount까지의 범위를 가진다.
if(currentPage < 1) {
currentPage = 1;
}else if(currentPage > pageTotalCount) {
currentPage = pageTotalCount;
} // 공격자가 currentPage 값을 변조할 경우에 대한 보안 코드
int startNavi = (currentPage - 1) / Configuration.naviCountPerPage * Configuration.naviCountPerPage + 1 ;
int endNavi = startNavi + naviCountPerPage - 1 ;
if(endNavi > pageTotalCount) {
endNavi = pageTotalCount;
}
boolean needPrev = true;
boolean needNext = true;
if(startNavi == 1) {needPrev = false;}
if(endNavi == pageTotalCount) {needNext = false;}
StringBuilder sb = new StringBuilder(); // 리턴할 스트링 조합
if(needPrev) {
sb.append("<li><a href='toBoard.boa?cpage="+(startNavi-1)+"'><</a></li>");
}
for (int i = startNavi;i <= endNavi;i++) {
sb.append("<li><a href='toBoard.boa?cpage="+i+"'>"+i+"</a></li>");
}
if(needNext) {
sb.append("<li><a href='toBoard.boa?cpage="+(endNavi+1)+"'>></a></li>");
}
return sb.toString();
}
public int getArticleCount() throws Exception{
String sql = "select count(*) from board";
try(Connection con = this.getConnection();
PreparedStatement pstat = con.prepareStatement(sql);
ResultSet rs = pstat.executeQuery();){
rs.next(); // 안쓰면 헤더를 가르키는 상태
return rs.getInt(1);
}
}
String 상수값을 하나의 클래스로 묶어둘것
package kh.member.statics;
public class Configuration {
public static int naviConfiguration =10;
public static int naviCountPerPage =10;
public static int recordCountPerpage =10;
}