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>
&nbsp;
<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"%>