기록

학원 day48. 게시판 만들기 실습, 페이지 네비게이션

devcorn3 2022. 11. 12. 21:23

페이지 내비게이션 출력하기

 

1. 한 화면에 표시할 페이지번호 개수 결정하기

int pages = 5;

 

2. 총 페이지블록 개수를 계산하기 

int totalPageBlocks = (int) Math.ceil ((double) totalPages/pages);

// (int) Math.ceil((double) 8/5) = 2

 

3. 현재 페이지블록을 계산하기

int currentPageBlock = (int) Math.ceil((double) currentPage/pages);

// (int) Math.ceil((double) 7/5) = 2

 

4. 현재 페이지블록에 맞는 시작페이지번호와 끝페이지번호를 계산하기

int beginPage = (currentPageBlock -1)*pages + 1;

int endPage = currentPageBlock*pages;

if (currentPageBlock == totalPageBlocks) {

endPage = totalPages;

}

 

 

<%
    // 페이지 내비게이션 표시

    // 1. 한 화면에 표시할 페이지번호 갯수를 결정한다.
    int pages = 5;

    // 2. 전체 책 갯수를 조회한다.
    int totalRows = bookDao.getTotalRows();

    // 3. 전체 페이지 갯수를 계산한다.
    int totalPages = (int) Math.ceil((double) totalRows/rows);

    // 4. 전체 페이지 블록 갯수를 계산한다.
    int totalPageBlocks = (int) Math.ceil((double) totalPages/pages);

    // 5. 현재 페이지가 속한 페이지 블록을 계산하기
    int currentPageBlock = (int) Math.ceil((double) currentPage/pages);

    // 6. 현재 페이지블록의 시작페이지번호와 끝 페이지번호를 계산하기
    int beginPage = (currentPageBlock - 1)*pages + 1;
    int endPage = currentPageBlock == totalPageBlocks ? totalPages : currentPageBlock*pages;
%>

	<div aria-label="navigation">
   	  <ul class="pagination justify-content-center">
        <li class="page-item <%=currentPage <= 1 ? "disabled" : "" %>">
            <a class="page-link" href="list.jsp?page=<%=currentPage - 1 %>">이전</a>
        </li>
<%
    for (int number = beginPage; number <= endPage; number++) {
%>
        <li class="page-item <%=currentPage == number ? "active" : "" %>">
            <a class="page-link" href="list.jsp?page=<%=number %>"><%=number %></a>
        </li>
<%
    }
%>
        <li class="page-item <%=currentPage >= totalPages ? "disabled" : "" %> ">
            <a class="page-link"href="list.jsp?page=<%=currentPage + 1 %>">다음</a>
        </li>
    </ul>
</div>

 

 

 


<  게시판 만들기  >

 

테이블 생성 및 시퀀스 생성

 

CREATE TABLE SAMPLE_BOARDS (
    BOARD_NO NUMBER(5) CONSTRAINT BOARD_NO_PK PRIMARY KEY,
    BOARD_TITLE VARCHAR2(255) NOT NULL,
    BOARD_WRITER VARCHAR2(100) NOT NULL,
    BOARD_READ_COUNT NUMBER(5) DEFAULT 0,
    BOARD_REVIEW_COUNT NUMBER(5) DEFAULT 0,
    BOARD_CONTENT VARCHAR2(200) NOT NULL,
    BOARD_DELETED CHAR(1) DEFAULT 'N',
    BOARD_CREATED_DATE DATE DEFAULT SYSDATE,
    BOARD_UPDATED_DATE DATE DEFAULT SYSDATE
);

CREATE TABLE SAMPLE_BOARD_REVIEWS (
    REVIEW_NO NUMBER(5) CONSTRAINT BOARD_REVIEW_NO_PK PRIMARY KEY,
    REVIEW_WRITER VARCHAR2(100) NOT NULL,
    REVIEW_CONTENT VARCHAR2(1000) NOT NULL,
    REVIEW_CREATED_DATE DATE DEFAULT SYSDATE,
    BOARD_NO NUMBER(5) CONSTRAINT REVIEW_BOARD_NO_FK REFERENCES SAMPLE_BOARDS (BOARD_NO)
);

 

CREATE SEQUENCE SAMPLE_BOARDS_SEQ START WITH 10000 NOCACHE;
CREATE SEQUENCE SAMPLE_REVIEWS_SEQ START WITH 10000 NOCACHE;

 

 

환경 세팅하기

 

1. 라이브러리 파일을 src/main/webapp/WEB-INF/lib 폴더에 추가한다.
ojdbc11.jar
ibatis-2.3.4.726.jar

2. ibatis 환경설정
src/main/resources "소스폴더"를 추가한다.
src/main/resources "소스폴더"에 META-INF/ibatis/mappers "폴더"를 추가한다.

src/main/resources/META-INF/ibatis/mappers 폴더에 매퍼파일을 추가한다.
boards.xml, reviews.xml
src/main/resources/META-INF/ibatis 폴더에 ibatis-config.xml 파일을 추가한다.
ibatis-config.xml 파일에 boards.xml과 reviews.xml 파일을 등록한다.

3. 패키지 생성 및 유틸리티 클래스 추가
com.sample.util 패키지를 추가한다.
com.sample.util 패키지에 SqlMapper.java와 StringUtils.java를 추가한다.
com.sample.vo 패키지를 추가한다.
Board.java와 Review.java를 추가한다.
com.sample.dao 패키지를 추가한다.
BoardDao.java와 ReviewDao.java를 추가한다.

4. JSP 구현하기
src/main/webapp 폴더에 jsp 파일을 추가한다.
home.jsp
list.jsp
form.jsp
register.jsp 
detail.jsp, [리뷰 : addReview.jsp, deleteReview.jsp]
delete.jsp
modifyform.jsp 
update.jsp