[JSP] 쪽 번호 매기기 작성 예시

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;
    }
}