반응형

  이전 글에서는 게시판을 만들어 보았습니다.

  이번 글에서는 게시판의 글쓰기를 구현해 보겠습니다.

  순서는

  • 글 목록창(listArticles.jsp)에서 글쓰기 창을 요청합니다.
  • 글쓰기창에서 글을 입력하고 컨트롤러에 /board/addArticle.do로 글쓰기를 요청합니다.
  • 컨트롤러에서 Service 클래스로 글쓰기창에서 입력한 글 정보를 전달해 테이블에 글을 추가합니다.
  • 새 글을 추가하고 컨트롤러에서 다시 /board/listArticles.do로 요청하여 전체 글을 표시합니다.

  클래스와 jsp를 구현하기 전에 프로젝트 WebContent\lib 폴더에 파일 업로드와 관련된 라이브러리를 미리 복사해 붙여 넣습니다. 그리고 이미지 파일 저장소인 C:\board\article_image 폴더를 만듭니다.

  파일 업로드 관련 라이브러리 다운로드 설명은 아래를 보시면 됩니다.

https://windorsky.tistory.com/entry/JSP-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%84%A4%EC%B9%98

 

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 

 

반응형
블로그 이미지

꽃꽂이하는개발자

,