본문으로 바로가기

[JSP개발] 게시판 - 댓글 작성 및 댓글 목록

category 코딩/JSP 2017. 1. 2. 21:24







1. 개요





 난 포스팅 :  [JSP개발] 게시판 - 방명록 수정



이제는 게시판에 댓글을 구현할 것이다. 댓글은 게시글 상세보기 시 보이며, 로그인한 사용자만 작성하도록 한다.



 JSP

  • MainForm.jsp : 메인화면에는 스크롤을 나타나게 하기 위해 CSS 코드를 추가해준다.
  • BoardDetailForm.jsp : 댓글은 상세보기 화면에서 같이 보이도록 한다. 댓글 작성도 상세보기 화면에서 작성을 한다.


 Java

  • CommentController.java : 댓글 관련 Controller이다.
  • CommentWriteAction.java : 댓글 작성 Action이다.
  • CommentBean.java : 댓글의 데이터를 담을 자바빈이다.
  • CommentDAO.java : 글 테이블의 DAO이다.BoardDetailAction.java : 해당 글에 달린 댓글을 같이 보여주기 위해 상세보기 Action에서 댓글을 조회하여 화면으로 전달한다.


■ properties

  • CommentCommand.properties : 댓글 관련 명령어를 가지고 있는 프로퍼티 파일




2. 소스 코드



댓글을 저장할 테이블과 시퀀스를 먼저 만들어준다. 그리고 jsp.board.comment.action, jsp.board.comment.model, jsp.board.comment.properties 이렇게 3개의 패키지를 만들어준다.



■ 테이블 및 시퀀스


댓글을 저장할 테이블과 댓글 글 번호를 부여하는 시퀀스를 만든다. 댓글 테이블의 경우 게시글 글 번호가 필요하다. 어느 게시글에 달린 댓글인지를 알기 위해서이다. 게시글 글번호인 COMMENT_BOARD 칼럼의 경우 Member_Board(게시판 테이블)의 board_num을 외래키로 갖는다.





■ MainForm.jsp


메인화면에는 스크롤을 만들어주는 CSS 코드를 한 줄 추가해준다.




overflow:auto; 의 경우 내용이 div의 크기를 넘어서면 자동적으로 스크롤을 만들어주는 코드이다.




■ BoardDetailForm.jsp


상세보기 화면에서 댓글 목록을 보여주고, 댓글 작성을 하도록 만든다. 그러기 위해서는 html 코드 및 javascript 코드를 추가해야 한다.




먼저 댓글을 보여주는 html 코드이다.

  • 172줄 : 댓글 목록이 있을 경우에만 화면에 보여준다.

  • 173줄 : 댓글 목록을 for 문을 이용하여 화면에 출력한다.

  • 177~181줄 : 댓글 작성자와 작성일을 보여주는 부분이다.

  • 184~188줄 : 댓글 내용을 보여주는 부분이다.

  • 190~199줄 : 댓글에 달린 버튼이다. 수정, 삭제의 경우 댓글 작성자가 로그인했을 경우만 보이도록 한다.



다음으로 댓글 작성 부분이다.

  • 206줄 : 로그인했을 경우만 댓글 작성 화면이 보이게 한다. 이는 로그인한 사용자만 댓글을 작성 가능하게 한 것이다.

  • 209~210줄 : 댓글 저장시 게시글 번호와 작성자 ID가 필요하다. 이것은 화면에는 보일 필요가 없으므로 hidden으로 처리한다.



  • 212~216줄 : 로그인한 경우 자동적으로 아이디가 출력된다.

  • 218~222줄 : 댓글 본문을 작성하는 부분이다.

  • 224~228줄 : 댓글 등록 버튼이다. 클릭 시 함수 writeCmt( )가 실행된다.



스크립트 부분이다. 댓글 저장은 Ajax를 이용하였다. getXMLHttpRequest( ) 함수는 XMLHttpRequest 객체를 생성하는 역할을 한다.




