wasup
게시판 만들기#ver1_paging 본문
반응형
Paging
게시판의 게시물 목록의 페이징
번호(일련번호) | 1~10 | 11~20 | 21~30 |
페이지 | 1p | 2p | 3p |
*번호 : 수집된 게시물을 정렬한 순서
필요한 정보
1. 페이지당 게시물 수
2. 각 페이지의 시작일련번호
3. 각 페이지의 마지막일련번호
4. 총게시물 수
-> 여기서 총 게시물 수는 DB의 게시물 수가 아닌 수집할 게시물 수.
예상 페이징 URL
board_list.jsp?시작페이지=1
or
board_list.jsp?시작일련번호=1&마지막일련번호=10
-> 결정된 페이징 파라미터 [/board_list.jsp?page=3]
<%
String strBoardPage=request.getParameter("page");
int boardPage = (strBoardPage==null ? 1 : Integer.valueOf(strBoardPage) );//페이지
int totalCount = 0;//총게시물수
int postsPerPage = 10;//페이지당게시물수
int startNum = (boardPage-1)*postsPerPage; //시작일련번호 zero-base
ArrayList<boardtable> boardPosts = new ArrayList<boardtable>();
try {
//드라이버로드
Class.forName("com.mysql.cj.jdbc.Driver");
//드라이버 관리자를 통해 DB연결자를 얻음
Connection DBConManagement = DriverManager.getConnection(String.format("jdbc:mysql://%s:%s/%s?useUnicode=true&characterEncoding=utf8", ConnectionInfo.DBIP, ConnectionInfo.DBPort, ConnectionInfo.DBName), ConnectionInfo.DBID, ConnectionInfo.DBPASSWORD);
//연결자를 통해 명령 전달자를 얻음
Statement CommandState = DBConManagement.createStatement();
//총(전체가 아닌 수집한 것)게시물수 구하기
String totalCountSQL = "select count(*) as 갯수 from boardtable";
ResultSet setCTManagement = CommandState.executeQuery(totalCountSQL);
setCTManagement.next();
totalCount = setCTManagement.getInt("갯수");
setCTManagement.close();
//게시물수집
String CollecSQL = String.format("select boNum, boTit, boDate, boHit from boardtable ORDER BY boDate desc limit %d, %d", startNum, postsPerPage);
ResultSet CollectManager = CommandState.executeQuery(CollecSQL);
while(CollectManager.next()) {//next() 다음줄로
int boNum = CollectManager.getInt("boNum");
String boTit = CollectManager.getString("boTit");
java.sql.Date boDate = CollectManager.getDate("boDate");
int boHit = CollectManager.getInt("boHit");
boardtable boardPost = new boardtable();
boardPost.setBoNum(boNum);
boardPost.setBoTit(boTit);
boardPost.setBoDate(boDate);
boardPost.setBoHit(boHit);
boardPosts.add(boardPost);
}
CollectManager.close();
//연결끊기
DBConManagement.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
<div class="paging_box">
맨처음
이전
<%
int postsPerPage = 10;
int startPageNum = 1;
int remainder = totalCount%postsPerPage;
//332%10 = 2
int lastPageNum = (totalCount-remainder)/postsPerPage+((remainder>0)?1:0);
//(332 - 2)/ 10+1+(remainder가 1이상이면 1을더하고 그렇지않으면 안더함.)
for(int printPageNo = startPageNum; printPageNo <= lastPageNum; printPageNo++){
if(printPageNo==boardPage){//현재페이지인 경우 %>
<a href="./board_list.jsp?page=<%=printPageNo %>" class="active"><%= printPageNo %></a>
<% }else{//현재페이지 아닌경우 %>
<a href="./board_list.jsp?page=<%=printPageNo %>" ><%= printPageNo %></a>
<%}
}%>
다음
맨끝
</div>
페이지 구분이 필요함.
페이징의 페이징
1. 블럭단위
1~10까지는 페이지 1블럭,
2~20까지는 페이지 2블럭이 나와야한다.
2. 블럭구분
(1-1)/10 = 0
(2-1)/10 = 0.1
(10-1)/10 = 0.9
-> 1~10까지 몫은 0, 11~20까지 몫은 1이됨.
3. 각 블럭의 시작번호
몫이 0일때 : 0 * 10 + 1 =1
몫이 1일때 : 1 * 10 + 1 =11
몫이 2일때 : 2 * 10 + 1 =21
*중간에 DAO구조로 변경
<%
String strBoardPage=request.getParameter("page");
int boardPage = (strBoardPage==null ? 1 : Integer.valueOf(strBoardPage) );//페이지
int postsPerPage = 10;//페이지당게시물수
%>
<div class="paging_box">
<%
int pageBlockPage = 10; //하단에 출력되는 페이지들 : 페이지블럭
int remainder = ((int)((boardPage-1)/pageBlockPage)); //입력된 페이지 번호를 페이지 블럭당 페이지 수로 나눈 몫 : 구한 몫은 실제 블럭수보다 1 적음.
int startPageNum = remainder*10+1;//시작페이지번호
int useRemainder = totalCount.value%postsPerPage;//사용할 나머지 값
//332%10 = 2
int totalLastPageNum = (totalCount.value-useRemainder)/postsPerPage+((useRemainder>0)?1:0);//전체에서 마지막 페이지 번호
//(332 - 2)/ 10+1+(나머지가 1이상이면 1을더하고 그렇지않으면 안더함.)
int blockLastPageNum = (startPageNum-1)+pageBlockPage;//페이지 블럭의 마지막 번호로 출력될 수
int lastPageNum = (totalLastPageNum < blockLastPageNum) ? totalLastPageNum : blockLastPageNum;//실제 마지막 페이지 번호
%>
<% if(startPageNum>1){%>
<a href="./board_list.jsp?page=1">맨처음</a>
<a href="./board_list.jsp?page=<%=startPageNum-1%>">이전</a>
<%}
for(int printPageNo = startPageNum; printPageNo <= lastPageNum; printPageNo++){
if(printPageNo==boardPage){//현재페이지인 경우 %>
<a href="./board_list.jsp?page=<%=printPageNo %>" class="active"><%= printPageNo %></a>
<% }else{//현재페이지 아닌경우 %>
<a href="./board_list.jsp?page=<%=printPageNo %>" ><%= printPageNo %></a>
<%}
}%>
<% if(lastPageNum<totalLastPageNum){%>
<a href="./board_list.jsp?page=<%=lastPageNum+1%>">다음</a>
<a href="./board_list.jsp?page=<%=totalLastPageNum%>">맨끝</a>
<%}%>
</div>
반응형
'IT > Java' 카테고리의 다른 글
게시판 만들기#ver2_정리 (0) | 2021.05.31 |
---|---|
Java) 객체는 무엇이고 클래스는 무엇인가? (0) | 2021.05.31 |
게시판 만들기#ver1_basedata (0) | 2021.05.29 |
게시판 만들기#ver1_list and view (0) | 2021.05.28 |
게시판 만들기#ver1_write (0) | 2021.05.27 |
Comments