BbsDAO.java 에 추가
// 가능한 모든 글의 갯수 + 1 리턴
public int getNext() {
//데이터를 지워도 되는데, 백업이 필요할 수 있으니 바로 삭제안하고 숨김표시할거임
String SQL = "SELECT COUNT(*) FROM bbs WHERE bbsAvailable = 1";
try {
PreparedStatement pstmt = conn.prepareStatement(SQL);
rs = pstmt.executeQuery();
if (rs.next()) {
return rs.getInt(1) + 1; //현재 총 게시글의 +1 만큼 리턴
}
return 1; // 첫 번째 게시물인 경우
} catch (Exception e) {
e.printStackTrace();
}
return -1; // 데이터베이스 오류
}
test해보기
// 페이지 숫자에 맞게 게시글들을 최대10개 리턴한다.
public ArrayList<Bbs> getList(int pageNumber) {
String SQL = "select * from BBS where bbsID <= ? and bbsAvailable = 1 "+""
+ "order by bbsID desc limit 10";
ArrayList<Bbs> list = new ArrayList<Bbs>();
try {
PreparedStatement pstmt = conn.prepareStatement(SQL);
//총 게시글 수-(페이지-1)*10
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.setBbsAvailable(rs.getInt(6));
list.add(bbs);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
// 다음 페이지가 있는가?(현재 페이지 +1) 나올 게시글이 있으면 참임
public boolean nextPage(int pageNumber) {
String SQL = "select * from BBS where bbsID < ? and bbsAvailable = 1";
try {
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 import="bbs.Bbs"%>
<%@page import="java.util.ArrayList"%>
<%@page import="bbs.BbsDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" href="css/bootstrap.min.css" />
<style>
.c-item {
height: 480px;
}
.c-img {
height: 100%;
object-fit: cover;
filter: brightness(0.6);
/* filter : 밝기 조절 1 기본밝기 작아질수록 어두워짐 */
}
</style>
<title>로그인 페이지</title>
</head>
<body>
<%
//세션의 userID가 있으면 가져온다.
String userID = null; //유저ID가 null이 아니면 가져오기
if (session.getAttribute("userID") != null) {
userID = (String) session.getAttribute("userID");
}
int pageNumber = 1;//페이지 초기값 1
if (request.getParameter("pageNumber") != null) {
pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
}
%>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="main.jsp">JSP 게시판</a>
<button class="navbar-toggler" type="button" data-toggle="collapse"
data-target="#navbarNav" aria-controls="navbarNav"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<!-- 왼쪽 메뉴 리스트 -->
<ul class="navbar-nav">
<li class="nav-item active"><a class="nav-link" href="main.jsp">메인</a>
</li>
<li class="nav-item"><a class="nav-link" href="bbs.jsp">게시판</a></li>
</ul>
<!-- 오른쪽 메뉴 리스트 -->
<ul class="navbar-nav ml-auto">
<li class="nav-item"><span class="nav-link">안녕하세요${userID}님</span>
</li>
<li class="nav-item dropdown"><a
class="nav-link dropdown-toggle" href="#" id="Dropdown"
role="button" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false"> 접속하기 </a>
<div class="dropdown-menu" aria-labelledby="Dropdown">
<%
//userID가 없는 사람은 로그인과 가입하기만 보여주고 ID가 있는 사람은 로그아웃만
if (userID == null) {
%>
<a class="dropdown-item active" href="login.jsp">로그인</a> <a
class="dropdown-item" href="join.jsp">가입하기</a>
<%
} else if (userID != null) {
%>
<a class="dropdown-item" href="logoutAction.jsp">로그아웃</a>
<%
}
%>
</div></li>
</ul>
</div>
</nav>
<!--게시판 화면-->
<div class="container">
<div class="container mt-3">
<div class="row">
<table class="table table-striped">
<thead>
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</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="view.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, 19)%></td>
</tr>
<%
}
%>
</tbody>
</table>
<%
if (pageNumber != 1) {
%>
<a href="bbs.jsp?pageNumber=<%=pageNumber - 1%>"
class="btn btn-success btn-arraw-left">이전</a>
<%
}
if (bbsDAO.nextPage(pageNumber + 1)) {
%>
<a href="bbs.jsp?pageNumber=<%=pageNumber + 1%>"
class="btn btn-success btn-arraw-left">다음</a>
<%
}
%>
</div>
<div class="row justify-content-end">
<a href="write.jsp" class="btn btn-primary">글쓰기</a>
</div>
</div>
</div>
<!-- 부트스트랩 제이쿼리,번들 -->
<script src="js/jquery-3.7.1.min.js"></script>
<script src="js/bootstrap.bundle.min.js"></script>
</body>
</html>
게시글 클릭하면 볼 수 있게 코드 수정하기
BbsDAO.java
// id로 게시글 불러오기
public Bbs getBbs(int bbsID) {
String SQL = "select * from bbs where bbsID = ?";
try {
PreparedStatement pstmt = conn.prepareStatement(SQL);
pstmt.setInt(1, bbsID);
rs = pstmt.executeQuery();
if (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.setBbsAvailable(rs.getInt(6));
return bbs;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeAll();
}
return null;
}
wirte.jsp 복사해서 view.jsp 생성
<body>
<%
//세션의 userID가 있으면 가져온다.
String userID = null; //유저ID가 null이 아니면 가져오기
if (session.getAttribute("userID") != null) {
userID = (String) session.getAttribute("userID");
}
int bbsID = 0; //게시글 번호 초기값은 0이고 파라미터를 받음
if (request.getParameter("bbsID") != null) {
bbsID = Integer.parseInt(request.getParameter("bbsID"));
}
//파라미터로 받은 값이 없을 때
if(bbsID==0){
out.println("<script>");
out.println("alert('유효하지 않는 글입니다.')");
out.println("location.href ='bbs.jsp'");
out.println("<script>");
}
BbsDAO dao = new BbsDAO();
Bbs bbs = dao.getBbs(bbsID);
%>
<!--글 상세 화면-->
<div class="container mt-3">
<div class="card">
<div class="card-header">
<%=bbs.getBbsTitle()%>
</div>
<div class="card-body">
<p class="card-text"><%=bbs.getBbsContent().replaceAll(" ", " ").replaceAll("\n", "<br>")%></p>
<div class="row mt-2">
<a href="bbs.jsp" class="btn btn-primary ml-3">돌아가기</a>
<%
if (userID != null && userID.equals(bbs.getUserID())) {
%>
<a href="update.jsp?bbsID=<%=bbsID%>"
class="btn btn-success ml-3">수정</a> <a
onclick="return confirm('정말 삭제하시겠습니까?')"
href="deleteAction.jsp?bbsID=<%=bbsID%>"
class="btn btn-danger ml-3">삭제</a>
<%
}
%>
</div>
</div>
</div>
</div>
**
.replaceAll(" ", " ").replaceAll("\n", "<br>")
위의 코드로 공백을 바꿔준다 html에서는 " ' " /n"을 인식 할 수 없어서
'BACKEND > Jsp' 카테고리의 다른 글
모델1 방식의 회원제 게시판 만들기 - 프로세스 및 DB 설계 (0) | 2023.10.16 |
---|---|
게시판 만들기 5 -수정하기 /삭제하기 (0) | 2023.10.13 |
게시판 만들기 3 - 메인 페이지 ,게시판 ,글쓰기, 게시판 출력 (0) | 2023.10.11 |
게시판 만들기 2 - 회원가입 , 로그아웃 (0) | 2023.10.10 |
게시판 만들기-1( db연결확인 ~ 로그인 ) (0) | 2023.10.10 |