pom.xml
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
servlet-context.xml
<beans:bean
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
id="multipartResolver">
<beans:property value="utf-8" name="defaultEncoding" />
<!-- 1024 * 1024 * 10 bytes 10MB -->
<beans:property value="104857560" name="maxUploadSize" />
<!-- 1024 * 1024 * 2 bytes 2MB -->
<beans:property value="2097152"
name="maxUploadSizePerFile" />
<beans:property value="file:/C:/upload/tmp"
name="uploadTempDir" />
<beans:property value="10485756" name="maxInMemorySize" />
</beans:bean>
sampleController
@GetMapping("exUpload")
public void exUpload() {
log.info("/exUpload..........");
}
view>sample>exUpload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<script src="https://kit.fontawesome.com/a076d05399.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
<title>Insert title here</title>
</head>
<body>
<form action="/sample/exUploadPost" method="post" enctype="multiPART/form-data">
<div>
<input type='file' name='files'>
</div>
<div>
<input type='file' name='files'>
</div>
<div>
<input type='file' name='files'>
</div>
<div>
<input type='file' name='files'>
</div>
<div>
<input type='file' name='files'>
</div>
<div>
<input type='submit'>
</div>
</body>
</html>
실행
http://localhost:1234/sample/exUpload
데이터를 post로 받을 때
@PostMapping("exUploadPost")
public void exUploadPost() {
log.info("/exUploadpost..........");
}
@PostMapping("exUploadPost")
public void exUploadPost(ArrayList<MultipartFile> files) {
log.info("/exUploadpost..........");
for(MultipartFile file : files) {
log.info("--------");
log.info("name:" + file.getOriginalFilename());
log.info("size:" + file.getSize());
}
}
}
다른 방법
@PostMapping("exUploadPost")
public void exUploadPost(ArrayList<MultipartFile> files) {
log.info("/exUploadpost..........");
files.forEach(file -> {
log.info("name:" + file.getOriginalFilename());
log.info("size:" + file.getSize());
});
}
}
8월 27, 2020 9:42:42 오전 org.apache.catalina.startup.Catalina start
정보: 서버가 [5,233] 밀리초 내에 시작되었습니다.
INFO : org.zerock.controller.HomeController - Welcome home! The client locale is ko_KR.
INFO : org.zerock.controller.SampleController - basic...................
INFO : org.zerock.controller.SampleController - basic...................
INFO : org.zerock.controller.SampleController - /exUpload..........
INFO : org.zerock.controller.SampleController - /exUploadpost..........
INFO : org.zerock.controller.SampleController - --------
INFO : org.zerock.controller.SampleController - name:안녕 한국.png
INFO : org.zerock.controller.SampleController - size:15925
INFO : org.zerock.controller.SampleController - --------
INFO : org.zerock.controller.SampleController - name:toursite.pptx
INFO : org.zerock.controller.SampleController - size:1921916
INFO : org.zerock.controller.SampleController - --------
INFO : org.zerock.controller.SampleController - name:index.jsp
INFO : org.zerock.controller.SampleController - size:226
INFO : org.zerock.controller.SampleController - --------
INFO : org.zerock.controller.SampleController - name:
INFO : org.zerock.controller.SampleController - size:0
INFO : org.zerock.controller.SampleController - --------
INFO : org.zerock.controller.SampleController - name:
INFO : org.zerock.controller.SampleController - size:0
INFO : org.zerock.controller.HomeController - Welcome home! The client locale is ko_KR.
INFO : org.zerock.controller.SampleController - /exUpload..........
INFO : org.zerock.controller.SampleController - /exUploadpost..........
INFO : org.zerock.controller.SampleController - name:fileUpload.7z
INFO : org.zerock.controller.SampleController - size:10328
INFO : org.zerock.controller.SampleController - name:스타트 스프링 부트 소스코드 예제.zip
INFO : org.zerock.controller.SampleController - size:2049876
INFO : org.zerock.controller.SampleController - name:2020년계획표_양식 (1).xlsx
INFO : org.zerock.controller.SampleController - size:38070
INFO : org.zerock.controller.SampleController - name:안녕 한국.png
INFO : org.zerock.controller.SampleController - size:15925
INFO : org.zerock.controller.SampleController - name:1.png
INFO : org.zerock.controller.SampleController - size:16386
람다식
//1. lamda로 작성 (parameter 파라미터가 하나인게 분명할 때 ()와 클래스를 쓰지 않아도 됨) {body}
files.forEach((MultipartFile file) -> {
log.info("--------");
log.info("name:" + file.getOriginalFilename());
log.info("size:" + file.getSize());
});
}
@ControllerAdvice
AOP Aspect 반점 Oriented 지향 Programming
cross-concern 공통적인 관심사 / 횡단 관심사
Statement 수직 보통 흐름
-어떤 관점 관심 가로 @Initbinder (메소드가 실행하기 전에 끼워 넣어 준다)
Exception(오류가 날때 실행한다)
package org.zerock.controller;
import org.springframework.stereotype.Controller;
@Controller
public class ExceptionController {
}
package org.zerock.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import lombok.extern.log4j.Log4j;
@Controller
@RequestMapping("/except")
@Log4j
public class ExceptionController {
@RequestMapping("/a")
public void methoda() {
log.info("a method");
int i = 0;
int j = 5 / i; //오류가 날 것 같다
log.info("method done");
}
@ExceptionHandler(Exception.class)
public void except() { //메소드 이름이 어떻든 간에 @ExceptionHandler 어노테이션이 있는 경우
log.info("handle exception....");
}
}
http://localhost:1234/except/a
8월 27, 2020 10:38:00 오전 org.apache.coyote.AbstractProtocol start
정보: 프로토콜 핸들러 ["http-nio-1234"]을(를) 시작합니다.
8월 27, 2020 10:38:00 오전 org.apache.catalina.startup.Catalina start
정보: 서버가 [5,238] 밀리초 내에 시작되었습니다.
INFO : org.zerock.controller.HomeController - Welcome home! The client locale is ko_KR.
INFO : org.zerock.controller.ExceptionController - a method
INFO : org.zerock.controller.ExceptionController - handle exception....
한 곳에만 영향을 주는 것이 아닌 여러 곳에 영향을 미쳐야 할 때 사용하는 어노테이션이 @ControllerAdvice이다.
우선 순위는 안에 들어가 있는 handler가 높다.
전역
package org.zerock.exception;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import lombok.extern.log4j.Log4j;
@ControllerAdvice
@Log4j
public class MyControllerAdvice {
@ExceptionHandler(ArrayIndexOutOfBoundsException.class)
public void handleArrayIndexOutOfBoundsException() {
log.info("array index 넘음....");
}
}