*** 자료실
* 주요 기능
1. Connection Pool
2. 액션태그 <jsp:useBean> <jsp:setProperty>
3. DTO, DAO 클래스
4. 페이징 처리 ( inline View )
5. 첨부파일 업로드 -> cos.jar 라이브러리 이용 (중복 처리)
1. writeForm.jsp
- 파일은 글씨보다 용량이 크기 때문에, method="post" 방식을 이용해야 함
- 파일을 MultipartRequest 객체로 받기 위해 enctype="multipart/form-data" 을 추가함
<form method="post" name="writeform" action="writePro.jsp" enctype ="multipart/form data">
2. writePro.jsp
- cos.jar 라이브러리를 import -> 파일명 중복 해결 위한 라이브러리
<%@ page import="com.oreilly.servlet.MultipartRequest" %>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
- upload 디렉토리의 실제 경로(path)를 구해 문자열 변수에 저장
String path=request.getRealPath("upload"); //폴더명을 기입
System.out.println("path="+path);
--> path=E:\eclipse-workspace\.metadata\.plugins\... 이것
- 첨부파일의 크기를 설정 (단위: byte)
int size = 10*1024*1024; ---> 1byte=2^10=1024 ---> 10*1024*1024=10MB
try{
- 첨부파일은 MultipartRequest 객체를 생성하면서 동시에 업로드됨
MultipartRequest multi=new MultipartRequest(request, path, size, "utf-8", new DefaultFileRenamePolicy());
(파일을 업로드할 리퀘스트 객체, 저장될 실제 경로, 파일 최대 용량, 문자 인코딩 타입, 중복인 파일명 변경 객체)
첫번째 매개변수는 HttpServletRequest의 request : 웹브라우저 사용자인 클라이언트로부터 서버로 요청이 들어오면 서버에서는 HttpServletRequest 를 생성하며, 요청정보에 있는 패스로 매핑된 서블릿에게 전달
- 텍스트 뿐 아니라 파일을 함께 보내야 하기 때문에(멀티파트) 액션태그 사용할 수 없음
+) MultipartRequest 클래스의 getParameter 메소드를 이용해서 값을 얻어와야 함
(form에서 enctype="multipart/form-data"을 지정했기 때문에 request 클래스로는 받아올 수 없음
--> 만약 request로 굳이 받고 싶다면, method="get" 방식으로 보내자)
String writer=multi.getParameter("writer"); .......
- 파일은 원래 파일명/서버에 저장된 파일명이 분리됨 (중복일 경우가 있으므로)
//클라이언트가 업로드한 파일명=원래 파일명
String upload0=multi.getOriginalFileName("upload"); //파일명을 정확히 알고있을 때 사용
//실제 서버에 저장된 파일명
String upload=multi.getFilesystemName("upload"); //DB로 넘길땐 얘를 사용할 것
- 얻어온 값들을 DTO에 저장
3. updatePro.jsp
- 다른 파일로 수정을 했다면 새로 업로드, 수정하지 않은 경우 값 유지하도록 처리
BoardDBBean dao=BoardDBBean.getInstance();
BoardDataBean old=dao.getContent(num); //첨부파일 수정 여부 판단 위해 불러옴
if(upload!=null){ //파일명 받은 게 있다 = 파일을 수정했다
board.setUpload(upload); //수정한 파일명을 DTO에 저장
} else { //파일명 받은 게 없다 = 파일 수정 없다 = 기존 파일 사용
board.setUpload(old.getUpload()); //기존 파일명을 DTO에 저장
}
※ 글 수정 시 result=0이 반환되는 오류 (sql문이 실행되지 않았다는 뜻)
---> 자료실의 경우, 값을 받을 때 useBean이 아니라 multi.getParameter를 사용해 값을 받기 때문에, DTO에 자동으로 값이 할당되지 않아 직접 값을 넣어줘야 함 ---> num도 예외없이 넣어줘야 함!
나는 num 값을 DTO에 할당해주지 않았기 때문에 sql문이 제대로 실행되지 않았던 것.
'수업 > 정리' 카테고리의 다른 글
220324 model2_ JavaServlet, 표현언어(EL) (0) | 2022.03.24 |
---|---|
220323 자료실3_삭제(첨부파일) , model2_Java Servlet (0) | 2022.03.23 |
220321 답글3_수정,삭제 자료실1_업로드(테스트) (0) | 2022.03.21 |
220318 답글 게시판2_답글 (0) | 2022.03.18 |
220317 답글 게시판1_원글 (0) | 2022.03.17 |