학원 day48. 게시판 만들기 실습, 페이지 네비게이션
페이지 내비게이션 출력하기
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