- DBCP 방식
- 댓글 기능, 자료실 (업로드, 다운로드)
- request, session 객체 공유 설정
- Controller 클래스 : Java Servlet
- Service, DTO, DAO 클래스, Model (Service + DAO)
- View (화면 인터페이스) : EL, JSTL 사용
프로그램 구조
Java Resources > src |
Controller | BoardFrontController.java | Controller 클래스 |
model | BoardBean.java | DTO 클래스 | |
dao | BoardDAO.java | DAO 클래스 | |
service | Action.java | Action 인터페이스 | |
ActionForward.java | ActionForward 클래스 | ||
BoardAddAction.java | 글작성 | ||
BoardListAction.java | 글목록 | ||
BoardDetailAction.java | 글내용 (상세페이지) | ||
BoardReplyAction.java | 댓글 폼 | ||
BoardReply.java | 댓글작성 | ||
BoardModifyAction.java | 글수정 폼 | ||
BoardDeleteAction.java | 글삭제 폼 | ||
BoardDelete.java | 글삭제 | ||
WebContent | board | qna_board_write.jsp | 글작성 폼 |
qna_board_list.jsp | 글목록 출력 | ||
qna_board_view.jsp | 글내용 출력 | ||
qna_board_reply.jsp | 답변글 폼 | ||
qna_board_modify.jsp | 글수정 폼 | ||
qna_board_delete.jsp | 글삭제 폼 | ||
file_down.jsp | 다운로드 | ||
boardupload | 첨부파일 저장위치 | ||
WEB-INF > lib |
cos.jar jstl-1.2jar ojdbc6.jar |
라이브러리 | |
META-INF | context.xml | 커넥션 풀 | |
sql | board.sql | DB | |
index.jsp | 인덱스 |
MVC 구조
service > BoardReplyAction.java 생성
Action을 상속받고 메소드 오버라이딩을 진행한다.
ActionForward 객체를 forward 라는 이름으로 생성하고, return 값을 forward로 설정한다.
에러 발생 지점을 파악하기 용이하도록 콘솔 메시지로 클래스명을 출력한다.
BoardFrontController.java
else if로 이어서 댓글 폼 관련 문서 연결에 대한 내용을 작성한다.
다시 서비스 클래스 BoardReplyAction.java로 돌아온다.
먼저, 글내용-상세페이지에서 board_num, page 값을 받아온다
부모 글에서 상세 정보를 구해오기 위한 DAO 객체를 생성해 DB에 연결해서
상세 정보를 구해오는 메소드 getDetail() 를 호출한다. 매개변수는 board_num이다.
여기서 구해온 부모글에서 필요한 정보를 공유한다. (내용이 담긴 board, page)
마지막으로 포워딩 방식을 설정하고, 메소드 실행으로 정보를 구한 후 넘어갈 뷰 페이지 경로를 설정한다.
qna_board_reply.jsp 생성
qna_board.write.jsp의 내용을 그대로 복사-붙여넣기 하고,
필요한 부분을 수정, 삭제한다.
수정하기 이전 복-붙이 잘 되었는지 확인해본다.
댓글 작성의 파일 첨부 기능은 삭제하기로 했다.
하단의 파일첨부 양식과 폼 태그의 enctype을 함께 삭제해야 한다.
파일첨부 양식이 없는데 enctype을 지우지 않으면 에러가 발생한다.
폼 태그의 action 값이 /BoardAddAction.do"로 되어 있는데,
이것을 /BoardReply.do"로 수정한다.
폼 태그 하단에 히든객체를 추가하여 총 5개의 값을 넘긴다.
board_num, page, 그리고 부모글과 관련된 정보인 re_ref, re_lev, re_seq 이다.
페이지 레이아웃을 이루는 테이블의 제목 입력양식의 value 값에 re. 가 기본값으로 표시되도록 한다.
service > BoardReply.java 생성
Action을 상속받고 메소드 오버라이딩을 진행한다.
ActionForward 객체를 forward 라는 이름으로 생성하고, return 값을 forward로 설정한다.
에러 발생 지점을 파악하기 용이하도록 콘솔 메시지로 클래스명을 출력한다.
BoardFrontController.java
else if로 이어서 댓글 작성 관련 문서 연결에 대한 내용을 작성한다.
다시 서비스 클래스 BoardReply.java로 돌아온다.
먼저 댓글 작성 폼의 본문 content에 한글이 포함되어 있기 때문에
request 객체로 한글 인코딩 설정을 해야 한다.
앞선 페이지에서는 총 9가지 값이 넘어와야 한다.
댓글작성 폼에서 hidden 객체로 넘겨준 5개의 값과
작성 폼에서 입력한 글쓴이, 비밀번호, 제목, 내용 4개의 값이다.
9개를 받아와 그 중 페이지를 제외하고 DTO 객체에 저장한다.
DB연결을 위한 DAO 객체를 생성한다.
작성폼에서 입력한 정보가 담긴 board를 매개변수로,
작성한 댓글의 내용을 db에 저장하는 boardReply 메소드를 호출한다.
메소드 호출에 성공하면 result 변수에 1을 받아와 콘솔창에 메시지를 출력한다.
그리고 포워딩 방식을 설정하고 목록 페이지로 돌아갈 수 있도록 경로를 지정한다.
이 때, 진입했던 페이지의 목록으로 돌아갈 수 있도록 앞서 qna_board_reply.jsp 에서부터 받아온 page 변수를 활용한다.
DAO > boardReply(board) 메소드 생성
먼저 메소드 상단에 부모글에 대한 정보를 받아 온다
SQL 문이 두번 들어간다.
1)
부모글과 ref 값이 같으면서 seq 값이 큰 기존의 글들은 seq값을 1 증가 시킨다.
2)
새로 작성하여 db에 들어가는 글에 대한 내용이다.
작성한 댓글을 db에 삽입하는 SQL문이다.
메소드 전체
댓글을 작성해본다.
a 글에 대한 두번째 댓글을 달아본다.
3번째 댓글도 달았다. (캡쳐 생략)
이번에는 두번째 댓글에 1대댓글을 달아본다.
'JSP > model 2' 카테고리의 다른 글
MVC 게시판 (7) - 글삭제 (0) | 2022.09.23 |
---|---|
MVC 게시판 (6) - 글수정 (0) | 2022.09.22 |
MVC 게시판 (4) - 글내용-상세페이지 (0) | 2022.09.21 |
MVC 게시판 (3) - 글목록 (1) | 2022.09.21 |
MVC 게시판 (2) - 글작성 (0) | 2022.09.21 |