본문 바로가기

java,jsp,spring/JSP

JSP 게시판 페이징

1. BoardBean.java

public static int pageSize = 10; // 한 페이지의 글 수
public static int pageCount = 1; // 페이지 개수
public static int pageNum = 1; // 페이지 번호
	
public static String pageNumber(int limit) { // limit : 한번에 보여질 페이지 번호의 수
		String str = "";
		int temp = (pageNum-1)%limit;
		int startPage = pageNum - temp; // 시작 페이지 > 한번에 보여지는 페이지 번호의 처음 숫자
		
		if ((startPage - limit) > 0) { // 시작 페이지가
			str = "<a href='list.jsp?pageNum="+(startPage-1)+"'>[이전]</a>&nbsp;&nbsp;";
		}
		for (int i = startPage; i < (startPage+limit) ; i++) {
			if (i==pageNum) { // 페이지 번호와 같으면 a태그 없음
				str += "["+i+"]&nbsp;&nbsp;";
			} else { // 현재 페이지 말고 다른 페이지는 누르면 페이지가 변경되야 하므로 a태그에 페이지번호를 줌
				str += "<a href='list.jsp?pageNum="+i+"'>"+"["+i+"]</a>&nbsp;&nbsp;";
			}
			if (i >= pageCount) { 
				// 전체가 11페이지, 한페이지에 5페이지 보여주면 시작페이지는 11페이지이므로 15까지 i가 증가
				// > i가 전체 페이지 수보다 크거나 같으면 반복 종료
				break;
			}
		}
		if ((startPage + limit) <= pageCount) {
			str += "<a href='list.jsp?pageNum="+(startPage+limit)+"'>[다음]</a>";
		}
		return str;
}

- 페이징을 위한 속성 3개 추가

2.BoardDBBean.java

