JSP 페이지에서 게시판을 만들고, 게시글 내의 페이지에서 덧글 기능을 추가하여 보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//board 상세 내용 출력하는 부분
                    
                    String sql = "SELECT board_no,member_id,board_title,board_content,board_pw,board_date FROM board where board_no=?";
                    pstmt = conn.prepareStatement(sql);
                    pstmt.setString(1,sendBoardNo);
                    System.out.println(pstmt + " : confirm pstmt");
                    
                    rs = pstmt.executeQuery();
                    
                    
                    if(rs.next()) {
                %>
                        <div id="view_title_box">
                            <span><%=rs.getString(3%></span>
                            <span id="info"><%=rs.getString(2%> | 조회:208 | <%=rs.getString(6%></span>
                        </div>
                        <p id="view_content">
                            <%=rs.getString(4%>
                        </p>
                <%
                    }
                %>
cs


쿼리문은 글 번호가 일치하는 게시물의 번호, 글쓴이의 id, 글 제목, 글 내용, 글 비밀번호, 작성 시간의 부분을 조회하는 내용이다.


rs 객체에 담겨진 테이블은 rs.getString()에 의해 글의 제목, 작성자 id, 글의 내용이 페이지 내에 출력되게 된다.


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
<!-- 덧글 리스트 -->
                <!-- 페이징 or 덧글의 수가 5개까지 허용되도록 --> 
                <%
                    //덧글 리스트 select
                    String commentListQuery = "SELECT member_id, board_comment_content FROM board_comment WHERE board_no=?";
                    pstmt2 = conn.prepareStatement(commentListQuery);
                    pstmt2.setString(1, sendBoardNo);
                    System.out.println(pstmt2 + " : confirm pstmt2");
                    
                    //덧글의 갯수 select
                    String countListQuery = "SELECT count(*) as countList FROM board_comment where board_no=?";
                    pstmt3 = conn.prepareStatement(countListQuery);
                    pstmt3.setString(1, sendBoardNo);
                    
                    rs2 = pstmt2.executeQuery();
                    System.out.println(rs2 + " : confirm rs2");
                    
                    rs3 = pstmt3.executeQuery();
                    System.out.println(rs3 + " : confirm rs3");
                    
                    //덧글 갯수 변수에 저장
                    int countList = 0;
                    if(rs3.next()){
                        countList = rs3.getInt(1);
                    }
                %>
cs


덧글에 관련된 코드이다.


첫번째 쿼리는 글 번호가 일치하는 글의 작성자 id, 덧글들을 board_comment 테이블에서 조회하는 내용이다.


두번째 쿼리는 글 번호가 일치하는 board_comment 내의 모든 행의 갯수를 조회하는 내용이다.


그 후 rs3 객체에 담겨진 두번째 쿼리 실행의 결과 테이블은 countList 변수에 값이 담기게 된다.



                    //덧글 리스트 출력
                    while(rs2.next()){
                %>
                        <tr>
                            <td><%=rs2.getString(1%></td>
                            <td><%=rs2.getString(2%></td>
                        </tr>
                <%
                    }
                %>


덧글 리스트를 출력하는 코드로 rs2 객체내 테이블의 행을 조사하여 컬럼의 값들을 행의 마지막 까지 페이지에 출력하게 한다.


                <!-- 덧글 입력하는 폼 -->
                <form action="./insertCommentAction.jsp" method="post">
                    <div id="comment_box">
                        <img id="title_comment" src="img/title_comment.gif">
                        <textarea name="boardCommentContent"></textarea>
                        <%
                            //로그인 세션이 있을때만 덧글 작성 가능.
                            if(session.getAttribute("loginInfo"!= null){
                                //덧글 갯수가 5개 미만일때 글쓰기 버튼 표시
                                if(countList < 5) {
                        %>
                                    <input type="image" id="ok_ripple" src="img/ok_ripple.gif"><br>
                        <%
                                } else { //덧글갯수가 5개 이상이면 글쓰기 버튼 없애기
                        %>
                                    <img src="img/comment_limit_5.jpg" id="ok_ripple2">
                        <%
                                }
                            } else {//로그인 세션이 없을때는 로그인 먼저 하라는 그림 출력
                        %>
                                <img src="img/first_login.jpg" id="ok_ripple2">
                        <%                                
                            }
                        %>    
                        <input type="hidden" name="boardNo" value="<%=sendBoardNo %>"><br>
                        <input type="hidden" name="loginInfo" value="<%=session.getAttribute("loginInfo")%>">
                    </div>
                </form>

덧글을 입력하는 폼의 코드 부분이다.


폼에서 insertCommentAction.jsp페이지로 post 방식을 통해 값을 넘겨주도록 하였다.


로그인 세션이 있을때애는 덧글 작성확인 이미지 버튼이 표시되게 하였고,


없을때에는 로그인을 먼저 하라는 사진이 표시되도록 하였다.


그리고 덧글이 5개 이상일 경우에는 더 이상 덧글을 작성할 수 없다는 그림을 표시하게 하였다.


1
2
3
4
5
6
7
8
9
10
11
12
13
            // 덧글 사용 쿼리문 작성
            String insertCommentQuery = "INSERT INTO board_comment (board_no, board_comment_content, member_id) VALUES (?, ?, ?)";
            pstmt = conn.prepareStatement(insertCommentQuery);
            pstmt.setInt(1, boardNo);
            pstmt.setString(2, boardCommentContent);
            pstmt.setString(3, loginInfo);
            
            //쿼리문 실행
            pstmt.executeUpdate();
            
            //덧글 작성 글로 리다이렉트
            response.sendRedirect("./boardDetail.jsp?sendboardno=" + boardNo);
 
cs


boardDetail.jsp 페이지에서 전송된 정보를 받아서 mysql데이터 베이스에 입력하도록 하는 페이지다.


쿼리문은 글 번호, 덧글 내용, 작성자 id 컬럼에 입력값을 담아서 삽입하는 내용이다.


PreparedStatement 객체내 executeUpdate()메소드가 실행되어 삽입이 완료 되고, 


boardDetail.jsp의 글 번호에 해당하는 글로 리다이렉트 되도록 하였다.





덧글 리스트와 덧글 작성 부분이다.




덧글이 5개 이상이면 덧글쓰기 버튼이 이미지로 전환된다.


로그인을 하지 않은 상태에서는 로그인을 먼저 하라는 이미지가 출력된다.







이상 JSP를 활용하여 게시글에 덧글 기능을 만들어 보았다.


아직 초보라 실력이 매우 미숙하기에 너른 이해 바랍니다.

+ Recent posts