MyUtill.java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class MyUtill {
Connection conn = DBConn.getConnection();
/**
* @param dataCount : 총 데이터 수
*/
public int dataCount() {
int result = 0;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
String sql = "select count(*) as cnt from bbs";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
if (rs.next()) {
result = rs.getInt("cnt");
}
rs.close();
pstmt.close();
} catch (Exception e) {
System.out.println(e);
}
return result;
}
/**
* @param numPerPage
* : 한페이지에 출력할 데이터의 개수(each)
* @param dataCount
* : 총 데이터 수
* @return : 페이지 수
*/
public int getPageCount(int numPerPage, int dataCount) {
int pageCount = dataCount / numPerPage;
if (dataCount % numPerPage != 0) {
pageCount++;
}
return pageCount;
}
/**
* @param current_page
* : 화면에 표시되는 페이지
* @param total_page
* : 총 페이지 수
* @param list_url
* : 링크를 설정할 주소
* @return : 페이징처리결과
*/
public String pageIndexList(int current_page, int total_page,
String list_url) {
int numPerBlock = 10; // 화면 당 표시할 페이지링크 수
int currentPageSetup;
int n, page;
StringBuffer sb = new StringBuffer();
if (current_page <= 0) {
return "";
}
if (list_url.indexOf("?") != -1) // 물음표가 존재하면
{
list_url = list_url + "&";
} else {
list_url = list_url + "?";
}
// currentPageSetup : 표시할 첫 페이지 - 1
currentPageSetup = (current_page / numPerBlock) * numPerBlock;
if (current_page % numPerBlock == 0) {
currentPageSetup = currentPageSetup - numPerBlock;
}
// 첫페이지 [Prev]
n = current_page - numPerBlock;
if (total_page > numPerBlock && currentPageSetup > 0) {
sb.append("<a href='" + list_url + "pageNum=1'>1</a>");
sb.append(" [<a href='" + list_url + "pageNum=" + n + "'>Prev</a>]");
}
// 페이지 링크
page = currentPageSetup + 1;
while (page <= total_page && page <= (currentPageSetup + numPerBlock)) {
if (current_page != page) {
sb.append(" <a href='" + list_url + "pageNum=" + page + "'>"
+ page + "</a>");
} else // 현재 보고 있는 페이지는 <a>없이 반환
{
sb.append(" <font color='Fuchsia'>" + page + "</font>");
}
page++;
}
// [Next] 마지막 페이지
n = current_page + numPerBlock;
if (total_page - currentPageSetup > numPerBlock) {
sb.append(" [<a href='" + list_url + "pageNum=" + n + "'>Next</a>]");
sb.append(" <a href='" + list_url + "pageNum=" + total_page + "'>"
+ total_page + "</a>");
}
return sb.toString();
}
}
example.jsp
<%
request.setCharacterEncoding("utf-8");
String cp = request.getContextPath();
BoardDAO dao = new BoardDAO();
List<BoardDTO> list = null;
MyUtil util = new MyUtil();
//pageNum이 없을경우(첫로딩) 1페이지라 간주
String pageNum = request.getParameter("pageNum");
int current_page = 1;
if(pageNum != null)
current_page = Integer.parseInt(pageNum);
//전체 데이터 개수 구하기
int dataCount = dao.dataCount();
int numPerPage = 10; //한 페이지에 표시할 데이터 개수
int total_page = 0;
//전체 페이지 수 구하기
total_page = util.getPageCount(numPerPage, dataCount);
//웹은 정적이므로 다른 사람이 삭제한 상태를 알지 못한다.
//따라서 현재 표시할 페이지가 전체 페이지 보다 클 수 있다.
if(current_page > total_page)
{
current_page = total_page;
}
//데이터를 가져올 시작과 끝 위치
int start = (current_page - 1) * numPerPage + 1;
int end = current_page * numPerPage;
//테이블의 데이터 가져오기
List<BoardDTO> lists = dao.selectBoard(start, end);
//페이징 처리
String list_url = cp + "/bbs/list.jsp";
String pageIndexList = util.pageIndexList(current_page, total_page, list_url);
%>
BoardDAO.java
public class BoardDAO {
public List<BoardDTO> listBoard(int start, int end) {
List<BoardDTO> list = new ArrayList<BoardDTO>();
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
BoardDTO dto = null;
try {
sql = "select * from (select ROWNUM as rnm, tb.* "
+ "from (select num, subject, name"
+ "to_char(created, 'YYYY-MM-DD') as created, hitCount "
+ "from BBS ORDER BY num DESC) tb) where rnm >= ? and rnm <= ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, start);
pstmt.setInt(2, end);
rs = pstmt.executeQuery();
while (rs.next()) {
dto = new BoardDTO();
dto.setNum(rs.getInt("num"));
dto.setSubject(rs.getString("subject"));
dto.setName(rs.getString("name"));
dto.setCreated(rs.getString("created"));
dto.setHitCount(rs.getInt("hitcount"));
list.add(dto);
}
pstmt.close();
rs.close();
} catch (Exception e) {
System.out.println(e);
}
return list;
}
}