basic/spring

[spring 04] ViewResolver, 파일 업로드&다운로드

못지(Motji) 2021. 8. 3. 16:53

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 탭

▸톰캣 설치 위치 재설정 해보기

▸서버로 사용하는 톰캣 파일에 문제 발생 : 톰캣 압축 해제 다시