web developer

[spring] 파일 관련 기능: 업로드, 다운로드, 게시글 등록 및 수정, 삭제 본문

Framework/Spring [java]

[spring] 파일 관련 기능: 업로드, 다운로드, 게시글 등록 및 수정, 삭제

trueman 2022. 1. 5. 14:18
728x90
728x90

src\main\webapp\WEB-INF\web.xml

<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/config/egovframework/springmvc/dispatcher-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>

    <!-- 240428 multipart 설정 -->
    <multipart-config>
        <max-file-size>31457280</max-file-size>   <!-- 30mb-->
        <max-request-size>1004857600</max-request-size>  <!-- 100mb -->
    </multipart-config> 
</servlet>

pom.xml

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>

(1-1) 파일 단일 업로드 기능

 

- javaScript

더보기
더보기
function modifyBoard() {
    var formData = new FormData($("#form")[0]);
    formData.append('imageFile', $('#imageFile')[0].files[0]); // 파일 추가

    for (var pair of formData.entries()) {
        console.log(pair[0]+ ', ' + pair[1]); 
    }
    // var formData = $("#form").serialize();
        
    $.ajax({
        type  : "POST",
        url    : "/boardUpdate.do",
        data: formData,
        dataType: "json",
        processData: false, // 파일 업로드 
        contentType: false, // 파일 업로드 
        success: function(result){
            if(result == 'Y') {
                alert("수정되었습니다.");
                location.href = "/boardList.do";
            }else {
                alert("수정이 실패하였습니다.");
            }
        },
        error: function(request, status, error) {
            alert("code = "+ request.status + " message = " + request.responseText + " error = " + error);
        }  
    });
}

- java

더보기
더보기
@ResponseBody
@RequestMapping("/boardUpdate.do")
public String updateSample(
    @RequestParam(value = "imageFile", required = false) MultipartFile singleFile,
    BoardVO boardVO,
    HttpServletRequest request, 
    HttpServletResponse response
) throws Exception {
    if (boardVO.getId() <= 0) {
        System.out.println("데이터가 없습니다.");
        return "board/list";
    }

    String str = null;
    try {
        // 1. 전송받은 파일 및 파일설명 값 가져오기
        System.out.println("file : " + singleFile);

        // 2. 저장할 경로 가져오기
        String path = request.getSession().getServletContext().getRealPath("file");
        String root = path + "\\uploadFiles" ;

        File file = new File(root);

        // 만약 uploadFiles 폴더가 없으면 생성해라 라는뜻
        if(!file.exists()) {
            file.mkdirs();
        } 

        // 업로드할 폴더 설정
        String originFileName = singleFile.getOriginalFilename();
        String ext = originFileName.substring(originFileName.lastIndexOf("."));
        String ranFileName = UUID.randomUUID().toString() + ext;
        File changeFile = new File(root + "\\" + ranFileName);

        // 파일 upload
        singleFile.transferTo(changeFile);


        // 수정내용 update 
        int cnt  = boardService.boardUpdate(boardVO);

        if(cnt > 0) {
            str = "Y";
            System.out.println("수정 성공");
        }else {
            str = "N";
            System.out.println("수정 실패");
        }
    } catch (IllegalStateException | IOException e) {
        System.out.println("파일 업로드 실패");
        e.printStackTrace();
    } catch (Exception e) {
        System.out.println("예외사항 발생");
        e.printStackTrace();
    }

    return str;
}

(1-2) 파일 다중 업로드 기능

 

- javaScript 

더보기
더보기
function modifyBoard() {
    var formData = new FormData($("#form")[0]);

    // 파일들을 FormData에 추가
    var files = $('#imageFile')[0].files;
    for(var i=0; i<files.length; i++){
        formData.append('files', files[i]);
    }

    for (var pair of formData.entries()) {
        console.log(pair[0]+ ', ' + pair[1]); 
    }

    $.ajax({
        type  : "POST",
        url    : "/boardUpdate.do",
        //data: data,
        data: formData,
        dataType: "json",
        processData: false,
        contentType: false,
        success: function(result){
            if(result == 'Y') {
                alert("수정되었습니다.");
                location.href = "/boardList.do";
            }else {
                alert("수정이 실패하였습니다.");
            }
        },
        error: function(request, status, error) {
            alert("code = "+ request.status + " message = " + request.responseText + " error = " + error);
        }  
    });
}

