본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 60일차 (2023-08-16) 자바 프로그래밍_57. 파일 업로드 다루기 - multipart/form-data POST 요청 파라미터 인코딩(계속)_개인프로젝트 - 마트 관리 시스템

by prometedor 2023. 8. 16.
## 57. 파일 업로드 다루기 - multipart/form-data POST 요청 파라미터 인코딩

- apache.org의 라이브러리를 이용하여 multipart/form-data 파라미터를 다루는 방법
- 네이버클라우드 mysql DBMS 사용하기

 

BoardDetailServlet.java

ㄴ 첨부파일 삭제하는 버튼 생성하기

=>

서버 Start

=>

ㄴ [삭제] 버튼 추가됨을 확인

ㄴ [삭제] 버튼 선택

=>

=>

ㄴ BoardDeleteServlet.java 파일 복사

=>

ㄴ BoardFileDeleteServlet 이라는 이름으로 handler 패키지에 붙여넣기

=>

BoardFileDeleteServlet.java

ㄴ /board/delete -> /board/file/delete 로 경로 변경

=>

BoardFileDeleteServlet.java

ㄴ fileNo 추가

=>

BoardFileDeleteServlet.java

ㄴ 이후에 findFileBy 라는 메서드를 생성할 것

=>

BoardFileDeleteServlet.java

ㄴ 이후에 AttachedFile 에 BoardNo 를 추가할 것

=>

BoardFileDeleteServlet.java

ㄴ 로그인 한 작성자가 작성한 게시글의 첨부파일만 삭제 가능하도록 함

=>

BoardFileDeleteServlet.java

ㄴ 해당 코드 제거

=>

BoardFileDelete.java

ㄴ delete(b) -> deleteFile(fileNo) 로 변경

ㄴ 이후에 boardDao 인터페이스에 deleteFile 메서드 정의 추가해줄 것

ㄴ 게시글 -> 첨부파일로 변경

=>

BoardFileDelete.java

ㄴ 실행 후 해당 글의 상세보기로 이동하도록 함

=>

BoardDetailServlet.java

ㄴ category 도 받아주도록 함

=>

BoardDetailServlet.java

ㄴ Board board = InitServlet.boardDao.findBy(Integer.parseInt(request.getParameter("category")), Integer.parseInt(request.getParameter("no"))); -> 각각 분리하여 변수에 넣어주도록 함

=> 아래 쪽에서도 쓰이기 때문

 

BoardDetailServlet.java

ㄴ 위에서 분리한 category 이용

=>

ㄴ 서버 Restart

=>

ㄴ 브라우저 새로고침하면 500 에러가 발생하지만 url 값이 제대로 넘어가는지만 확인

=>

report-common 

BoardDao.java

ㄴ BoardDao 인터페이스에서 정의되지 않은 findFileBy 메서드를 정의하도록 함

=>

MySQLBoardDao.java

ㄴ 이미 존재하는 findBy 메서드를 복사하여 활용하여 findFileBy 메서드 구현하기

=>

MySQLBoardDao.java

=>

MySQLBoardDao.java

ㄴ 해당 코드 제거

=>

MySQLBoardDao.java

=>

BoardDao.xml

ㄴ 이미 존재하는 findBy 를 복사하여 활용하여 findFileBy 구현하기

=>

BoardDao.xml

ㄴ 이후 attachedFileMap 이라는 resultMap 을 추가할 것임

=>

BoardDao.xml

ㄴ 쿼리문 수정

=>

BoardDao.xml

ㄴ attachedFileMap 이라는 resultMap 생성

 

 

AttachedFile.java

ㄴ boardNo 추가

=>

AttachedFile.java

ㄴ Getter/Setter 추가

=>

=>

BoardDao.xml

ㄴ board_no -> boardNo 로 변경

    => 프로퍼티 값이 boardNo 이기 때문

=>

BoardFileDelete.java

ㄴ 주석처리 해두기

=>

BoardFileDelete.java

