목차
1. 댓글 게시판: 글 삭제
2. 첨부파일 테스트: 업로드 & 다운로드
3. 자료실 게시판: 글 작성
1. 댓글 게시판: 글 삭제
- 원문과 댓글의 삭제 처리를 구분한다.
- 원문인 경우 삭제를 하는 대신 내용을 지우고 삭제된 게시글임을 표시한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
public int delete(BoardDataBean board) {
int result = 0;
Connection con = null;
PreparedStatement pstmt = null;
String sql = "";
try {
con = getConnection();
if(board.getRe_level() == 0) { // 원문
sql = "update board set subject=?,content=? where num=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, "삭제된 게시글입니다.");
pstmt.setString(2, " ");
pstmt.setInt(3, board.getNum());
}else { // 댓글
sql = "delete from board where num=?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, board.getNum());
}
result = pstmt.executeUpdate(); // SQL문 실행
}catch(Exception e) {
e.printStackTrace();
}finally {
if(pstmt != null) try { pstmt.close(); } catch(Exception e) {}
if(con != null) try { con.close(); } catch(Exception e) {}
}
return result;
}
|
cs |
2. 첨부파일 테스트: 업로드 & 다운로드
1) 파일 업로드 라이브러리: cos.jar
- cos 라이브러리는 ‘com.oreilly.servlet’의 약자로, 파일 업로드를 위한 라이브러리이다.
• cos 라이브러리 다운로드와 설치
① 파일 업로드 모듈 COS 라이브러리 파일을 다운로드 받는다.
- 좌측 메뉴 'COS File Upload Library' 클릭 후, 다시 좌측의 com.oreilly.servlet을 클릭
② cos-26Dec20.08.zip 파일을 클릭하여 다운로드 받는다.
③ 다운로드 받은 파일을 압축 해제하고, ‘lib’ 폴더안에 있는 ‘cos.jar’ 파일을 ‘WebContent’ → ‘WEB-INF’ → ‘lib’ 폴더에 복사ᆞ붙여넣기한다.
2) cos 라이브러리 API
- 홈페이지에서 다운로드 받은 ‘cos-26Dec20.08.zip’ 파일을 압축 해제하면 ‘doc’ 폴더가 생성되는데, 이 폴더 안에 있는 ‘index.html’ 파일을 실행한다.
3) 업로드한 파일 저장 위치
C:\Users\82103\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\jsppro\upload
(개인이 저장한 위치에 따라 다름)
4) 중복 파일 처리 기능
- cos 라이브러리에는 중복 파일 업로드시 파일명을 바꿔서 중복을 처리해주는 기능이 있다.
- ex)
5) 전송 방식
- <form> 태그로 전송시 전송 방식은 ‘post’ 방식만 가능하다.
- <form> 태그 안에 ‘enctype’ 속성이 반드시 들어가야 한다.
- ex) <form action="fileUpload.jsp" method="post" enctype="multipart/form-data">
6) cos 라이브러리 클래스
- enctype 속성을 사용해서 값을 전달하게 되면, request나 <jsp:setProperty> 액션 태그로 값을 받을 수 없다.
- 이 경우, cos 라이브러리에서 제공하는 MultipartRequest 객체를 이용해서 값을 받는다.
- cos 라이브러리의 클래스는 import 되어야 한다.
<%@ page import="com.oreilly.servlet.MultipartRequest" %>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
• MultipartRequest: 클라이언트가 보낸 ‘multipart/form-data’ 타입의 post 요청을 분석해서 파일데이터에 접근하도록 하는 클래스
• DefaultFileRenamePolicy : 파일이 저장되는 디렉토리에 같은 이름을 가진 파일이 있으면 파일명뒤에 숫자를 붙여서 중복을 처리하는 클래스
7) cos 라이브러리 메소드
반환 타입 | 메소드명 | 설명 |
Enumeration | getFileNames() | <form> 태그의 요소 중, 'file' 속성을 가진 파라미터 이름을 반환 |
String | getParameter(name) | 파라미터의 이름을 매개변수로 하여 그 파라미터의 값을 반환 |
String | getOriginalFileName(name) | 클라이언트가 업로드한 원래의 파일명 즉, 중복 파일 처리 클래스인 DefaultFileRenamePolicy 클래스에 의해 파일명이 변경되기 전의 파일명을 반환 |
String | getFilesystemName(name) | 서버 상에 저장된 파일명을 반환 |
8) MultipartRequest 생성자
- API를 참고하면 MultipartRequest 클래스의 생성자가 오버로딩 되어있는데, 매개변수가 5개인 생성자를 사용하여 업로드 한다.
• 형식
MultipartRequest(javax.servlet.http.HttpServletRequest request, java.lang.String saveDirectory, int maxPostSize, java.lang.String encoding, FileRenamePolicy policy) |
• 파라미터
매개변수 | 설명 |
request | MultipartRequest와 연결된 request객체를 의미 |
saveDirectory | 업로드한 파일이 저장될 파일의 경로 |
maxPostSize | 한 번에 업로드할 수 있는 파일의 최대 크기 |
encoding | 파일의 인코딩 타입 |
policy | 파일 이름 중복 처리를 하기 위한 클래스 객체 |
• 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
// 업로드할 디렉토리 위치를 구해옴
String uploadPath=request.getRealPath("upload");
System.out.println("path="+uploadPath);
int size = 10*1024*1024; // 10MB 첨부파일의 크기(단위: Byte)
try{ // 첨부파일은 MultipartRequest 객체를 생성하면서 업로드된다.
MultipartRequest multi = new MultipartRequest(
request,
uploadPath, // 업로드할 디렉토리 위치
size, // 첨부파일의 크기 : 10MB
"utf-8", // 인코딩 타입
new DefaultFileRenamePolicy()); // 중복 문제 처리
|
cs |
3. 자료실 게시판: 글 작성
1) 글 작성 양식
- 일반 게시판과 형태는 같고, 첨부파일을 업로드하기 위한 양식이 추가된다.
- ex) <input type="file" size="40" name="upload" >
2) 글 작성 양식 값 받기
- 글 작성 양식에서 전달한 값을 받는 페이지에서는 MultipartRequest 객체를 생성한다.
- MultipartRequest 객체를 생성을 할 때 첨부파일이 업로드된다.
- 값을 전달받을 때는 request가 아닌 MultipartRequest 객체로 받아야 한다.
(ex. String writer = multi.getParameter("writer"); )
- <input type = “file”> 로 전달한 첨부파일 이름은 두 가지 메소드로 값을 받을 수 있다.
① String upload0 = multi.getOriginalFileName("upload");
→ 클라이언트가 업로드한 파일명(오리지널 파일명)
② String upload = multi.getFilesystemName("upload");
→ 실제 서버에 저장된 파일명
- 값을 받은 이후에는 DTO 객체를 생성해서 set() 메소드로 값을 메모리에 저장한다.
- DTO 객체를 생성해서 값을 임시 저장한 이후에는 DAO 객체를 생성해서 DB의 테이블에 값을 삽입(insert)시킨다.
'JSP' 카테고리의 다른 글
67일차: JSP 자료실 게시판(글 삭제) / Model1과 Model2 / 자바 서블릿_ 2021.09.16 (0) | 2021.09.16 |
---|---|
66일차: JSP 자료실 게시판(글 목록, 상세 페이지, 글 수정)_ 2021.09.15 (0) | 2021.09.15 |
64일차: JSP 댓글 게시판(상세 페이지, 댓글, 글 수정)_ 2021.09.13 (0) | 2021.09.13 |
63일차: JSP 댓글 게시판(글 쓰기, 목록, 상세 페이지)_ 2021.09.10 (0) | 2021.09.10 |
62일차: JSP 일반 게시판(글 수정, 삭제)_ 2021.09.09 (0) | 2021.09.09 |