
Spring MVC 프로젝트에서 @RequestMapping 경로를 설정했음에도 화면 호출에 문제가 발생했습니다.
이는 뷰 리졸버(View Resolver) 설정이 올바르지 않았기 때문입니다.
뷰 리졸버(View Resolver) 의 개념과 설정 방법에 대해 알아보겠습니다.
IDE : Eclipse
JDK : Java 17
Server : Apache Tomcat 9.0
: Spring MVC 프레임워크를 기반으로 한 Maven 웹 애플리케이션입니다.
: Spring MVC를 사용해 웹 애플리케이션을 구축하며, Maven을 통해 의존성 및 빌드 관리를 처리할 수 있습니다.
JSP 파일 위치
: JSP 파일을 /WEB-INF/jsp/ 경로에 배치되어 있습니다.
: 예를 들어, hello.jsp 파일이 있다면, 컨트롤러에서 return "hello"; 를 반환할 때 /WEB-INF/jsp/hello.jsp 파일이 렌더링됩니다.
경로 예시
src/
└── main/
├── java/ // Java 소스 코드
├── webapp/
│ ├── WEB-INF/
│ │ ├── JSP/ // JSP 파일
│ │ └── web.xml // 서블릿 설정 파일
└── resources/ // 정적 리소스 및 설정 파일
뷰 리졸버(View Resolver) 는 클라이언트의 요청에 대한 응답으로 어떤 뷰를 사용할지를 결정하는 중요한 컴포넌트입니다.
① 응답 결정 : MVC 패턴에서, 컨트롤러가 처리를 마친 후 어떤 뷰로 응답을 생성할지를 결정하는 데 필요합니다.
② 뷰 파일 경로 해석 : 컨트롤러에서 반환된 뷰 이름을 바탕으로 실제 뷰 파일의 경로를 해석하여 해당 뷰를 찾는 데 도움을 줍니다.
③ 정상적인 렌더링 보장 : 뷰 리졸버 (View Resolver) 를 올바르게 설정하는 것은 Spring MVC 애플리케이션에서 뷰를 정상적으로 렌더링하고 사용자에게 표시하는 데 필수적입니다.
Spring MVC는 다양한 뷰 기술을 지원하며, 이를 위해 여러 뷰 리졸버를 제공합니다.
JSP, Thymeleaf, FreeMarker 등 다양한 템플릿 엔진을 사용할 수 있습니다.
dispatcher-servlet.xml 파일을 직접 생성하여 Spring MVC 설정을 추가할 수 있습니다.
Maven 프로젝트에서는 src/main/webapp/WEB-INF 경로에 dispatcher-servlet.xml 파일을 생성하고, 그 안에 Spring의 뷰 리졸버와 기타 설정을 정의합니다.
InternalResourceViewResolver
: JSP와 같은 내부 자원에 대한 뷰를 렌더링하는 데 사용된다.
이 리졸버는 접두사와 접미사를 설정하여 반환된 뷰 이름의 앞뒤에 특정 문자열을 자동으로 추가함으로써, 실제 JSP 파일의 경로를 구성합니다.
뷰 리졸버 (View Resolver) vs 뷰 렌더링 (View Rendering)
: 뷰 리졸버 (View Resolver)는 어떤 뷰를 사용할지를 결정하는 역할을 하며, 요청에 대한 뷰의 경로를 찾습니다.
: 뷰 렌더링 (View Rendering)은 실제 뷰를 생성하고 클라이언트에게 전달하는 과정입니다.
① 파일 경로 : src/main/webapp/WEB-INF/dispatcher-servlet.xml
② 파일 내용 예시 :
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- Component Scan -->
<context:component-scan base-package="com.example.yourpackage" />
<!-- View Resolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- Enable Spring MVC Annotations -->
<mvc:annotation-driven />
</beans>
dispatcher-servlet.xml 을 Spring의 DispatcherServlet 과 연결하기 위해 web.xml 파일에서 이를 선언해야 합니다.
파일 내용
<web-app>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
이 설정을 통해 모든 URL 요청을 DispatcherServlet이 처리하고, Spring MVC가 작동하게 됩니다.