🚀 from error to study/Java

[Spring] Spring 리턴 시 404 오류(경로상 /WEB-INF/views와 .jsp 2번 출력될 때)

천재강쥐 2022. 11. 18. 10:43

 

하단 코드블럭과 같이 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 "";
		}

 

⚡️ 결과 실행 화면

 

이제 잘 포워딩 됨!