JSP 게시판 - 게시글 젠체게시글 보기 카운트
전체 게시글 보기에서 글 10개씩 보기
BoardList.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | <%@page import="model.BoardBean"%> <%@page import="java.util.Vector"%> <%@page import="model.BoardDAO"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <body> <div style="text-align: center"> <h2>전체 게시글 보기</h2> <!-- 게시글 보기에 카운터링을 설정하기 위한 변수들을 선언 --> <% //10개씩 끊어서 가지고오기 //화면에 보여질 게시글의 개수를 지정 int pageSize = 10; //현재 카운터를 클릭한 번호값을 읽어옴 // 이전 1 2 3 4 5 다음 String pageNum = request.getParameter("pageNum"); //만약 처음 BoardList.jsp를 클릭하거나 수정, 삭제 등 //다른 게시글에서 이 페이지로 넘어오는 pageNum값이 없다면 null처리 //=다른 페이지에서 넘어왔기 때문에 가장 최신 글목록을 보여준다. if (pageNum==null){ pageNum="1"; } int count = 0; //전체 글의 갯수를 저장하는 변수 int number =0; // 페이지 넘버링 변수 //현재 보고자하는 페이지 숫자를 저장 int currentPage = Integer.parseInt(pageNum); //전체 게시글의 숫자, 제목을 jsp쪽으로 가져와야함 BoardDAO bdao = new BoardDAO(); //전체 게시글의 갯수를 읽어들인 메서드 호출 count = bdao.getAllCount(); //현재 페이지에 보여줄 시작 번호를 설정 = DB에서 불러올 시작번호 //★★★★★ int startRow =(currentPage-1)*pageSize+1; int endRow = (currentPage)*pageSize; //최신 글 10개를 기준으로 게시글을 리턴 받아주는 메서드 호출 //(bean이라는 세트 여러개를 한꺼번에 받아오려면 리스트(벡터) 써야한다.) Vector<BoardBean> vec = bdao.getAllBoard(startRow, endRow); //테이블에 표시할 번호 지정 number = count - (currentPage - 1 ) * pageSize; %> <table align="center" width="700" border="1" bgcolor=skyblue> <tr height="40"> <td align="right" colspan="5"><input type="button" value="글쓰기" onclick="location.href='BoardWriteForm.jsp'"></td> </tr> <tr height="40"> <td width="50" align="center">번호</td> <td width="320" align="center">제목</td> <td width="100" align="center">작성자</td> <td width="150" align="center">작성일</td> <td width="80" align="center">조회수</td> </tr> <% //데이터 출력 for (int i = 0; i < vec.size(); i++) { //벡터에 저장돼있는 빈클래스를 하나씩 추출 BoardBean bean = vec.get(i); //글번호는 글스텝에 관계없이 부여되는 것이 보기좋으므로 i+1로 출력?? //글제목에는 태그를 걸어준다. %> <tr height="40"> <td width="50" align="center"><%=number--%></td> <td width="320" align="left"><a href="BoardInfo.jsp?num=<%=bean.getNum()%>" style="text-decoration:none"> <% if (bean.getRe_step() > 1) { for (int j = 0; j < (bean.getRe_step() - 1) * 5; j++) {//5칸씩 띄어쓰기 %> <% } } %> <%=bean.getSubject()%></a></td> <td width="100" align="center"><%=bean.getWriter()%></td> <td width="150" align="center"><%=bean.getReg_date()%></td> <td width="80" align="center"><%=bean.getReadcount()%></td> </tr> <% } %> </table> <p> <!-- 페이지 카운터링 소스를 작성--> <% if(count>0){ //글 열 묶음으로 보여지는 페이지의 총 개수= 전체글 / 한페이지에 보여줄 글 개수 + (딱 떨어지지 않는 글이 남아있을 경우 )1 int pageCount = count / pageSize + ( count%pageSize == 0 ? 0: 1); //카운터링 숫자를 얼마까지 보여줄건지 결정 //시작 페이지 숫자를 설정 int startPage = 1; if(currentPage %10 !=0){ //currentPage가 최근 글을 포함한 첫번째 카운터링 열이 아니라면 (10~ 이상) startPag0e = 11, 21, 31 ... startPage= (int)(currentPage/10)*10+1; } else{ //currentPage가 최근 글을 포함한 첫번째 카운터링 열이라면 (1~9라면) startPag0e = 0 startPage= ((int)(currentPage/10)-1)*10+1; } int pageBlock=10; //카운터링 처리 숫자// 한 페이지에 보여질 카운터링 숫자 개수 int endPage = startPage+pageBlock-1; //화면에 보여질 페이지의 마지막 숫자, startPage가 1로 시작하므로 1을 빼준다. // 한페이지에 보여지는 끝 페이지가 열묶음으로 된 페이지 개수보다 크면(더이상 보여줄 수 있는 페이지가 없으므로) //끝페이지를 나타내주는 변수에 페이지 개수 값을 넣어준다. ex) 글이 12페이지까지 있는 게시판이면 카운터링의 끝에 12값을 넣어준다. if(endPage>pageCount) endPage = pageCount; //"이전" 링크 만들건지 파악 if(startPage > 10){ %> <a href="BoardList.jsp?pageNum=<%=startPage-10%>"> [이전] </a> <% } //페이징 처리 for(int i= startPage; i<=endPage; i++){ %> <a href="BoardList.jsp?pageNum=<%=i%>"> [<%= i %>] </a> <% } //"다음"이라는 링크를 만들건지 파악 if(endPage < pageCount){ %> <a href="BoardList.jsp?pageNum=<%=startPage+10%>"> [다음] </a> <% } } %> </div> </body> </html> | cs |
BoardDAO.java 중 일부
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | // 모든 게시글을 리턴해주는 메서드 //→ 카운터링 기능 넣으면서 10개씩 끊어서 리턴해주는 메서드로 변경 public Vector<BoardBean> getAllBoard(int start, int end) { Vector<BoardBean> v = new Vector<BoardBean>(); getCon(); try { // 쿼리 준비 // 글그룹 내림차순, 글스텝과 글레벨 오름차순으로 정렬하여 전체 칼럼 불러오기 //쿼리를 전체글에서 10개씩 끊어서 가져오게끔 수정 //Rownum은 Oracle에만 있는 개념 String sql = "select * from (select A.*,Rownum Rnum from (select * from board order by ref desc, re_step asc)A)" +"where Rnum > ? and Rnum <= ?"; // 쿼리 실행 객체 생성 pstmt = con.prepareStatement(sql); pstmt.setInt(1, start); pstmt.setInt(2, end+1); // 쿼리 실행 rs = pstmt.executeQuery(); // 데이터 개수가 몇개인지 모르므로 반복문 이용하여 데이터 추출 // ResultSet에서 데이터를 꺼낼때에는 rs의 getType(Index)로 꺼내고 // bean의 setter(꺼낸 데이터)로 패키징 while (rs.next()) { // 데이터를 패키징 BoardBean bean = new BoardBean(); bean.setNum(rs.getInt(1)); bean.setWriter(rs.getString(2)); bean.setEmail(rs.getString(3)); bean.setSubject(rs.getString(4)); bean.setPassword(rs.getString(5)); // ResultSet은 getDate()메서드도 제공한다 // byte[]타입으로 리턴되므로 toSting()처리해준다. bean.setReg_date(rs.getDate(6).toString()); bean.setRef(rs.getInt(7)); bean.setRe_step(rs.getInt(8)); bean.setRe_level(rs.getInt(9)); bean.setReadcount(rs.getInt(10)); bean.setContent(rs.getString(11)); // 패키징한 데이터를 vector에 add v.add(bean); } con.close(); } catch (Exception e) { e.printStackTrace(); } return v; } | cs |
String sql = "select * from (select A.*,Rownum Rnum from (select * from board order by ref desc, re_step asc)A)"
+"where Rnum > ? and Rnum <=?";
소괄호 안쪽부터 해석
-(select * from board order by ref desc, re_step asc)A)
: 모든 결과를 정렬 시킨 뒤 정렬 시킨 테이블을 A라고 한다.
-(select A.*,Rownum Rnum from (...)A)
: A의 모든 요소와 Rownum을 함께 검색하여
-select * from ( ... ) where Rnum > ? and Rnum <=?";
: Rnum이 start보다 크고 end보다 작거나 같은 테이블 요소만을 가져온다.
pageCount :
페이지 수( 전체 게시글 수 / 한페이지에 보이는 글 개수 +1 (한페이지 단위로 나누어떨어지지 않는 게시글을 위한 페이지))
'JSP > JSP & Servlet ' 카테고리의 다른 글
파일 업로드 (0) | 2019.05.21 |
---|---|
(JSP 인강) jsp web MVC model2 programming (0) | 2019.05.17 |
JSP 게시판 - 게시글 삭제 (0) | 2019.05.14 |
JSP게시판 - 글 수정 (0) | 2019.05.13 |
JSP 게시판 - 답글 쓰기 (0) | 2019.05.10 |