- java

더보기
더보기
@ResponseBody
@RequestMapping("/boardUpdate.do")
public String updateSample(
    MultipartFile[] files, 
    BoardVO boardVO,
    HttpServletRequest request, 
    HttpServletResponse response
) throws Exception {
    if (boardVO.getId() <= 0) {
        System.out.println("데이터가 없습니다.");
        return "board/list";
    }

    String str = null;
    try {
        // 수정내용 update 
        int cnt  = boardService.boardUpdate(boardVO);

        if(cnt > 0) {
            str = "Y";
            System.out.println("수정 성공");

            // 저장할 경로 가져오기
            String path = request.getSession().getServletContext().getRealPath("file");
            // "C:\\Users\\XXX\\eclipse-workspace\\toy_project\\toy_project2\\src\\main\\webapp\\file";
            String root = path + "\\uploadFiles" ;	
            File file = new File(root);

            // uploadFiles 폴더가 없으면 생성하기
            if(!file.exists()) {
                file.mkdirs();
            } 

            for(MultipartFile f : files) {
                if(!f.isEmpty()) {
                    // 업로드할 폴더 설정
                    String originFileName = f.getOriginalFilename();
                    String ext = originFileName.substring(originFileName.lastIndexOf("."));
                    String ranFileName = UUID.randomUUID().toString() + ext;
                    File changeFile = new File(root + "\\" + ranFileName);

                    // 파일 upload
                    f.transferTo(changeFile);
                }
            }
        }else {
            str = "N";
            System.out.println("수정 실패");
        }
    } catch (IllegalStateException | IOException e) {
        System.out.println("파일 업로드 실패");
        e.printStackTrace();
    } catch (Exception e) {
        System.out.println("예외사항 발생");
        e.printStackTrace();
    }

    return str;
}

(1-3) 파일 다운로드 기능

 

- html

더보기
더보기
<tr>
    <th>첨부파일</th>
    <td align="center" class="listtd" style="text-align: left;">
        <c:forEach items="${fileList}" var="file">
            <li style="list-style: none;">
                <a class="btn_file" href="javascript:filedownload('<c:out value="${file.org_file_nm}" />')"><c:out value="${file.org_file_nm}" /></a> 
            </li>
        </c:forEach>
    </td>
</tr>

- javaScript 

더보기
더보기
/* form download */
function filedownload(orginalNm){
    var formObj = $("form[name='fileForm']");
    $("#board_num").val($("#board_id").val());
    $("#org_file_nm").val(orginalNm);
    formObj.attr("action", "/filedownload.do");
    formObj.submit();
}

- java

더보기
더보기
@RequestMapping(value = "/filedownload.do")
public void fileDownload(
    HttpServletRequest request,
    HttpServletResponse response,
    BoardFileVO boardFileVO
) throws Exception {
    List<BoardFileVO> boardFileList = boardService.selectBoardFileCheck(boardFileVO);
    if (boardFileList.isEmpty()) {
        response.sendError(HttpServletResponse.SC_NOT_FOUND);
        return;
    }

    BoardFileVO boardFile = boardFileList.get(0);
    String saveDir = request.getSession().getServletContext().getRealPath("file/uploadFiles/");
    File file = new File(saveDir, boardFile.getStored_file_nm());

    if (!file.exists()) {
        response.sendError(HttpServletResponse.SC_NOT_FOUND);
        return;
    }

    try (FileInputStream fis = new FileInputStream(file);
         OutputStream os = response.getOutputStream()) {

        // 파일의 MIME 타입 설정
        String mimeType = "application/octet-stream"; // 기본값
        String originalName = boardFile.getOrg_file_nm();
        String fileExt = CleanUtil.allowExt(originalName); // 확장자 추출

        if (originalName.endsWith(".pdf")) {
            mimeType = "application/pdf";
        } else if (originalName.endsWith(".jpg") || fileExt.endsWith(".jpeg")) {
            mimeType = "image/jpeg";
        } else if (originalName.endsWith(".xlsx")) {
            mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        } // 다른 확장자에 따라 MIME 타입 추가 가능
        response.setContentType(mimeType);
        response.setContentLength((int) file.length());

        // 파일 이름을 UTF-8로 인코딩하여 Content-Disposition 헤더에 설정
        String fileName = URLEncoder.encode(originalName, StandardCharsets.UTF_8.toString());
        response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

        // 파일을 읽어와서 출력 스트림으로 전송
        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = fis.read(buffer)) != -1) {
            os.write(buffer, 0, bytesRead);
        }
    } catch (IOException e) {
        // 파일 다운로드 중 예외가 발생한 경우에 대한 처리
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "파일 다운로드 중 오류가 발생했습니다.");
    }
}

