7월7일
1.파일 업로드
(1)commons-fileupload 메이븐에서 가져오기
pom.xml 붙여넣기
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
(2)파일 업로드를 위한 servlet-context.xml설정
파일 업로드 빈등록 하는 xml 설정코드
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<beans:property name="defaultEncoding" value="UTF-8"></beans:property>
<!-- 1024 * 1024 * 10 bytes 10MB -->
<beans:property name="maxUploadSize" value="104857560"></beans:property>
<!-- 1024 * 1024 * 2 bytes 2MB -->
<beans:property name="maxUploadSizePerFile"
value="2097152"></beans:property>
<beans:property name="uploadTempDir"
value="file:/C:/springDocument/upload"></beans:property>
<beans:property name="maxInMemorySize" value="10485756"></beans:property>
</beans:bean>
(3)코드작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<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="submit" value="업로드">
</div>
</form>
</body>
</html>
Sample/exUpload 로 접속해서 jsp페이지 갔다가 submit하면 /Sample/exUploadPost 로 이동함
@Controller
@RequestMapping("/Sample/*")
@Log4j
public class SampleController {
@GetMapping("/exUpload")
public void exUpload() {
log.info("log...........");
}
@PostMapping("/exUploadPost")
public void exUploadPost01(ArrayList<MultipartFile> files) {
files.forEach(file->{
log.info(file.getOriginalFilename());
log.info(file.getSize());
log.info(file.getContentType());
});
}
}
2.예외처리
예외처리에도 어노테이션이 따로 존재 한다.
예외 처리를 코드를 분리를 해놓으면 나중에 실행될때 결합하여 스프링이 실행해준다.
(1)@ControllerAdvice
Advice가 붙어있는 애들은 AOP와 관련된 애들이다.
*AOP:핵심적인로직은 아니지만 프로그램에서 필요한 '공통적인 관심사 를 분리하자' 라는 개념
@ControllerAdvice는 스프링의 빈으로 등록 할때 사용하는 어노테이션 이다.
(2)@ExceptionHandler(내가처리하고픈 Exception지정)
Exception은 모든 예외의 조상으로 예외처리 가능함
package com.keduit.controll;
import java.util.ArrayList;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import com.keduit.sample.SampleDTO;
import lombok.extern.log4j.Log4j;
@Controller
@RequestMapping("/Sample/*")
@Log4j
public class SampleController {
@GetMapping("/ex01")
public void ex01(SampleDTO dto) {
log.info(dto);
}
//정상 쿼리문: http://localhost:8080/Sample/ex01?name=aaa&age=111
//에외발생 쿼리문: http://localhost:8080/Sample/ex01?name=aaa&age=aaa
}
}
SampleDTO dto의 파라미터인 age는 int타입으로 문자를 입력시 예외발생함
예외발생시 아래와 같은 예외 처리 클래스로 갔다가 예외처리 jsp로감
package com.keduit.exception;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import lombok.extern.log4j.Log4j;
@ControllerAdvice //이거는 예외처리 어노테이션 입니다! 라는 의미
@Log4j
public class ExceptionPrectice {
@ExceptionHandler(Exception.class) //Exception 예외는 이쪽으로와!!!
public String except(Exception ex,Model model) {
log.error("Exception...........");
return "Sample/errorPage"; //해당 jsp로 넘어가랏!!
}
}
해당 jsp파일임
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Exception Page</h1>
</body>
</html>