차근차근 개발자 되기

JSP

65일차: JSP 댓글 게시판(글 삭제) / 첨부파일 테스트 / 자료실 게시판(글 작성)_ 2021.09.14

wellow 2021. 9. 14. 23:22

 

목차

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 != nulltry { pstmt.close(); } catch(Exception e) {}
            if(con != nulltry { con.close(); } catch(Exception e) {}
        }
        
        return result;
    }
cs

 

2.  첨부파일 테스트: 업로드 & 다운로드

 

1) 파일 업로드 라이브러리: cos.jar

- cos 라이브러리는 ‘com.oreilly.servlet’의 약자로, 파일 업로드를 위한 라이브러리이다.

 

cos 라이브러리 다운로드와 설치

① 파일 업로드 모듈 COS 라이브러리 파일을 다운로드 받는다.

   - http://www.servlets.com 접속

   - 좌측 메뉴 '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)시킨다.