(2-1) 파일 등록기능 [게시글 포함] 

 

- html

더보기
더보기
<input type="button" class="modify_botton" style="width: 80px; float:right" onclick="insertBoard()" value="등록"/>

- javaScript 

더보기
더보기
function insertBoard() {
    // var data = $("#form").serialize();
    // console.log(data);

    var formData = new FormData($("#form")[0]);
    // 파일들을 FormData에 추가
    var files = $('#imageFile')[0].files;
    for(var i=0; i<files.length; i++){
        formData.append('files', files[i]);
    }

    for (var pair of formData.entries()) {
        console.log(pair[0]+ ', ' + pair[1]); 
    }

    $.ajax({
        type  : "POST",
        url    : "/boardInsert.do",
        data: formData,
        dataType: "json",
        processData: false,
        contentType: false,
        success: function(result){
            if(result == 'Y') {
                alert("등록되었습니다.");
                location.href = "/boardList.do";
            }else {
                alert("등록이 실패하였습니다.");
            }
        },
        error: function(request, status, error) {
            alert("code = "+ request.status + " message = " + request.responseText + " error = " + error);
        }  
    });
}

- java

더보기
더보기
@ResponseBody
@RequestMapping("/boardInsert.do")
public String boardInsert(
    MultipartFile[] files, 
    BoardVO boardVO,
    HttpServletRequest request, 
    HttpServletResponse response,
    Model model
) throws Exception {
    System.out.println("[등록하기]");
    String str = null;
    try {
        // 수정내용 update 
        int cnt  = boardService.boardInsert(boardVO);
        System.out.println("등록 여부 : " + cnt);

        if(cnt > 0) {
            str = "Y";
            System.out.println("등록 성공");

            // 저장할 경로 가져오기
            String path = request.getSession().getServletContext().getRealPath("file");
            // "C:\\Users\\XXX\\eclipse-workspace\\toy_project\\toy_project2\\src\\main\\webapp\\file";
            String root = path + "\\uploadFiles" ;	
            File file = new File(root);

            // uploadFiles 폴더가 없으면 생성하기
            if(!file.exists()) {
                file.mkdirs();
            } 

            // 1. 전송받은 파일 및 파일설명 값 가져오기
            System.out.println("file : " + files);
            for(MultipartFile f : files) {
                if(!f.isEmpty()) {
                    // 업로드할 폴더 설정
                    String originFileName = f.getOriginalFilename();
                    String ext = originFileName.substring(originFileName.lastIndexOf("."));
                    String ranFileName = UUID.randomUUID().toString() + ext;
                    File changeFile = new File(root + "\\" + ranFileName);

                    // 파일 upload
                    f.transferTo(changeFile);

                    /* 240504 파일 정보 INSERT */
                    BoardFileVO fileVO = new BoardFileVO();
                    fileVO.setBoard_num(boardVO.getId());
                    fileVO.setOrg_file_nm(originFileName);
                    fileVO.setStored_file_nm(ranFileName);
                    fileVO.setFile_size((int)f.getSize()); 
                    cnt = boardService.boardFileInsert(fileVO);
                }
            }
        }else {
            str = "N";
            System.out.println("등록 실패");
        }
    } catch (IllegalStateException | IOException e) {
        System.out.println("파일 업로드 실패");
        e.printStackTrace();
    } catch (Exception e) {
        System.out.println("예외사항 발생");
        e.printStackTrace();
    }
    return str;
}

(2-2) 파일 수정기능 [게시글 포함] 

 

- java [수정화면]

