본문 바로가기

개인프로젝트

[내가 만든 프로젝트 코드 분석 | JSP게시판 만들기] 11.게시판 글 목록 기능 구현하기

실제로 작성된 목록을 출력하는 기능을 구현합니다.

게시글 목록을 출력하기 위해 게시글 리스트 반환 메서드와 페이징처리 메서드를 생성합니다.

public ArrayList<Bbs> getList(int pageNumber) { // 특정 게시글 리스트 반환
		String SQL = "SELECT * FROM BBS WHERE bbsID < ? AND bbsAvailable = 1 ORDER BY bbsID DESC LIMIT 10"; // 페이지당 10개의 게시글 선택
		ArrayList<Bbs> list = new ArrayList<Bbs>();
		try {
			PreparedStatement pstmt = conn.prepareStatement(SQL);
			pstmt.setInt(1, getNext() - (pageNumber - 1) * 10); // ?값 설정
			rs = pstmt.executeQuery();
			while (rs.next()) {
				Bbs bbs = new Bbs();
				bbs.setBbsID(rs.getInt(1));
				bbs.setBbsTitle(rs.getString(2));
				bbs.setUserID(rs.getString(3));
				bbs.setBbsDate(rs.getString(4));
				bbs.setBbsContent(rs.getString(5));
				bbs.setBbsAvailabe(rs.getInt(6));
				list.add(bbs); // 리스트에 인스턴스 반환
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list; // 10개의 게시판 리스트 출력
	} 
	
	public boolean nextPage(int pageNumber) { // 10개 이하 게시물 페이징처리
		String SQL = "SELECT * FROM BBS WHERE bbsID < ? AND bbsAvailable = 1 ORDER BY bbsID DESC LIMIT 10";
		try {
			PreparedStatement pstmt = conn.prepareStatement(SQL);
			pstmt.setInt(1, getNext() - (pageNumber - 1) * 10);
			rs = pstmt.executeQuery();
			if (rs.next()) {
				return true; // 다음페이지가 있는 경우
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false; // 현재페이지가 마지막 페이지인 경우
	}

bbs.jsp에 만들어 게시물 리스트를 출력 부분을 작성합니다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.PrintWriter" %>    
<%@ page import="bbs.BbsDAO" %>  
<%@ page import="bbs.Bbs" %>  
<%@ page import="java.util.ArrayList" %>  // 게시판 목록 출력
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="veiwport" content="width=device-width", initial-scale="1">
<link rel="stylesheet" href="css/bootstrap.css">
<title>JSP 게시판 웹 사이트</title>
<style type="text/css"> // 게시글 제목 스타일 설정
	a, a:hover {
		color: #000000;
		text-decoration: none; // 밑줄 삭제
	}
</style>
</head>
<body>
	<%
		String userID = null;
		if (session.getAttribute("userID") != null) {
			userID = (String) session.getAttribute("userID");
		}
		int pageNumber = 1; // 기본 페이지 넘버
		if (request.getParameter("pageNumber") != null ) { // 파라미터 값 정수형 설정
			pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
		}
	%>
	<nav class="navbar navbar-default">
		<div class="navbar-header">
			<button type="button" class="navbar-toggle collapsed"
				data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
				aria-expanded="false">
				<span class="icon-bar"></span>
				<span class="icon-bar"></span>
				<span class="icon-bar"></span>
			</button>
			<a class="navbar-brand" href="main.jsp">JSP 웹 사이트 게시판</a>
		</div>
                                     .
                                     .
                                     .

	</nav>
	<div class="container"> 
		<table class="table table-striped" style="text-align: center; border: 1px solid #dddddd">
			<thead>
				<tr>
					<th style="background-color: #eeeeee; text-align: center;">번호</th>	
					<th style="background-color: #eeeeee; text-align: center;">제목</th>		
					<th style="background-color: #eeeeee; text-align: center;">작성자</th>		
					<th style="background-color: #eeeeee; text-align: center;">작성일</th>						
				</tr>
			</thead>
			<tbody> // 게시글 목록 출력
				<%
					BbsDAO bbsDAO = new BbsDAO(); // 인스턴스 생성
					ArrayList<Bbs> list = bbsDAO.getList(pageNumber); // 현재 페이지 리스트 출력 
					for(int i = 0; i < list.size(); i++) {
				%>
				<tr> // 현재 게시글정보
					<td><%= list.get(i).getBbsID() %></td>
					<td><a href="vew.jsp?bbsID=<%= list.get(i).getBbsID() %>"><%= list.get(i).getBbsTitle() %></a></td> // 게시물 번호를 매개변수로 설정하여 게시물 상세보기로 이동
					<td><%= list.get(i).getUserID() %></td>
					<td><%= list.get(i).getBbsDate().substring(0, 11) + list.get(i).getBbsDate().substring(11, 13) + "시" + list.get(i).getBbsDate().substring(14, 16) + "분"%></td> // 필요한 날짜정보를 잘라서 출력
				</tr>
				<%
					}
				%>
			</tbody>
		</table> // 이전페이지와 다음페이지로 이동할 수 있는 버튼 생성
		<%
			if(pageNumber != 1) { // 2페이지 이상인 경우
		%>
			<a href="bbs.jsp?pageNumber=<%=pageNumber - 1%>" class="btn btn-success btn-arrow-Left">이전</a>
		<%
			} if(bbsDAO.nextPage(pageNumber + 1)) { // 다음페이지가 존재하는 경우
		%>
			<a href="bbs.jsp?pageNumber=<%=pageNumber + 1%>" class="btn btn-success btn-arrow-Left">다음</a>
		<%
			}
		%>
		<a href="write.jsp" class="btn btn-primary pull-right">글쓰기 </a>
	</div>
	<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
	<script src="js/bootstrap.js"></script>
</body>
</html>