일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- IndexedDB
- java
- spring boot
- 초보 개발자
- 자바스크립트
- chart.js
- 자바
- JavaScript
- ui인터페이스
- jsp
- 상태값 저장 유지
- @requstbody
- 게시판
- 데이터 시각화
- thymeleaf
- github
- MYSQL
- tomcat
- css
- vscode
- 실시간 상태값 저장
- html
- git
- Eclipse
- vsc
- open in browser
- resutful api
- 자바빈
- 여러 종류의 사용자 정의 함수
- chart.js 라이브러리
- Today
- Total
수월한 IT
19장 댓글 처리 본문
이제 마지막으로 댓글 처리를 해 보도록 하겠습니다. 전체적인 프로그램의 흐름이나 처리 내용은 게시판 입력과 거의 동일합니다. 단지, 다른점이 하나 있다면 댓글이 저장될 때 자신의 원본글의 serial 번호를 pSerial 컬럼에 저장해야 한다는 것입니다. 그렇게 저장되어야 계층형 쿼리를 사용하여 목록을 나열할 때 이상이 없이 나열 됩니다.
이점을 염두해 두고 프로세스를 이해해 주시기 바랍니다.

1. 사용자가 상세보기(view.jsp) 페이지에서 댓글 달기 버튼을 클릭합니다.
2. 자바스크립트(board.js)에 의해서 댓글폼 화면이 실행됩니다.
// 댓글 버튼 클릭시 if($id('btnRepl') != null){ let btn = $id('btnRepl'); btn.onclick = function(){ let frm = $id('frmInput'); frm.action = url + 'repl.jsp'; frm.submit(); } }
3. 댓글 달기(repl.jsp)에서 댓글 저장 버튼을 클릭합니다.
... <div id='btnZone'> <input type='button' value='저장' id='btnReplR' /> ... </div> ...
4. 댓글 저장 버튼이 클릭되면 file_upload.js 스크립트에서 파일을 업로드할 정보와 저장할 내용을 가지고 result.jsp 페이지를 호출합니다. 이부분은 입력, 수정, 삭제 부분과 동일합니다. 단지, 다른점은 파라미터 job=replR이 전달되는 것입니다.
<script> upload.start('frmInput' , 'btnAttach', 'btnReplR', 'attachList', './board/result.jsp?job=replR') </script>
5. result.jsp 에서 생성된 BoardController는 job=replR을 전달받기 때문에 이해 해당하는 BoardDao의 repl() 메서드를 호출하여 댓글 저장 작업을 하게 됩니다.
public class BoardController { ... public BoardController(HttpServletRequest req, HttpServletResponse resp) { this.req = req; this.resp = resp; dao = new BoardDao(); String job = ""; //요청 정보에 따른 url 얻어오기 job = req.getParameter("job"); if(job != null) { switch(job) { ... case "replR" : replR();break; } } } public void replR() { String msg = dao.repl(req); req.setAttribute("msg", msg); } ... }
6. BoardDao의 repl()메서드에서는 댓글을 테이블에 저장하고, 첨부파일과 첨부파일 정보를 첨부파일 테이블에 저장한 후 그 결과를 다시 result.jsp에 전달하는 것으로 댓글의 처리 과정이 종료됩니다.
public class BoardDao { ... public String repl(HttpServletRequest req) { String msg = "댓글이 작성되었습니다."; BoardVo vo = null; List<AttVo> list = null; int cnt = 0; try { FileUpload upload = new FileUpload(req); upload.uploading(); vo = (BoardVo) req.getAttribute("vo"); list = (List<AttVo>)req.getAttribute("attList"); conn.setAutoCommit(false); sql = " insert into board(serial, mdate, pserial, worker, pwd, subject, content, hit) " + " values(seq_board.nextval, sysdate, ?, ?, ?, ?, ?, 0 ) "; ps = conn.prepareStatement(sql); ps.setInt(1, vo.getSerial()); ps.setString(2, vo.getWorker()); ps.setString(3, vo.getPwd()); ps.setString(4, vo.getSubject()); ps.setString(5, vo.getContent()); cnt = ps.executeUpdate(); if(cnt<1) throw new Exception("댓글 저장중 오류 발생"); //첨부파일 정보 저장 for(AttVo att : list) { sql = " insert into boardAtt(serial, pserial, oriAttFile, attFile) " + " values(seq_boardAtt.nextval, seq_board.currval, ?, ?) "; ps = conn.prepareStatement(sql); ps.setString(1, att.getOriAttFile()); ps.setString(2, att.getAttFile()); cnt = ps.executeUpdate(); if(cnt<1) throw new Exception("첨부파일 정보 저장중 오류 발생"); } conn.commit(); }catch(Exception ex) { ex.printStackTrace(); msg = ex.toString(); if(list !=null && list.size()>0) { deleteFile(list); } conn.rollback(); }finally { req.setAttribute("msg", msg); return msg; } } ... }
이것으로 댓글 처리에 대한 포스팅을 마치도록 하겠습니다.
[관련 동영상-게시물 댓글 달기(묵음)]
'프로젝트 > 자바 빈과 JSP만을 사용한 게시판 만들기' 카테고리의 다른 글
20장 후기 및 배포 파일정보 (0) | 2020.05.14 |
---|---|
18장 삭제 처리 (0) | 2020.05.10 |
17장 수정 처리 (0) | 2020.05.10 |
16장 상세보기및 파일 다운로드 (0) | 2020.05.10 |
15장 게시물 입력폼 만들기 (1) | 2020.05.10 |