더보기
더보기
/* 240514 수정화면 [수정] */
@RequestMapping(value = "/boardModify.do")
public ModelAndView boardModify(
    BoardVO boardVO
) throws Exception {
    System.out.println("[수정화면]");
    System.out.println("boardVO.getId() : " + boardVO.getId());

    ModelAndView mv = new ModelAndView();
    // boardList
    List<?> BoardList = boardService.selectBoardModifyView(boardVO);
    mv.addObject("resultList", BoardList);

    // boardFileList
    if(BoardList.size() > 0) {
        List<BoardFileVO> BoardFileList = boardService.selectBoardFileList(boardVO);
        // file is exist
        if(BoardFileList.size() > 0) {
            mv.addObject("fileList", BoardFileList);
        }
    }
    mv.setViewName("board/modify");
    return mv;
}

- html   [수정기능]

더보기
더보기
<form name="fileForm" method="post">
    <input type="hidden" id="board_num" name="board_num"/>
    <input type="hidden" id="org_file_nm" name="org_file_nm"/> 
</form>
<div id="table">
    <form id="form" enctype="multipart/form-data">
        <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="">
            <caption style="visibility:hidden"></caption>
            <c:forEach var="result" items="${resultList}" varStatus="status">
                <tr>
                    <th>id</th>
                    <td align="center" class="listtd">
                        <input type="text" name="id" value="${result.id}"/>
                    </td>
                </tr>
                <tr>
                    <th>subject</th>
                    <td align="center" class="listtd">
                        <input type="text" name="subject" value="${result.subject}"/>
                    </td>
                </tr>
                <tr>
                    <th>content</th>
                    <td align="center" class="listtd">
                        <input type="text" name="content" value="${result.content}"/>
                    </td>
                </tr>
                <tr>
                    <th>writer</th>
                    <td align="center" class="listtd">
                        <input type="text" name="writer" value="${result.writer}"/>
                    </td>
                </tr>
                <tr>
                    <th>register_datetime</th>
                    <td align="center" class="listtd">
                        <input type="text" name="register_datetime" value="${result.register_datetime}"/>
                    </td>
                </tr>
                <tr>
                    <th>files</th>
                    <td align="center" class="listtd" id="files">
                    
                        <%-- 기존 파일 : S --%>
                        <c:forEach items="${fileList}" var="file">
                            <p id="existing-file<c:out value="${file.file_num}"/>">
                                <a href="javascript:filedownload('<c:out value="${file.org_file_nm}"/>')">
                                    <img src="/images/icon_file.gif" alt="파일" />
                                    <c:out value="${file.org_file_nm}" />
                                </a> 
                                <a href="javascript:deleteFile('<c:out value="${file.stored_file_nm}" />', '<c:out value="${file.file_num}"/>')">
                                    <img src="/images/btn_comment_del.gif" alt="삭제" />
                                </a>
                            </p>
                        </c:forEach>
                        <%-- 기존 파일 : E --%>
                        
                        <%-- 새로운 파일 : S --%>
                        <span class="ipfile">
                            <p id="file0" class="fileattachbox">
                                <input id="file" name="files" type="file" class="file" accept="*" onchange="fileSelected(this)">
                            </p>
                        </span>
                        <%-- 새로운 파일 : E --%>
                        
                    </td>
                </tr>
            </c:forEach>
        </table>
        <br>
        <input type="button" class="modify_botton" style="width: 80px; float:right" onclick="modifyBoard()" value="수정"/>
    </form>
</div>

 

- javaScript  [수정기능]

더보기
더보기
// 수정하기
function modifyBoard() {
    var formData = new FormData($("#form")[0]);

    /*
    for (var pair of formData.entries()) {
        console.log(pair[0]+ ', ' + pair[1]); 
    }
    */

    $.ajax({
        type  : "POST",
        url    : "/boardUpdate.do",
        data: formData,
        dataType: "json",
        processData: false,
        contentType: false,
        success: function(result){
            if(result == '001') {
                alert("수정 완료되었습니다.");
                var id = $("input[name='id']").val();
                location.href = "/boardView.do?id="+id;
            }else if(result == '002') {
                alert("첨부파일 정보 입력에 실패하였습니다.");
            }else if(result == '003') {
                alert("수정 실패하였습니다.");
            }else {
                alert("수정 실패하였습니다.");
            }
        },
        error: function(request, status, error) {
            alert("code = "+ request.status + " message = " + request.responseText + " error = " + error);
        }  
    });
}

