[Spring] 파일 업로드, 예외 처리

2020. 8. 5. 03:53Spring/Spring

1. 파일 업로드

1) 글 등록 화면 수정

enctype 속성을 멀티파트 형식으로 지정하고 file 타입의 <input> 태그를 넣어 업로드할 파일을 선택할 수 있도록 화면을 수정한다.

/src/main/webapp/
insertBoard.jsp

insertBoard.jsp

2) Command 객체 수정

/src/main/java/
BoardVO.java

BoardVO.java

3) FileUpload 라이브러리 추가

아파치에서 제공하는 Common FiileUpload 라이브러리를 사용하여 파일 업로드를 처리하기 위해 FileUpload 라이브러리를 추가한다.

pom.xml

pom.xml

4) MultipartResolver 설정

CommonsMultipartResolver를 <bean>등록 한다. 지금까지의 <bean> 등록과는 다르게 CommonsMultipartResolver 클래스는 이름이 정해져 있다. DispatcherServlet이 특정 이름으로 등록된 CommonsMultipartResolver 객체만 인식하도록 되어 있다. 따라서 반드시 id는 'multipartResolver'를 사용해야한다. (Resolver로 끝나는 클래스는 대부분 id가 정해져있다.)

 

CommonsMultipartResolver 등록에는 maxUploadSize에 대한 Setter 인젝션은 업로드할 수 있는 파일의 크기를 제한하기 위한 설정이다. 지정을 안할 시 '-1'이 설정되며, 파일 크기가 무제한이라는 의미이다.

 

BoardVO 객체를 생성할 때, upload 변수의 타입인 MultipartFile 객체는 먼저 생성되어 있어야 한다. 스프링 컨테이너가 클라이언트의 요청에 대해서 메서드를 호출하고 BoardVO 객체도 생성하여 전달한다. ('multipartResolver' 이름으로 등록된 CommonsMultipartResolver 객체가 없으면 스프링 컨테이너는 MultipartFile 객체를 생성할 수 없다.)

 

MultipartFiile 객체는 클라이언트가 업로드하는 모든 정보가 저장된다.

/src/main/webapp/WEB-INF/config/
presentation-layer.xml

presentation-layer.xml

5) Controller 수정

/src/main/java/
BoardController.java

BoarderController.java

 

 

 

2. 예외 처리

1) 예외 처리

사용자의 요청에 Controller 메서드가 실행이 되고, 예외 발생시 적절한 메시지를 전달해야한다.

2) 로그인 기능

아이디 입력을 안할 시, IlleagalArgumentException 발생하도록 수정한다.

/src/main/java/
LoginController.java

LoginController.java

구현 화면

구현 화면

3) 어노테이션 예외 처리

예외 처리 관련 어노테이션(@ControllerAdvice, @ExceptionHandler) 사용을 위한 설정을 추가한다.

/src/main/webapp/WEB-INF/config/
presentation-layer.xml

presentation-layer.xml

발생하는 예외의 종류에 따라 적절한 화면이 나오도록 CommonExceptionHandler 클래스를 생성한다. @ControllerAdvice 어노테이션으로 인해 CommonExceptionHandler 객체는 생성되고 'com.springbook.view'로 시작하는 Controller에서 예외가 발생되면 @ExceptionHandler 어노테이션으로 지정한 메서드가 실행이 된다.

/src/main/java/
CommonExceptionHandler.java

CommonExceptionHandler.java

4) 오류 화면

제작한 화면과 동일한 코드를 가진, /common 폴더 하위에 각각 파일명이 다른 arithmeticError.jsp, error.jsp, nullPointError.jsp 3개의 파일을 생성한다.

/src/main/webapp/common/
error.jsp

error.jsp

구현 화면

구현 화면

5) xml 예외 처리

xml 예외 처리를 하기 위해서는 어노테이션 기반으로 추가한 예외 처리 설정은 제거하고, 설정 파일에 SimpleMappingExceptionResolver 클래스를 <bean> 등록하면 된다.

/src/main/webapp/WEB-INF/config/
presentation-layer.xml

presentation-layer.xml


[참고] 스프링 퀵 스타트

728x90