[spring 04] ViewResolver, 파일 업로드&다운로드
ViewResolver
• 뷰 리졸버는 ViewResolver라는 인터페이스를 구현해 만들어짐
• 뷰 리졸버를 빈으로 등록하지 않는다면 DispatcherServlet의 디폴트 뷰 리졸버인 InternalResourViewResolver가 사용됨
• 핸들러 매핑과 마찬가지로 뷰리졸버도 하나 이상을 빈으로 등록해서 사용할 수 있음
✔ UrlBasedViewResolver
✔ InternalResourceView
∙ 주로 jsp를 뷰로 사용하고자 할때 사용
∙ prefix, suffix
✔ BeanNameViewResolver
∙ 리턴받은 뷰이름과 동일한 이름을 가진 빈(객체)을 찾아서 뷰로 응답
✔ XmlViewResolver
∙ 파일과 뷰이름의 정보를 정의해놓고 선택해서 사용할 수 있는 방법
∙ /WEB-INF/view.xml , views.properties
파일 업로드
• 다운로드 : 브라우저에서 제공하는 서비스
• 업로드 : 개발자가 처리, 스프링에서는 기본적으로 강제해야될 것들 기능 제공해줌
1. 라이브러리 배치
☑ cos.jar : 파일이름 중복처리는 되지만 먼저 다운이되고 그 뒤에 확인
☑ commons-fileupload, commons-io.jar 📌
▪ 파일이름 중복처리, 자동업로드 안됨 ▸ 파일이름 중복처리 직접, 자동업로드 직접 처리
☑ Servlet 3.0 (톰캣7.0)
2. xml에 MultipartResolver 등록
spring-servlet.xml > multipartResolver 등록
3. 업로드
☑ MultipartHttpServletREquest 인터페이스
▪ 스프링이 제공하는 인터페이스, 멀티파트 요청이 들어올때 내부적으로 HttpServletRequest 대신 사용되는 인터페이스
☑ 메소드
리턴타입 | 메소드 | 설명 |
Iterator<String> | getFileNames() | 업로드된 파일들의 이름 목록을 리턴 |
MultipartFile | getFile(String name) | 파라미터이름이 name인 업로드 파일 정보 리텅 |
List<MultipartFile> | getFiles(String name) | 파라미터이름이 name인 업로드 파일 정보 목록 리턴 |
☑ 작업순서
① 처리 메소드에 매개변수 지정
② 파일 정보 꺼내기
③ 파일 저장 경로 + 새파일명 만들어 File객체로 생성
④ MultipartFile의 transferTo() 메소드로 파일 저장 (서버에 저장)
⑤ DB에 파일명 정보 등 저장
4. 다운로드
• 다운로드는 브라우저 기능이기 때문에 개발자가 해줄것은 요청경로와 파일 연결만 해주면 된다.
1. xml에 ViewResolver 우선순위 지정 ( 0 ~ )
∙ BeanNameViewResolver : 0
∙ InternalViewResolver : 1
2. DownloadView.java 파일 빈으로 등록
3. 다운 받기 버튼을 jsp 페이지에 만들고 Controller에 매핑메소드 추가▸ 버튼에 다운기능을 요청할 경로 만들고
4. Controller에 다운처리 요청 매핑 메소드 추가
▸다운시킬 파일 전체 경로 찾아서 File 객체로 만들고 ModelAndView에 정보추가해서 리턴
🔥
에러 예
ClassNotFoundException : 클래스를 못찾는다
BeanCreationExcepiton : bean이 생성이 안된다
▸ xml에 빈등록
▸ xml 빈으로 등록한 클래스가 존재하는지, 클래스명확인
▸ xml 파일에 등록한 class 이름들 확인
▸ 라이브러리배치가 잘되었는지 확인(버전까지)
▸ 자바코드있는곳에 클래스명이 맞는지 확인
ConversionNotSupportedException : 형변환 안된다
▸<property, <constructor-arg 에 지정한 값이 이상없는지 확인
▸매핑메소드 매개변수의 타입과 파라미터가 맞지 않을 경우 > Controller 확인
UnsatisfiedDependencyException : 의존성 주입 실패
▸@Autowired 세팅이 잘못되어 있는것, 빈으로 등록 안했거나(xml 파일 빈등록하고 @Autowired 했는지 확인)
▸빈으로 등록할때 <property,<constructor-arg에 지정한 값이 이상없는지 확인
sever 스타트하자마자 error
▸xml 파일에 오타 확인
▸포트번호가 충돌 확인(8080...) : 이클립스 두개 서버 올려놓았을때
▸프로젝트 새로 만들었거나 파일이동 했다면 프로젝트에 tmocat 배치 확인 (프로젝트 우클릭>properties>java build path >libraries 탭
▸톰캣 설치 위치 재설정 해보기
▸서버로 사용하는 톰캣 파일에 문제 발생 : 톰캣 압축 해제 다시