// 파일 선택폼 자동 증가
var fileIndex = 0;
function fileSelected(file) {
    var pathpoint = file.value.lastIndexOf('.');
    var filepoint = file.value.substring(pathpoint+1,file.length);
    var filetype = filepoint.toLowerCase();

    if(filetype=='jsp'||filetype=='php'||filetype=='asp'||filetype=='cgi'||filetype=='JSP'||filetype=='PHP'||filetype=='ASP'||filetype=='CGI'){
        alert('업로드 할수 없는 파일입니다.');
        return;
    }

    var filename = $(file).val();
    if (filename.substring(3,11) == 'fakepath' ) {
        filename = filename.substring(12);
    }
    filename = filename.substring(filename.lastIndexOf('\\')+1);

    // 파일명 show해주는 부분 
    $("#file"+fileIndex).hide();
    $("#files").append(
        '<p id="file' + fileIndex + '" >' +  
            '<img src="/images/icon/icon_attachment.png" alt="파일" />' + filename + 
            '<a href="javascript:fileRemove(\''+fileIndex+'\')">' + 
                '<img src="/images/btn_comment_del.gif" alt="삭제" />'+ 
            '</a>' + 
        '</p>'
    );

    // 업로드 버튼 생성
    fileIndex++;
    $("#files").append(
        '<p id="file' + fileIndex + '" class="fileattachbox">' + 
            '<span class="ipfile">' + 
                '<input id="file" name="files" type="file" class="file" accept="*" onchange="fileSelected(this)"/>' +
            '</span>' +
            '<strong>파일최대 크기는 10M 미만 입니다.</strong>' + 
        '</p>'
    );
}

function fileRemove(idx) {
    $("#file"+idx).remove(); // hide시킨 p태그 remove
    $("#file"+idx).remove(); // 파일명 show시킨 p태그 remove
}

- java [수정기능]

더보기
더보기
@ResponseBody
@RequestMapping("/boardUpdate.do")
public String updateSample(
    // @RequestParam(value = "imageFile", required = false) MultipartFile singleFile,
    MultipartFile[] files, 
    BoardVO boardVO,
    HttpServletRequest request, 
    HttpServletResponse response,
    Model model
) throws Exception {
    ModelAndView mv = new ModelAndView();
    if (boardVO.getId() <= 0) {
        mv.setViewName("board/list");
        System.out.println("데이터가 없습니다.");
        return "board/list";
    }

    String str = null;
    try {
        // 수정내용 update 
        int cnt  = boardService.boardUpdate(boardVO);

        if(cnt > 0) {
            str = "001";
            System.out.println("수정 성공");

            // 저장할 경로 가져오기
            String path = request.getSession().getServletContext().getRealPath("file");
            // "C:\\Users\\XXX\\eclipse-workspace\\toy_project\\toy_project2\\src\\main\\webapp\\file";
            String root = path + "\\uploadFiles" ;	
            File file = new File(root);

            // uploadFiles 폴더가 없으면 생성하기
            if(!file.exists()) {
                file.mkdirs();
            } 

            // 1. 전송받은 파일 및 파일설명 값 가져오기
            for(MultipartFile f : files) {
                if(!f.isEmpty()) {
                    // 업로드할 폴더 설정
                    String originFileName = f.getOriginalFilename();
                    String ext = originFileName.substring(originFileName.lastIndexOf("."));
                    String ranFileName = UUID.randomUUID().toString() + ext;
                    File changeFile = new File(root + "\\" + ranFileName);

                    // 240514 기존에 이미 존재했던 첨부파일인지 체크하기
                    BoardFileVO fileVO = new BoardFileVO();
                    fileVO.setBoard_num(boardVO.getId());
                    fileVO.setOrg_file_nm(originFileName);
                    List<BoardFileVO> boardFileList = boardService.selectBoardFileCheck(fileVO);
                  
                    // 새로운 첨부파일인 경우 
                    if(boardFileList.size() == 0){
                        fileVO.setStored_file_nm(ranFileName);
                        fileVO.setFile_size((int)f.getSize());
                        cnt = boardService.boardFileInsert(fileVO);
                        // 파일정보 INSERT 완료 시 
                        if(cnt > 0) {
                            // 파일 upload				
                            f.transferTo(changeFile);
                        }else {
                            str ="002";
                            System.out.println("파일정보 INSERT 실패");
                        }
                    }
                }
            }
        }else {
            str = "003";
            System.out.println("게시글 UPDATE 실패");
        }
        // System.out.println("id : " + boardVO.getId());
        model.addAttribute("id", boardVO.getId());

    } catch (IllegalStateException | IOException e) {
        System.out.println("파일 업로드 실패");
        e.printStackTrace();
    } catch (Exception e) {
        System.out.println("예외사항 발생");
        e.printStackTrace();
    }
    return str;
}