다음으로 댓글을 등록하는 writeCmt( ) 함수이다.

  • 79줄~81줄 : 게시글 번호, 댓글 내용, 댓글 작성자에 대한 정보를 가져와서 변수에 담는다.

  • 83~86줄 : 댓글 내용이 입력되었는지 확인하는 부분이다. 입력되지 않은 상태에서 등록을 하려 하면 경고 창을 띄운다.

  • 90줄 : 서버로 전달할 파라미터이다. 전달할 값은 게시글 번호, 댓글 내용, 댓글 작성자이다.

  • 93줄 : XMLHttpRequest 상태 변화시 호출될 함수를 지정한다.

  • 94줄 : 전송 방식, 전송할 경로, 동기/비동기를 지정한다.

  • 95줄 : 한글 인코딩 처리를 한다.

  • 96줄 : 서버로 파라미터를 전송한다.



서버로 전송 이후 호출되는 함수이다. 정상적으로 데이터를 전송하고, 결과를 받았을 경우 103~150줄이 실행된다.

  • 105줄 : 서버에서 결과값 1을 받을 경우 게시글 상세보기 화면을 새로고침한다.




■ CommentBean.java


댓글 테이블의 칼럼 항목을 모두 변수로 만들어준다. 그리고 답글의 깊이를 가질 level이라는 변수도 추가로 만들어준다.




■ CommentController.java




BoardController 및 GuestbookController와 동일하다. 차이점은 위의 init( ) 부분이다. 





■ CommentWriteAction.java


댓글 작성 Action이다.




먼저 상세보기 화면에서 넘어온 파라미터 값을 가져온다.




가져온 파리미터 값을 CommentBean에 세팅한다.

  • 32줄 : 댓글의 글번호는 시퀀스 값을 사용한다.

  • 32줄 : 댓글을 저장한다.



정상적으로 저장되면 화면으로 1을 전달한다. Ajax를 이용하기 때문에 화면을 이동시킬 필요가 없다. 그래서 ActionForward를 사용할 필요가 없기에 retrun 값을 null로 지정한다.





■ CommentDAO.java




댓글의 글 번호를 부여하는 시퀀스를 가져오는 메서드이다. 




댓글을 저장하는 부분이다. 다른 DAO와 동일하게 처리되어있다.




댓글 목록을 가져오는 getCommentList( )이다. 인자로는 게시글의 글 번호를 넘겨받는다. 그리고 댓글 목록을 담을 ArrayList를 만든다.




  • 124~130줄 : 계층 쿼리를 이용하여 댓글을 검색한다. 

  • 133줄 : 게시글의 글 번호를 쿼리에 세팅한다.

  • 136~146줄 : 댓글 정보를 CommentBean에 세팅하고 그것을 ArrayList에 추가한다.

댓글 목록을 가져오면 그것을 리턴한다.





■ BoardDetailAction.java


게시글 상세보기 Action에는 댓글을 가져오는 코드를 추가해준다.




  • 34~35줄 : 게시글 번호를 이용하여 해당 글에 달린 댓글 목록을 가져온다.

  • 38줄 : 댓글이 1개라도 있다면 그것을 request에 세팅한다.




■ CommentCommand.properties


프로퍼티에는 댓글 저장 명령어를 추가한다.




■ web.xml


web.xml에는 <servlet>과 <servlet-mapping>을 추가해준다.




<servlet>에 댓글 Controller을 추가한다.



<servlet-mapping>에 댓글의 명령어를 추가한다.






3. 실행 결과





4번이라는 제목의 글에 댓글을 작성할 것이다. 로그인을 하지 않았을 경우 댓글 작성 부분이 보이지 않는다.





로그인을 하면 댓글 작성이 가능하다. 댓글 작성 후 [댓글등록]을 누른다.





댓글이 등록된 것을 확인할 수 있다.





로그아웃할 경우 댓글은 보이지만 댓글 작성 부분은 사라진다.




4. 소스코드 다운로드 (war 파일)



JSP_DEV.war



RSS구독 링크추가 트위터 이메일 구독