본문으로 바로가기

[JSP개발] 게시판 - 방명록 삭제

category 코딩/JSP 2016. 12. 29. 19:32







1. 개요







이번에는 방명록 삭제를 구현할 것이다. 추가되는 java와 jsp는 위와 같다. 


방명록 삭제 화면은 답글 화면과 마찬가지로 팝업창으로 나타나게 할 것이다. 그리고 삭제 시 비밀번호를 입력하게 할 것인데 여기서 비밀번호가 일치하는지 확인은 Ajax를 이용해 구현할 것이다.



 JSP

  • GuestbookForm.jsp : 방명록 화면에는 삭제 클릭 시 삭제 창을 open 하는 코드를 추가한다.

  • GuestbookDeleteForm.jsp : 방명록 삭제 창이다. 팝업창으로 나타나며, 비밀번호를 입력하고 삭제 클릭 시 방명록이 삭제된다. 만약 입력한 비밀번호가 잘못되었을 시 경고 창을 띄운다.


 Java

  • GuestbookDeleteFormAction.java : 방명록 삭제 화면을 표시하는 Action이다.

  • GuestbookDeleteAction.java : 방명록 삭제 Action이다. 

  • GuestbookDAO.java : DAO에는 비밀번호를 가져오는 메서드와 방명록 삭제 메서드를 추가한다.




2. 소스 코드



■ GuestbookForm.jsp




[삭제] 클릭 시 삭제 창이 나타나게 하는 함수이다. 답글 창과 마찬가지로 부모창(방명록) → 자식창(삭제 창) → 부모창(방명록) 이런 순서로 동작하도록 하였다. 


삭제 창을 띄울 시 필요한 정보인 방명록 글 번호를 전달한다.




[삭제] 클릭 시 이벤트와 함수를 추가한다. 





■ GuestbookDeleteFormAction.java




삭제 창을 띄워주는 GuestbookDeleteFormAction에서는 글 번호를 가져와 requset에 세팅한다. 그리고 다음 경로에는 삭제 창인 GuestbookDeleteForm.jsp를 지정해 준다.





■ GuestbookDeleteForm.jsp


방명록 삭제 화면이다. 삭제 시 글의 비밀번호를 입력하게 한다. 만약 입력된 비밀번호가 틀리다면 경고 창을 띄운다. 비밀번호가 맞는다면 글을 삭제하고 삭제 화면을 닫는다.




삭제 화면에 html 부분을 보자. GuestbookDeleteFormAction에서 넘겨받은 글 번호를 hidden으로 세팅한다.(96줄) 나중에 글을 삭제할 때 필요한 정보이지만 화면에 보여줄 필요가 없기 때문이다.


그리고 삭제 버튼 클릭 시 checkValue( )라는 함수가 실행되도록 한다. 창닫기 버튼을 클릭하면 삭제 화면이 닫히도록 한다.




스크립트를 보기 전에 전체적인 실행 모습을 보자. 


먼저 삭제 버튼을 클릭하면 onclick 이벤트가 발생한다. 그러면 checkValue( )가 실행이 된다. checkValue( )에서는 먼저 비밀번호 입력 여부를 확인한다. 비밀번호 미입력시 경고 창을 띄운다. 비밀번호가 입력되었다면 글 번호와 함께 GuestbookDeleteAction으로 전달한다. 


전달 후 checkFunc( )가 호출되고, GuestbookDeleteAction(서버 측) 에서 넘겨받은 처리결과에 따라 다음 작업을 진행하게 된다.




스크립트의 첫 부분을 보면 XMLHttpRequest 객체를 생성하는 함수가 있다. getXMLHttpRequest( )에서는 XMLHttpRequest 객체를 생성하는 작업을 하는데, 브라우저에 따라 객체 생성을 달리해준다. 