(2-3) 파일 삭제기능

 

- html

더보기
더보기
<tr>
    <th>files</th>
    <td align="center" class="listtd">
    
        <%-- 기존 파일 --%>
        <c:forEach items="${fileList}" var="file">
            <p id="existing-file<c:out value="${file.file_num}"/>">
                <a href="javascript:filedownload('<c:out value="${file.org_file_nm}"/>')">
                    <img src="/images/icon_file.gif" alt="파일" />
                    <c:out value="${file.org_file_nm}" />
                </a> 
                <a href="javascript:deleteFile('<c:out value="${file.stored_file_nm}" />', '<c:out value="${file.file_num}"/>')">
                    <img src="/images/btn_comment_del.gif" alt="삭제" />
                </a>
            </p>
        </c:forEach>
        
        <%-- 새로운 파일 --%>
        <span class="ipfile">
            <p id="file0" class="fileattachbox">
                <input id="file" name="files" type="file" class="file" accept="*" onchange="fileSelected(this)">
            </p>
        </span>
        
    </td>
</tr>

 

- javaScript 

더보기
더보기
/* 240514 file delete */
function deleteFile(stored_file_nm, num) {
    if (confirm("정말 삭제하시겠습니까?") == false) {
        return;
    }
    $.ajax({
        type : 'POST',
        url : "/fileDelete.do",
        data : {
            "file_num":num, 
            "stored_file_nm" : stored_file_nm
        },
        dataType : 'json',
        success : function (data) {
            //location.reload();
            removeExistingFile(num); // 삭제 function 
        },
        error : function (XMLHttpRequest, textStatus, errorThrown) {
            alert("에러발생!!");
        }
    });
}

function removeExistingFile(idx) {
    $("#existing-file"+idx).remove();
}

- java

더보기
더보기
@ResponseBody
@RequestMapping(value = "/fileDelete.do")
public boolean fileDelete(
    HttpServletRequest request,
    HttpServletResponse response,
    BoardFileVO boardFileVO
) throws Exception {

    boolean isDelete = false;
    try {
        String saveDir = request.getSession().getServletContext().getRealPath("file/uploadFiles/");
        File file = new File(saveDir, boardFileVO.getStored_file_nm());
        
        //파일존재여부확인
        if(file.exists()){ 
            isDelete = boardService.deleteSelectedFile(boardFileVO);
            System.out.println("isDelete : " + isDelete);
            if(isDelete){
                //file.delete();
                System.out.println("파일삭제 성공");
            }else{
                System.out.println("파일삭제 실패");
            }
        }else{
            System.out.println("파일이 존재하지 않습니다.");
        }

    }catch(IOException e) {
        System.out.println("IOException");
        e.printStackTrace();
    }catch (Exception e) {
        System.out.println("Exception");
        e.printStackTrace();
    }
    return isDelete;
}

출처 : https://sinna94.tistory.com/entry/Spring-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C-%ED%95%98%EA%B8%B0?category=699468

출처 : https://copycoding.tistory.com/229

출처 : https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:%ED%8C%8C%EC%9D%BC%EA%B4%80%EB%A6%AC

728x90
728x90

'Framework > Spring [java]' 카테고리의 다른 글

스프링 MVC 구조와 패턴  (2) 2022.11.06
[java] @RequestBody , @ResponseBody 어노테이션  (2) 2022.03.04
[spring] Spring IOC, IOC Container ,DI 의미  (0) 2021.12.23
[spring] web.xml  (0) 2021.12.23
[spring] root-context.xml  (0) 2021.12.23