ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ JSP ] 도서 검색(페이징 처리), 도서 상세정보(리뷰 조회)
    PROGRAMMING/HTML, CSS 2022. 6. 2. 22:05

    하루입니다.




    무엇을 만들어야 하는가

    1. 페이징처리하기

    2. 카트에 아이템 담기

    3. 리뷰 조회하기

     

    Book vo 만든다

    BookDao 만들어서 책번호, 제목, 작가, 출판사, 가격, 할인가격 조회하는 메소드( ), 전체 행 갯수(= 책갯수) 반환하는 메소드( ), 한 페이지에 특정 갯수의 책만 나오게 하는(페이지 관련) 메소드 ( ) 만든다.

    ROW_NUMBER() OVER ( [PARTITION BY 컬럼명] ORDER BY 컬럼명 ASC|DESC )


    ROW_NUMBER 사용함.
    이 분석함수는 지정된 정렬기준으로 데이터를 정렬한 다음에 1번부터 시작하는 순번을 차례대로 붙인다.
    [PARTITION BY 컬럼명은 컬럼값이 같은 것끼리 1번부터 시작하는 순번을 붙이는 것이다. 생략 가능하다.

    이런 결과가 나온다.


    위의 식을 가상의 테이블로 활용한다.

    나중에 숫자 자리에는 값이 들어갈 것

     



    페이징 처리하기

    0. 클라이언트가 요청한 페이지 번호 조회하기 (뒤 숫자는 예시)

    • 클라이언트가 요청한 페이지번호 조회하기
    • 페이지번호가 올바르지 않으면 1페이지를 재요청하는 URL을 응답으로 보낸다.



    1. 페이징처리에 필요한 기본값 정하기

    • 한 화면에 출력할 행의 갯수 : 5
    • 한 화면에 출력할 페이지번호 갯수 : 5

     


    2. 요청한 페이지번호에 맞는 페이지번호 계산하기

    • 전체 데이터 갯수 조회하기 : 32
      int records = itemDao.getTotalRowsCount();
    • 총 페이지 갯수 계산하기 : 7
      int totalPages = (int) (Math.ceil((double) records/rows));
    • 총 페이지블록 갯수 계산하기 : 2
      int totalBlocks = (int) (Math.ceil((double) totalPages/pages));
    • 클라이언트가 요청한 페이지번호가 몇 번째 페이지블록인지 계산하기
      int currentBlock = (int) (Math.ceil((double) currentPage/pages));
    • 클라이언트가 요청한 페이지번호에 맞는 페이지번호 구간 계산하기
      int beginPage = (currentBlock - 1)* pages + 1;
      int endPage = (currentBlock == totalBlocks ? totalPages : currentBlock*pages); 

     

    3. 요청한 페이지번호에 맞는 데이터 조회하기

    • 클라이언트가 요청한 페이지번호에 맞는 데이터 조회 범위 계산하기
      int beginIndex = (currentPage - 1)*rows + 1;
      int endIndex = currentPage*rows;
    • 데이터 조회 범위에 맞는 데이터 조회하기
      List<Item> items = itemDao.getItems(beginIndex, endIndex);

     


    4. 조회된 데이터 출력하기

    <%
    for (Item item : items) {
    %>
    	<tr>
    		<td><%=item.getNo() %></td>
    		<td><a href="detail.jsp?no=<%=item.getNo() %>"><%=item.getName() %></a></td>
    		<td>...</td>
    	</tr>
    <%
    }
    %>



    5. 페이지번호 출력하기

    <ul class="pagination justify-content-center">
    	<li class="page-item">
        	// '이전' 버튼은 현재 페이지가 1과 같거나 작다면 비활성화된다.
    		<a class="page-link <%=currentPage <= 1 ? "disabled" : "" %>" href="list.jsp?page=<%=currentPage - 1 %>">이전</a>
    	</li>
    	<%
    	for (int num = beginPage; num <= endPage; num++) {
    	%>
        	// for문을 돌렸을 때, 현재 페이지와 num이 같다면 활성화된다.
    	<li class="page-item <%=currentPage == num ? "active" : "" %>">
    		<a class="page-link" href="list.jsp?page=<%=num %>"><%=num %></a>
    	</li>
    	<%
    	}
    	%>
    	<li class="page-item">
            // '다음' 버튼은 현재 페이지가 토탈페이지와 같거나 높다면 비활성화된다.
    		<a class="page-link <%=currentPage >= totalPages ? "disabled" : "" %>" href="list.jsp?page=<%=currentPage + 1 %>">다음</a>
    	</li>
    </ul>







    잘못된 정보에 대한 지적은 언제나 환영입니다.

    복습 끝!



Designed by Tistory.