하단 코드블럭과 같이 Controller와 errorPage를 기술했더니 /WEB-INF/views와 .jsp가 두 번 출력되는 오류 발생!
💻 현재 Controller 코드
if(loginUser == null) { // 로그인 실패
// 에러 문구를 응답 페이지에 실어서 포워딩
model.addAttribute("errorMsg", "로그인 실패");
return "/WEB-INF/views/common/errorPage.jsp";
} else { // 로그인 성공
return "";
}
💻 현재 errorPage 코드
<%@ 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>
<jsp:include page="header.jsp" />
<br>
<div align="center">
<img src="https://cdn2.iconfinder.com/data/icons/oops-404-error/64/208_balloon-bubble-chat-conversation-sorry-speech-256.png">
<br><br>
<h1 style="font-weight:bold;">${ errorMsg }</h1>
</div>
<br>
<jsp:include page="footer.jsp" />
</body>
</html>
에러 메시지도 잘 기술해 줬고, 경로도 제대로 지정해 줬는데 왜 그럴까?
❗️ 이유: Spring의 기본 설정을 간과한 것!
💻 Servlet-context.xml (기본 설정 파일)
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
servlet-context.xml의 주소의 자동 완성을 도와주는 bean 설정에 의해 접두어와 접미어를 제외한 나머지 부분에 대한 경로만 문자열로 리턴해야 함!
기본 설정된 접두어: "/WEB-INF/views/"
기본 설정된 접미어: ".jsp"
내가 리턴하고 싶은 경로: /WEB-INF/views/common/errorPage.jsp
접두어와 접미어 제외 경로: common/errorPage
💻 수정한 Controller 코드
if(loginUser == null) { // 로그인 실패
// 에러 문구를 응답 페이지에 실어서 포워딩
model.addAttribute("errorMsg", "로그인 실패");
return "common/errorPage";
} else { // 로그인 성공
return "";
}
⚡️ 결과 실행 화면