public ArrayList<BoardBean> listBoard(String pageNumber) throws Exception {
		String sql ="SELECT B_ID, B_NAME, B_EMAIL, B_TITLE, B_CONTENT, B_DATE\r\n" + 
				", B_HIT, B_PWD, B_IP, B_REF, B_STEP, B_LEVEL \r\n" + 
				"FROM boardT ORDER BY B_REF DESC, B_STEP";
		String sql2 = "SELECT COUNT(B_ID) FROM boardT";
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		ResultSet pageSet = null;
		
		int dbCount = 0; // 글 갯수
		int absolutePage = 1; 
		
		ArrayList<BoardBean> list = new ArrayList<BoardBean>();
		try {
			conn = getConnection();
			stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
			/*
			 *  ResultSet.TYPE_SCROLL_SENSITIVE : ResultSet의 위치 이동, 업데이트 내용 반영
			 *  ResultSet.CONCUR_UPDATABLE : 데이터 변경 가능
			 *  */
			pageSet = stmt.executeQuery(sql2);
			if (pageSet.next()) {
				dbCount = pageSet.getInt(1);
				pageSet.close();
			}
			if (dbCount % BoardBean.pageSize == 0) { // 데이터가 80개면 pageSize = 10이므로 전체 페이지는 8개
				BoardBean.pageCount = dbCount / BoardBean.pageSize;
			} else { // 데이터가 82개면 pageSize = 10이므로 전체 페이지는 80/10 +1 = 9개
				BoardBean.pageCount = dbCount / BoardBean.pageSize+1;
			}
			
			if (pageNumber != null) { // 글을 보다가 목록으로 돌아오면 페이지번호를 가지고 있으므로 해당 페이지의 목록을 보여주게 하기 위함
				BoardBean.pageNum = Integer.parseInt(pageNumber);
				absolutePage = (BoardBean.pageNum - 1) * BoardBean.pageSize + 1;
			}
			
			rs = stmt.executeQuery(sql);
			
			if (rs.next()) {
				rs.absolute(absolutePage);
				int count = 0;
				while (count < BoardBean.pageSize) { // 10번 반복
					BoardBean bb = new BoardBean();
					bb.setB_id(rs.getInt(1));
					bb.setB_name(rs.getString(2));
					bb.setB_email(rs.getString(3));
					bb.setB_title(rs.getString(4));
					bb.setB_content(rs.getString(5));
					bb.setB_date(rs.getTimestamp(6));
					bb.setB_hit(rs.getInt(7));
					bb.setB_pwd(rs.getString(8));
					bb.setB_ip(rs.getString(9));
					bb.setB_ref(rs.getInt(10));
					bb.setB_step(rs.getInt(11));
					bb.setB_level(rs.getInt(12));
					list.add(bb); // 반복하면서 list 객체에 bb객체 내용을 담음
					
					if (rs.isLast()) {
						break; // 결과가 마지막이면 반복 종료
					} else {
						rs.next();
					}
					count++;
				}
			}
		} catch (SQLException ex) {
			System.out.print("조회 실패");
			ex.printStackTrace();
		} finally {
			try {
				if (rs != null) {
					rs.close();
				}
				if (stmt != null) {
					stmt.close();
				}
				if (conn != null) {
					conn.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return list;
	}

- 전체 글 갯수를 이용해 페이지 수 계산

3. list.jsp

<%
	BoardDBBean bdb = BoardDBBean.getInstance();
	String pageNum = request.getParameter("pageNum");
	if(pageNum == null){
		pageNum = "1";
	} 
	ArrayList<BoardBean> list = bdb.listBoard(pageNum);
%>
<body>
	<center>
		<h1>게시판에 등록된 글 목록 보기</h1>
		<table width="600">
			<tr>
				<td align="right">
					<a href="write.jsp?pageNum=<%= pageNum %>">글 쓰 기</a>
				</td>
			</tr>
		</table>
		<table border="1" width="800">
			<tr height="25">
				<td width="40" align="center">번호</td>
				<td width="450" align="center">글제목</td>
				<td width="120" align="center">작성자</td>
				<td width="130" align="center">작성일</td>
				<td width="60" align="center">조회수</td>
			</tr>
	<%
		for(int i=0; i < list.size(); i++) {
			BoardBean board = list.get(i); // 배열에 넣은 역순으로 board 객체에 값을 넣어줌
			b_id=board.getB_id();
			b_name=board.getB_name();
			b_email=board.getB_email();
			b_title= board.getB_title();
			b_date= board.getB_date();
			b_hit= board.getB_hit();
			b_level = board.getB_level();
	%>
			<tr height="25" bgcolor="#E8E8E8" onmouseover="this.style.backgroundColor='#AEBAB4'"
			onmouseout="this.style.backgroundColor='#E8E8E8'">
				<td align="center"><%= b_id %></td>
				<td id="title" >
					<%
						if(b_level > 0){
							for(int j=0; j<b_level; j++){
					%>
								&nbsp;
					<%			
							}
					%>
								<img src="../images/AnswerLine.gif" />
					<%
						}
					%>
					<a href="show.jsp?b_id=<%=b_id %>&pageNum=<%= pageNum %>"><%= b_title %></a>
				</td>
				<td  align="center">
					<a href="mailto:<%= b_email %>>"><!-- 작성자에게 메일을 보내는 a태그  -->
						<%= b_name %>
					</a>
				</td>
				<td  align="center"><%= sdf.format(b_date) %></a>
				</td>
				</td>
				<td  align="center"><%= b_hit %></a>
				</td>
			</tr>
	<% } %>
		</table>
		<%= BoardBean.pageNumber(4) %>
	</center>
</body>

- 페이지 번호를 받으면 그 페이지를 처음에 보여주기 위한 코드 추가

 

- 다른 파일에서 페이지 이동하는 url에 파라미터에 페이지 번호를 추가해 전달

'java,jsp,spring > JSP' 카테고리의 다른 글

JSP 게시판 - 파일 다운로드  (1) 2022.09.15
JSP 게시판 - 파일 업로드  (1) 2022.09.15
JSP 게시판 답글 기능  (1) 2022.09.11
JSP 게시판 (4) 글 삭제  (0) 2022.09.06
JSP 게시판 (3) 글 수정  (0) 2022.09.06