반응형
Spring MVC 기반 웹 애플리케이션에서 다음과 같은 오류가 발생하는 경우가 있습니다.
에러 메시지
javax.servlet.ServletException: Could not resolve view with name 'index' in servlet with name 'servlet'
원인 분석
이 오류는 Spring MVC가 컨트롤러에서 반환한 뷰 이름 "index"
를 실제 물리적 템플릿 파일로 매핑하지 못했을 때 발생합니다.
흔한 원인
- 해당 뷰 파일(JSP, Thymeleaf 등)이 존재하지 않음
- 뷰 리졸버(ViewResolver) 설정 오류
- 접두어(prefix) 또는 접미어(suffix)가 잘못 설정됨
- 템플릿 경로 오타 또는 디렉토리 누락
예를 들어, 다음 컨트롤러가 있다고 가정할 때:
@GetMapping("/")
public String index() {
return "index";
}
Spring은 "index"
라는 이름을 가지고 다음과 같이 경로를 해석합니다:
- JSP 환경:
/WEB-INF/views/index.jsp
- Thymeleaf 환경:
classpath:/templates/index.html
하지만 해당 파일이 존재하지 않으면 예외가 발생합니다.
해결 방법
1. 뷰 파일 존재 여부 확인
- JSP 환경:
/WEB-INF/views/index.jsp
가 실제 존재하는지 확인 - Thymeleaf 환경:
src/main/resources/templates/index.html
파일이 있는지 확인
2. ViewResolver 설정 확인
JSP 예시 (Spring Boot 외 일반 설정):
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
Spring Boot + Thymeleaf 예시:
spring:
thymeleaf:
prefix: classpath:/templates/
suffix: .html
3. 리턴 값과 실제 파일명 일치 확인
컨트롤러에서 반환하는 뷰 이름이 실제 파일명과 정확히 일치하는지 확인합니다.
return "index"; // → /WEB-INF/views/index.jsp 또는 templates/index.html
대소문자 구분, 확장자 누락, 경로 오타 등을 철저히 점검해야 합니다.
4. Redirect 혹은 Forward 전략 고려
특정 페이지를 직접 출력하는 것이 아니라면, 뷰 이름 대신 redirect 또는 forward를 명시할 수도 있습니다.
return "redirect:/home";
return "forward:/WEB-INF/views/index.jsp";
결론
이 에러는 대부분 뷰 파일 누락이나 뷰 리졸버 설정 오류에서 기인합니다.
정확한 뷰 경로와 이름, 설정을 점검하는 것만으로도 빠르게 문제를 해결할 수 있습니다.
개발 초기 설정 단계나 파일 구조 변경 시 꼭 점검해야 할 항목 중 하나입니다.
반응형