ㄴ attachedFile 출력해보기 위한 출력문 추가

=>

AttatchedFile.java

ㄴ attachedFile 출력하기 위해 toString() 생성하기

=>

=>

AttachedFile.java

=>

ㄴ 서버 Restart 해주기

=>

로그인 후 게시글 상세보기

=>

ㄴ [삭제] 선택

=>

=>

ㄴ 콘솔 창에 AttachedFile 값 정상적으로 출력됨을 확인

 

BoardFileDelete.java

ㄴ board 출력해 보기 위한 코드 추가

=>

Board.java

ㄴ board 출력하기 위한 toString 메서드 추가

=>

Board.java

=>

Board.java

=>

ㄴ 서버 Start 해주기

=>

=>

ㄴ board 값이 정상적으로 출력됨을 확인

 

 

ㄴ 직원1 로 로그인 되어있는 상태

=>

ㄴ 직원2 가 작성한 글의 첨부파일 [삭제] 선택

=>

=>

BoardFileDelete.java

ㄴ 해당 코드 주석 풀어주기

=>

BoardFileDelete.java

ㄴ Create method 'deleteFile(int)' in type 'BoardDao' 선택하여 BoardDao 인터페이스 메서드 정의하기

=>

BoardDao.java

=>

MySQLBoardDao.java

=>

MySQLBoardDao.java

ㄴ delete 메서드를 복사하여 활용하여 deleteFile 메서드 구현하기

=>

BoardDao.xml

ㄴ delete 를 복사하여 활용하여 deleteFile 생성

=>

BoardDao.xml

=>

ㄴ 서버 Restart 해주기

=>

ㄴ [삭제] 선택

=>

ㄴ 첨부파일 1개가 삭제됨을 확인

 

 

BoardFormServlet.java

ㄴ 해당 코드 복사하기

=>

BoardDetailServlet.java

ㄴ 복사한 코드 붙여넣기

=>

ㄴ [파일 선택] 버튼 생성됨

 

 

BoardDetailServlet.java

ㄴ 인코딩 타입을 multipart/form-data 로 변경해주기

 

 

BoardAddServlet.java

ㄴ 해당 코드 복사하기

=>

BoardUpdateServlet.java

ㄴ 복사한 코드 붙여넣기

=>

BoardUpdateServlet.java

ㄴ 해당코드 아래쪽으로 이동시키기

=>

BoardUpdateServlet.java

ㄴ 해당코드 아래쪽으로 이동시키기

=>

BoardUpdateServlet.java

ㄴ 해당 코드 위쪽으로 이동시키기

=>

BoardUpdateServlet.java

ㄴ 필요없는 변수는 제거하도록 함

=>

BoardUpdateServlet.java

ㄴ 해당 코드 제거

=>

BoardUpdateServlet.java

ㄴ 해당 코드 제거

=>

BoardUpdateServlet.java

ㄴ no 도 추가

=>

BoardUpdateServlet.java

ㄴ out.printf("<meta http-equiv='refresh' content='1;url=/board/list?category=%d'>", category); 처럼 html 태그를 이용하는 대신 응답헤더에 추가하는 방식을 이용하도록 함

=>

BoardUpdateServlet.java

ㄴ 해당 코드는 이제 제거

=>

BoardUpdateServlet.java

ㄴ 주석 깔끔하게 제거

=>

BoardUpdateServlet.java

ㄴ 게시글을 정상적으로 변경했으면, 그 게시글의 첨부파일을 추가하도록 함

=>

ㄴ 서버 Restart 해주기

=>

=>

ㄴ [변경] 선택

=>

ㄴ 첨부파일 추가되어 변경됨을 확인

 

 

=>

ㄴ 첫 번째 첨부파일 [삭제] 선택

=>

ㄴ 새로운 파일 첨부 후 [변경] 선택

=>

ㄴ 정상적으로 변경됨을 확인

 

 

ㄴ 두 번째 파일 [삭제] 선택

=>

ㄴ 정상적으로 삭제됨을 확인