이전 글에서는 게시판을 만들어 보았습니다.
이번 글에서는 게시판의 글쓰기를 구현해 보겠습니다.
순서는
- 글 목록창(listArticles.jsp)에서 글쓰기 창을 요청합니다.
- 글쓰기창에서 글을 입력하고 컨트롤러에 /board/addArticle.do로 글쓰기를 요청합니다.
- 컨트롤러에서 Service 클래스로 글쓰기창에서 입력한 글 정보를 전달해 테이블에 글을 추가합니다.
- 새 글을 추가하고 컨트롤러에서 다시 /board/listArticles.do로 요청하여 전체 글을 표시합니다.
클래스와 jsp를 구현하기 전에 프로젝트 WebContent\lib 폴더에 파일 업로드와 관련된 라이브러리를 미리 복사해 붙여 넣습니다. 그리고 이미지 파일 저장소인 C:\board\article_image 폴더를 만듭니다.
파일 업로드 관련 라이브러리 다운로드 설명은 아래를 보시면 됩니다.
JSP 파일 업로드 라이브러리 설치
파일 업로드 기능을 사용하려면 오픈 소스 라이브러리를 설치해야 합니다. 파일 업로드 라이브러리르 설치하는 과정은 다음과 같습니다. jakarta.apache.org 로 접속후 Commons를 선택해주세요 내리시다 보면 위..
windorsky.tistory.com
컨트롤러를 담당하는 BoardController 클래스를 다음과 같이 작성하겠습니다.
action 값이/articleForm.do면 글쓰기창을 브라우저에 표시하고, action 값이 /addArticle.do면 다음 과정으로 새 글을 추가합니다. upload() 메서드를 호출해 글쓰기창에서 전송된 글관련 정보를 Map에 key/value 쌍으로 저장합니다.
파일을 첨부한 경우 먼저 파일 이름을 Map에 저자한 후 첨부한 파일을 저장소에 업로드합니다. upload() 메서드를 호출한 후에는 반환한 Map에서 새 글 정보를 가져옵니다. 그런 다음 Service 클래스의 addAtricle() 메서드 인자로 새 글 정보를 전달하면 새 글이 등록됩니다.
BoardDAO클래스의 insertNewArticle() 메서드를 호출하면서 글 정보를 인자로 전달합니다.
insertNewArticle() 메서드의 SQL문을 실행하기 전에 getNewArticleNo() 메서드를 호출해 새 글에 대한 글 번호를 먼저 가져옵니다.
다음은 글쓰기와 관련된 JSP 페이지를 작성할 차례입니다. listArticles.jsp를 다음과 같이 작성합니다.
articleForm.jsp를 다음과 같이 작성합니다. 쇼핑몰 게시판에 글을 쓸 때는 보통 사진을 첨부하는 경우가 많습니다. 이처럼 글쓰기 작업을 할 때 첨부 파일도 같이 업로드할 수 있도록 반드시 <form>태그의 enctype속성을 multipart/form-data로 설정합니다.
/board/listArticle.do로 글 목록창을 요청한 후 다시 글쓰기를 클릭해 board/articleForm.do로 글쓰기 창을 요청합니다. 그리고 글쓰기 창에서 "상품후기입니다."라는 새 글을 작성하고 글쓰기를 클릭해/board/addArticle.do로 요청합니다.
글쓰기를 누르면 다음과 같은 창이 뜨고 파일을 선택할 수도 있습니다.
파일을 첨부해서 글을 쓰면 우리가 처음에 만들어 주었던
C:\board\article_image 에 파일이 업로드 됩니다.
하지만 이 글쓰기 기능에는 한 가지 문제가 있습니다.
바로 새 글에 첨부한 파일들이 같은 폴더에 저장된다는 것이빈다. 얼핏 보기엔 큰 무넺가 아닌것 같지만 이렇게 저장하면 다른 사용자가 첨부한 파일과 이름이 같아 구별하기가 어렵습니다.
따라서 이번에는 업로드한 파일이 각각의 글 번호를 이름으로 하는 폴더를 생성하고, 저장까지 할 수 있도록 구현해 보겠습니다.
과정은 다음과 같습니다.
- 글쓰기창에서 새 글 전송시 컨트롤러의 upload()메서드를 호출해 새 글 정보를 Map으로 반환받고 첨부한 파일은 임시로 temp 폴더에 업로드한다
- 컨트롤러는 Service 클래스의 addNewArticle() 메서드를 호출하면서 새 글 정보를 인자로 전달해 테이블에 추가한 후 새 글 번호를 반환받습니다.
- 컨트롤러에서 반환 받은 새 글 번호를 이용해 파일 저장소에 새 글 번호로 폴더를 생성하고 temp폴더의 파일을 새 글 번호 폴더로 이동합니다.
BoardController 클래스를 다음과 같이 작성합니다. upload() 메서드를 호출해 첨부한 파일을 temp 폴더에 업로드한 후 새 글정보를 Map으로 가져옵니다. 그리고 새 글을 테이블에 추가한 후 반환 받은 새 글 번호로 폴더를 생성하고 temp폴더의 이미지를 새 글 번호 폴더로 이동합니다.
BoardService 클래스를 다음과 같이 작성합니다. addArticle() 메서드의 반환 타입을 int로 변경합니다. 그리고 BoardDAO의 insertNewArticle() 메서드를 호출해 새 글 번호를 받아서 반환합니다.
BoardDAO 클래스에서는 insertNewArticle() 메서드를 호출해 SQL문을 실행한 후 새 글 번호를 반환합니다.
다음 글에서는
글 상세 기능을 구현해 보도록 하겠습니다
GITHUB: github.com/soulwine-it
'2020 > JSP SERVLET' 카테고리의 다른 글
글 수정 기능 구현 (0) | 2020.01.03 |
---|---|
글 상세 구현 (0) | 2020.01.03 |
모델 2 답변형 게시판 구현(게시판 테이블 생성) (0) | 2020.01.02 |
MVC 회원 정보 수정 및 삭제 기능 구현 (0) | 2019.12.30 |
MVC 회원 정보 추가 기능 (0) | 2019.12.30 |