Project/myweb_JAVA
04. 답변형 게시판 ② (게시글 목록, 게시글 상세보기)
개발개발빈이
2022. 7. 21. 21:05
○ 게시글 목록
① DAO : BbsDAO.java
public ArrayList<BbsDTO> list() {
ArrayList<BbsDTO> list=null;
try {
con=dbopen.getConnection();//DB연결
sql=new StringBuilder();
sql.append(" SELECT bbsno, wname, subject, readcnt, regdt, indent ");
sql.append(" FROM tb_bbs ");
sql.append(" ORDER BY grpno DESC, ansnum ASC ");
pstmt = con.prepareStatement(sql.toString());
rs = pstmt.executeQuery();
if(rs.next()) {
list=new ArrayList<BbsDTO>();//전체 행을 저장
do {
BbsDTO dto = new BbsDTO();//커서가 가리키는 한 줄 저장
dto.setBbsno(rs.getInt("bbsno"));
dto.setWname(rs.getString("wname"));
dto.setSubject(rs.getString("subject"));
dto.setReadcnt(rs.getInt("readcnt"));
dto.setRegdt(rs.getString("regdt"));
dto.setIndent(rs.getInt("indent"));
list.add(dto); //list저장
}while(rs.next());
}//if end
}catch (Exception e) {
System.out.println("목록불러오기 실패: " + e);
}finally{
DBclose.close(con, pstmt, rs);
}//try end
return list;
}//list() end
② 뷰단 : bbslist.jsp
<%@page import="net.utility.Utility"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp"%>
<%@ include file="../header.jsp"%>
<!-- 본문시작 bbsList.jsp -->
<div class="container-fluid text-center">
<h3> 글 목 록</h3>
<p><a href="bbsForm.jsp">[글쓰기]</a></p>
<table id="bbslist" class="table table-hover">
<thead>
<tr class="active">
<th class="title">글제목</th>
<th>작성자</th>
<th>작성일</th>
<th>조회수</th>
</tr>
</thead>
<tbody>
<%
ArrayList<BbsDTO> list = dao.list();
if(list==null){
out.println("<tr>");
out.println(" <td colspan='4'>자료없음</td>");
out.println("</tr>");
}else{
for(int i=0; i<list.size(); i++){
dto=list.get(i);//한줄 가져오기
%>
<tr>
<td style="text-align: left;">
<%
//답변이미지 출력 : 들여쓰기 횟수만큼 re기호 찍기
for(int j=1; j<=dto.getIndent(); j++){
out.println("<img src='../images/reply.gif'>");
}//for end
%>
<!-- 제목에 상세보기 이동 링크-->
<a href='bbsRead.jsp?bbsno=<%=dto.getBbsno()%>'><%=dto.getSubject()%></a>
<%
//조회수가 10이상이면 hot이미지 출력
if(dto.getReadcnt()>=10){
out.println("<img src='../images/hot.gif'>");
}//if end
//오늘 날짜를 문자열 "2022-05-04" 로 만들기
//작성일(regdt)에서 "년월일"만 자르기
//단순 String 비교이기 때문에 저녁 11:59분에 쓴 글은 1분만 new가 뜬다
String today=Utility.getDate();
String regdt=dto.getRegdt().substring(0,10);
//오늘 작성한 글제목 뒤에 new이미지 출력
if(regdt.equals(today)){//작성일과 오늘 날짜와 같다면
out.println("<img src='../images/new.gif'>");
}//if end
%>
</td>
<td><%=dto.getWname()%></td>
<td><%=dto.getRegdt().substring(0,10)%></td>
<td><%=dto.getReadcnt()%></td>
</tr>
<%
}//for end
}//if end
%>
</tbody>
</table>
</div>
<!-- 본문끝 -->
<%@ include file="../footer.jsp"%>
○ 게시글 상세보기
① DAO : BbsDAO.java
public BbsDTO read(int bbsno) {
BbsDTO dto = null;
try {
con=dbopen.getConnection();//DB연결
sql=new StringBuilder();
sql.append(" SELECT bbsno, wname, subject, content, readcnt, regdt, indent, ansnum, ip, grpno ");
sql.append(" FROM tb_bbs ");
sql.append(" WHERE bbsno=? ");
pstmt = con.prepareStatement(sql.toString());
pstmt.setInt(1, bbsno);
rs = pstmt.executeQuery();
if(rs.next()) {
dto = new BbsDTO();//커서가 가리키는 한 줄 저장
dto.setBbsno(rs.getInt("bbsno"));
dto.setWname(rs.getString("wname"));
dto.setSubject(rs.getString("subject"));
dto.setContent(rs.getString("content"));
dto.setReadcnt(rs.getInt("readcnt"));
dto.setRegdt(rs.getString("regdt"));
dto.setIndent(rs.getInt("indent"));
dto.setAnsnum(rs.getInt("ansnum"));
dto.setIp(rs.getString("ip"));
dto.setGrpno(rs.getInt("grpno"));
}//if end
}catch (Exception e) {
System.out.println("상세보기 실패: " + e);
}finally{
DBclose.close(con, pstmt, rs);
}//try end
return dto;
}//read() end
public void incrementCnt(int bbsno) {//상세보기시 조회수 증가
try {
con=dbopen.getConnection();//DB연결
sql=new StringBuilder();
sql.append(" UPDATE tb_bbs ");
sql.append(" SET readcnt=readcnt+1 ");
sql.append(" WHERE bbsno=? ");
pstmt = con.prepareStatement(sql.toString());
pstmt.setInt(1, bbsno);
pstmt.executeUpdate();
}catch (Exception e) {
System.out.println("조회수 증가 실패: " + e);
}finally{
DBclose.close(con, pstmt);
}//try end
}//incrementCnt() end
② 뷰단 : bbsRead.jsp
<%@page import="net.utility.Utility"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp"%>
<%@ include file="../header.jsp"%>
<!-- 본문시작 bbsRead.jsp -->
<h3> 글 상 세 보 기</h3>
<p>
<a href="bbsForm.jsp">[글쓰기]</a>
<a href="bbsList.jsp">[글목록]</a>
</p>
<div class="container-fluid text-center">
<%
int bbsno=Integer.parseInt(request.getParameter("bbsno"));
dto=dao.read(bbsno);
if(dto==null){
out.println("해당 글 없음");
}else{
dao.incrementCnt(bbsno); //조회수 증가
%>
<table id="bbsread" class="table">
<tr>
<th class="bbslistTh">작성자</th>
<td class="bbsreadTd"><%=dto.getWname()%></td>
</tr>
<tr>
<th>IP</th>
<td class="bbsreadTd"><%=dto.getIp()%></td>
</tr>
<tr>
<th>조회수</th>
<td class="bbsreadTd"><%=dto.getReadcnt()%></td>
</tr>
<tr>
<th>작성일</th>
<td class="bbsreadTd"><%=dto.getRegdt()%></td>
</tr>
<tr>
<th>글제목</th>
<td class="bbsreadTd"><%=dto.getSubject()%></td>
</tr>
<tr>
<th>글내용</th>
<td class="bbsreadTd" style="text-align: left;">
<%
//사용자가 입력한 엔터(\n)를 <br> 태그로 바꿈
String content = Utility.convertChar(dto.getContent());
out.print(content);
%>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input id="bbsBtn" type="button" value="답변쓰기"
class="btn" onclick="location.href='bbsReply.jsp?bbsno=<%=bbsno%>'">
<input id="bbsBtn" type="button" value="수정"
class="btn" onclick="location.href='bbsUpdate.jsp?bbsno=<%=bbsno%>'">
<input id="bbsBtn" type="button" value="삭제"
class="btn" onclick="location.href='bbsDel.jsp?bbsno=<%=bbsno%>'">
</td>
</tr>
</table>
<%
}//if end
%>
</div>
<!-- 본문끝 -->
<%@ include file="../footer.jsp"%>