BoardList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="model.BoardBean"%> <%@ page import="java.util.Vector"%> <%@ page import="model.BoardDAO"%> <!DOCTYPE html> <html> <head> <jsp:include page="Header.jsp"/> </head> <body> <!-- 게시글 보기에 카운터링을 설정하기위한 변수들을 선언 --> <% //화면에 보여질 게시글의 개수를 지정 int pageSize=10; //현재 카운터를 클릭한 번호값을 읽어옴 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(); //현재 페이지에 보여줄 시작 번호를 설정 = 데이터 베이스에서 불러올 시작번호 int startRow =(currentPage-1) *pageSize+1; int endRow =currentPage * pageSize; //최신글 10개를 기준으로 게시글을 리턴 받아주는 메소드 호출 Vector<BoardBean> vec =bdao.getAllBoard(startRow, endRow); //테이블에 표시할 번호를 지정 number =count - (currentPage -1 ) * pageSize; %> <div class="row"> <div class="col-xs-2"></div> <div class="col-xs-8 col-md-8"> <h2 class="text-center">전체 게시글 보기 </h2> <p class="text-right"> <input type="button" value="글쓰기" onclick="location.href='BoardWrite.jsp'" class="btn btn-warning"> </p> <div class="table-responsive"> <table class="table table-bordered table-striped" > <tr> <th>번호</th> <th>제목</th> <th>작성자</th> <th>작성일</th> <th>조회수</th> </tr> <%-- <% int k=0; for(BoardBean bean : vec){ %> <tr> <td><%= k+1%></td> <td><a href="BoardInfo.jsp?num=<%= bean.getNum() %>" ><%= bean.getSubject() %></a></td> <td><%=bean.getWriter() %></td> <td><%= bean.getReg_date() %></td> <td><%= bean.getReadcount() %></td> </tr> <% k++;} %> --%> <% for(int i=0; i<vec.size(); i++){ BoardBean bean =vec.get(i); //벡터에 저장되어 있는 빈클래스를 하나씩 추출 %> <tr> <td><%= i+1%></td> <td><a href="BoardInfo.jsp?num=<%= bean.getNum() %>" > <% if(bean.getRe_step() >1){ for(int j =0; j<(bean.getRe_step()*5); j++){ %> <% } } %> <%= bean.getSubject() %></a></td> <td><%=bean.getWriter() %></td> <td><%= bean.getReg_date() %></td> <td><%= bean.getReadcount() %></td> </tr> <% }%> <tr> <td colspan="5" class="text-center"> <!-- 페이지 카우터링 소스를 작성 --> <% if(count >0){ int pageCount =count /pageSize + (count%pageSize == 0 ? 0 :1) ; //카우터링 숫자를 얼마까지 보여줄건지 결정 //시작 페이지 숫자를 설정 int startPage =1; if(currentPage %10 !=0){ startPage =(int)(currentPage/10)*10+1; }else{ startPage =((int)(currentPage/10)-1)*10+1; } int pageBlock=10;//카운터링 처리 숫자 int endPage =startPage+pageBlock-1;//화면에 보여질 페이지의 마지막 숫자 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> <% } } %> </td> </tr> </table> </div> </div> </div> <jsp:include page="Bottom.jsp"/> </body> </html>
class BoardDAO
//모든 게시글을 리턴해주는 public Vector<BoardBean> getAllBoard(int start, int end){ //리넡할 객체 선언 Vector<BoardBean> v =new Vector<>(); getCon(); try{ //쿼리 준비 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); rs=pstmt.executeQuery(); //데이터 개수가 몇개인지 모르기에 반복문을 이용하여 데이터를 추출 while(rs.next()){ //데이터를 패키징( 가방 = Boardbean 클래스를 이용)해줌 BoardBean bean =new BoardBean(); bean.setNum(rs.getInt("num")); bean.setWriter(rs.getString("WRITER")); bean.setEmail(rs.getString("EMAIL")); bean.setSubject(rs.getString("SUBJECT")); bean.setPassword(rs.getString("PASSWORD")); bean.setReg_date(rs.getDate("REG_DATE").toString()); bean.setRef(rs.getInt("ref")); bean.setRe_step(rs.getInt("RE_STEP")); bean.setRe_level(rs.getInt("RE_LEVEL")); bean.setReadcount(rs.getInt("READCOUNT")); bean.setContent(rs.getString("CONTENT")); //패키징한 데이터를 벡터에 저장 v.add(bean); } }catch(Exception e){ e.printStackTrace(); }finally{ //자원 반납 closed(); } return v; } //전체 글의 갯수를 리턴하는 메소드 public int getAllCount(){ getCon(); //게시글 전체수를 저장하는 변수 int count =0; try{ //쿼리준비 String sql ="select count(*) from board"; //쿼리를 실행할 객체 선언 pstmt = con.prepareStatement(sql); //쿼리 실행 후 결과를 리턴 rs=pstmt.executeQuery(); if(rs.next()){ count =rs.getInt(1); } con.close(); }catch(Exception e){ e.printStackTrace(); } return count; }
동영상 강좌와 다르게 모바일 적용이 가능한 반응형 부트스트랩을 사용하였다.
여기서는 jsp 를 배우는 강좌 이기 때문에 html 적 요소에는 비중있게 생각 하지 않아도 될 것이다.
또한, 일부 자바 코드는 제 입맛에 맞게 변경 하였습니다.
혹시, 이 강의를 들으면서 제 글을 읽고 소스코드를 참조하는 수강생이 있다면 동영상의 코드와 다르다고 생각지 마세요. 대부분 동여상 내용과 같으니 학습에 도움이 될거라 생각 합니다.
소스 : https://github.com/braverokmc79/jsp_sin
유튜브 동영상 출처 :
강사 : 신형섭(잭임연구원)
저작권 : (주)소프트캠퍼스 http://www.softcampus.co.kr 더많은 무료 강의는 사이트에서 확인하실수 있습니다.
댓글 ( 4)
댓글 남기기