💡 핵심 요약 (TL;DR)
Javabean 10 : 게시판만들기(답글쓰기)의 동작 원리를 이해하고 실제 프로젝트에 적용하기 위한 실무 가이드다.
* num : 일반글+답글 둘 다 작성할때마다 계속 증가된 값으로 사용(순차적)을 적용할 수 있다.
ITWILL학원 : 30강 JSP기초 BY 정규태강사 1. 답글처리구현 순서
일반글 = 답글이 아닌 글.
num : 일반글+답글 둘 다 작성할때마다 계속 증가된 값으로 사용(순차적)
re_ref : 답글의 그룹번호(일반글번호와 동일), 답글을 다는 원글의 그룹번호를 사용
re_lev (level) : 답글의 레벨값 (깊이), 원글을 기준으로한다 ex)한번내려가면1 두번내려가면 2
re_seq (sequence) : 답글의 순서, 원글에 답글이 몇개인지하는 순서대로 카운트.
일반글은 ref만 num값과 동일하게 초기화
답글은 lev, seq는 0으로 초기화
만약 여기서 3번글의 답글 1개를 추가한다면?6 / 답급3-1 / 3 / 1 / 1
만약 여기서 3번글의 답글 1개를 추가한다면?6 / 답글3-1 / 3 / 1 / 1
만약 여기서 3번글의 답글 1개를 또 추가한다면?7 / 답글3-2 / 3 / 1 / 2
만약 여기서 3번답글인 3-1에 답글 1개를 추가한다면?8 / 답글3-1-1 / 3 / 2 / 3
만약 여기서 4번밑에 답글을 단다면?9 / 답글4-1 / 4 / 1 / 1
만약 여기서 일반글 작성한다면?10 / 일반글 / 10 / 0 / 0
만약 여기서 답글4-1에 답글을 단다면?11 / 답글4-1-1 / 4 / 2 / 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <% //한글처리 request.setCharacterEncoding("UTF-8"); //전달한 데이터 저장 (bno,re_ref, re_lev, &re_seq) int bno = Integer.parseInt(request.getParameter("bno")); int re_ref = Integer.parseInt(request.getParameter("re_ref")); int re_lev = Integer.parseInt(request.getParameter("re_lev")); int re_seq = Integer.parseInt(request.getParameter("re_seq")); //어떻게 가져갈 것인가? 폼태그안에 담아갈까? 주소창에 GET방식으로 가져갈까? //bean의 멤버변수에 있는 변수는 폼태그안에 담아가면된다. =>hidden 인풋태그 %> <fieldset> <legend>게시판 답글쓰기</legend> <form action="reWritePro.jsp" method="post" name="fr"> <input type="hidden" name="bno" value="<%=bno%>"> <input type="hidden" name="re_ref" value="<%=re_ref%>"> <input type="hidden" name="re_lev" value="<%=re_lev%>"> <input type="hidden" name="re_seq" value="<%=re_seq%>"> 글쓴이 : <input type="text" name="name" required><br> 비밀번호 : <input type="password" name="pw" required><br> 제목 : <input type="text" name="subject" maxlength="15" value="[답글] " required><br> 내용 : <br> <textarea rows="10" cols="35" name="content" placeholder="여기에 답글을 작성해주세요" required></textarea><br> <input type="submit" value="답글등록" class="btn"> <button type="reset" class="btn">초기화</button> <input type="button" value="목록으로" class="btn" onclick="location.href='boardList.jsp'"> </form> </fieldset>
3. reWritePro.jsp 작성 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <% request.setCharacterEncoding("UTF-8" ); %> <jsp:useBean id = "bb" class="com.itwillbs.board.BoardBean" /> <jsp:setProperty property = "*" name="bb" /> <% System.out.println(bb); bb.setIp(request.getRemoteAddr()); BoardDAO bdao = new BoardDAO ();bdao.reInsertBoard(bb); response.sendRedirect("boardList.jsp" ); %>
4. BoardDAO.java에서 reInsertBoard(BoardBean bb)메서드 만들기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 public void reInsertBoard (BoardBean bb) { int num = 0 ; try { getCon(); sql = "select max(bno) from itwill_board" ; pstmt = con.prepareStatement(sql); rs = pstmt.executeQuery(); if (rs.next()){ num = rs.getInt(1 )+1 ; } System.out.println(" 답글 번호 : " +num); sql = "update itwill_board set re_seq=re_seq+1 " + "where re_ref=? and re_seq>?" ; pstmt = con.prepareStatement(sql); pstmt.setInt(1 , bb.getRe_ref()); pstmt.setInt(2 , bb.getRe_seq()); pstmt.executeUpdate(); sql="insert into itwill_board " + "values(?,?,?,?,?" + ",?,?,?,?,now()" + ",?,?)" ; pstmt = con.prepareStatement(sql); pstmt.setInt(1 , num); pstmt.setString(2 , bb.getName()); pstmt.setString(3 , bb.getPw()); pstmt.setString(4 , bb.getSubject()); pstmt.setString(5 , bb.getContent()); pstmt.setInt(6 , bb.getReadcount()); pstmt.setInt(7 , bb.getRe_ref()); pstmt.setInt(8 , bb.getRe_lev()+1 ); pstmt.setInt(9 , bb.getRe_seq()+1 ); pstmt.setString(10 , bb.getFile()); pstmt.setString(11 , bb.getIp()); pstmt.executeUpdate(); System.out.println("답글쓰기 성공" ); } catch (Exception e) { e.printStackTrace(); } finally { closeDB(); } }
5. BoardList.jsp에서 답글 들여쓰기 추가 구현 이미지와 조건문을 통해 구현
img src=”level.gif” width=”<%=wid%>” height=”15”
img src=”re.gif”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 <fieldset> <legend>땡땡게시판</legend> <div id="contents"> 게시판 총 글의 수 : <%=cnt%> 개 <% if(id == null){ %> <input class="btn" type="button" value="로그인" onclick="location.href='../member/main.jsp'"> <% }else if( id != null){ %> <input class="btn" type="button" value="로그아웃" onclick="location.href='../member/logout.jsp'"> <input class="btn" type="button" value="글쓰기" onclick="location.href='writeForm.jsp'"> <% } %> <br> <table> <tr> <th>글번호</th> <th>제목</th> <th>작성자</th> <th>조회수</th> <th>작성일</th> <th>IP</th> </tr> <%//반복문 //ArrayList는 가변배열이므로 length가 없고 size가 존재한다. //size()메서드는 배열의 요소의 갯수를 리턴 for(int i=0;i<boardList.size(); i++){ //ArrayList 한칸의 정보 ->BoardBean 객체 하나로 이동 BoardBean bb = (BoardBean) boardList.get(i); %> <tr> <td><%=bb.getBno()%></td> <td> <% //답글일때만 이미지넣기 //변수 wid를 이용하여 들여쓰기 처리 int wid = 0; if(bb.getRe_lev() > 0){ wid= 10 * bb.getRe_lev(); //레벨값의 10을 곱한 값만큼 이미지 가로길이를 길게해줌 %> <img src="level.gif" width="<%=wid%>" height="15"> <img src="re.gif"> <% } %> <a href="content.jsp?bno=<%=bb.getBno()%>&pageNum=<%=pageNum%>"><%=bb.getSubject()%></a></td> <td><%=bb.getName()%></td> <td><%=bb.getReadcount()%></td> <td><%=bb.getDate()%></td> <td><%=bb.getIp()%></td> </tr> <% } %> </table> </div> </fieldset>
#TIL ITWILL(JAVA)