다음으로 checkValue( ) 부분을 보자. 일단 비밀번호가 입력되었는지 확인을 한다. (50~53줄) 비밀번호가 입력되지 않았다면 경고 창을 띄운다.




비밀번호가 입력되었다면 Ajax를 이용하여 서버에 전달을 한다. 


58줄에서 getXMLHttpRequest( )를 호출하여 XMLHttpRequest 객체를 생성한다. 그리고 59줄에서 XMLHttpRequest의 상태변화에 따라 호출될 함수를 지정한다. 호출될 함수는 checkValue( )이다.


다음으로 60줄과 62줄을 보자. open( ) 함수에서는 요청 방식, URL, 동기화 방식을 지정한다. 여기에서는 POST 방식을 사용하며 전송할 URL은  GuestbookDeleteAction.ge이다. 다음으로 true로 입력했는데, 이것은 동기화 방식을 비동기로 한다는 것이다.


send( )는 서버에 요청을 전송하는 함수이다. 인자 값으로 null 또는 파라미터 값을 입력받는다. GET 방식으로 전달할 경우 인자 값을 null로 POST 방식으로 전달할 경우 전달할 데이터를 인자로 주면 된다.


위에서는 방명록 글 번호와 비밀번호를 send( )의 인자로 주었다.




XMLHttpRequest의 상태변화에 checkValue( )가 호출이 된다. XMLHttpRequest의 상태 값은 0, 1, 2, 3, 4가 있다. 보통 상태 값 중 4가 사용되는데 이것은 서버로부터 데이터를 전부 받은 상태를 말한다.


상태 값이 4이면 69줄에서 서버로부터 넘어온 데이터를 가져온다. 만약 데이터가 0이면 비밀번호가 잘못된 경우이므로 경고 창을 띄우고, 데이터가 0이 아니라면 글을 삭제한다. 삭제 후 방명록 화면을 새로 고침(76줄) 하고 삭제 창을 닫는다.





■ GuestbookDeleteAction.java




삭제 화면에서 넘어온 파라미터 값들을 가져온다. 그리고 방명록 글 번호를 이용하여 DB에서 비밀번호를 가져온다.




DB의 비밀번호와 화면에서 입력된(파라미터로 넘어온) 비밀번호를 비교한다. 같지 않을 경우 화면으로 0 값을 전달한다.




비밀번호가 일치할 경우 글 삭제를 한다. 삭제가 성공하면 방명록 화면으로 이동되도록 한다.





■ GuestbookDAO.java


DAO에는 비밀번호를 가져오는 메서드와 방명록 삭제 메서드를 추가한다.




getPassword( ) 메서드는 방명록 글 번호를 입력받아 해당 글의 비밀번호를 리턴한다.




deleteGuestbook( ) 메서드는 방명록 글 번호를 입력받아 해당 글을 삭제한다.


274 ~ 277줄의 쿼리를 보자. 이 부분은 서브쿼리로 방명록의 START WITH 절에서 방명록 글 번호를 입력받고 그것을 이용해 계층을 이루는 방명록 글번호(guestbook_no)를 모두 찾는다. 이후 이 값들을 DELETE 절에서 삭제를 하게 된다.




쿼리가 정상적으로 실행되면 commit을 진행한다.





■ GuestbookCommand.properties


프로퍼티에는 방명록 삭제 관련 명령어를 추가한다.





3. 실행 결과





방명록 화면에서 이름이 답변3인 글을 삭제할 것이다.





[삭제]를 클릭하면 삭제 창이 뜬다. 비밀번호를 아무 값이나 입력하면 비밀번호가 틀리다는 경고 창이 뜬다. 정확한 비밀번호를 입력하면 글이 삭제되고 창이 닫힌다.





답변3이 삭제된 것을 볼 수 있다.





다음으로 삭제test를 삭제할 것이다.





삭제test를 삭제하면 답글인 답변2도 같이 삭제가 된것을 확인할 수 있다.




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



JSP_DEV.war




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