[ViewResolver]
View 페이지의 실질적인 물리적 위치 정보를 다루기 위해서 필요한 라이브러리 클래스이다.
InternalResourceViewResolver (default)는 ViewResolver의 기본 클래스로 따로 설정하지 않으면 /WEB-INF/views 폴더 아래 jsp 파일을 찾아가도록 한다.
<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
src > main > webapp > WEB-INF > spring > app-Servlet 폴더에서 servlet-context.xml 파일 열기.
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> 주석 아래에 부분이
Controller에서 수행 후 리턴하는 객체인 ModelAndView는 View 페이지 이름과 Model(Data) 정보를 포함한다. 이 데이터를 view로 보낼 때 Resolves views ~ 주석 아래 코드에서 View페이지의 경로(prefix)와 파일 확장자(suffix)을 지정한다.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<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>
<context:component-scan base-package="com.encore.spring" />
</beans:beans>
[BeanNameViewResolver]
만약 모든 View 페이지가 동일한 경로에 저장된 경우 ViewResolver의 기본 클래스만 사용해도 되지만,
아래와 같이 view 페이지가 서로 다른 폴더에 저장된 경우 view 페이지마다 다른 경로를 지정해야한다. 이를 위해 BeanNameViewResolver가 필요하다.
또한, FileDownLoad, ajax처럼 응답 시 따로 정해진 결과 페이지가 없는 기술을 사용하려면 반드시 BeanNameViewResolver이 필요하다.
Controller 3개의 메서드에서 각각 다른 경로로 데이터를 보내는 경우
@Controller
public class ViewController {
// board/result/board_result.jsp
@RequestMapping("findBoard.do")
public ModelAndView findBoard() {
System.out.println("finBoard() Call");
return new ModelAndView("board_result");
}
// product/result/product_result.jsp
@RequestMapping("findProduct.do")
public ModelAndView findProduct() {
System.out.println("findProduct() Call");
return new ModelAndView("product_result");
}
// register/register_result.jsp
@RequestMapping("register.do")
public ModelAndView register() {
System.out.println("register() Call");
return new ModelAndView("register_result");
}
}
1) src > main > webapp > WEB-INF > spring 아래 새로운 파일 appServlet-servlet.xml 생성
2-1) 기존 servlet-context.xml 파일의 기본 클래스인 InternalResourceViewResolver에 순서를 지정하는 property 추가
<bean id="ViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="response" />
<property name="suffix" value=".jsp" />
<property name="order" value="1" /> <!-- 순서를 지정하는 property -->
</bean>
2-2) BeanNameViewResolver 우선순위 지정
<bean id="beanNameResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="0"/>
</bean>
2-3) BeanNameViewResolver JuslView 생성
- name="View페이지 이름"
- class= "org.springframework.web.servlet.view.InternalResourceViewResolver"
- property name : "url"
- value : 파일 위치/파일명.파일확장자
<?xml version="1.0" encoding="UTF-8"?>
<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"
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-3.1.xsd">
<!-- ViewResolver 기본 클래스 -->
<bean id="ViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="response" />
<property name="suffix" value=".jsp" />
<property name="order" value="1" />
</bean>
<!-- beanNameResolver는 우선순위를 0으로 해서 ViewPage를 찾을 때 우선 탐색한다.
만약 BeanNameViewResolver에서 없으면 viewResolver에서 탐색한다. -->
<bean id="beanNameResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="0"/>
</bean>
<!-- JstView Bean이 BeanNameResolver에서 결과페이지 매핑하는 기능을 한다. -->
<bean name="board_result" class="org.springframework.web.servlet.view.JstlView">
<property name="url" value="board/result/find_ok.jsp"/>
</bean>
<bean name="product_result" class="org.springframework.web.servlet.view.JstlView">
<property name="url" value="product/result/find_ok.jsp"/>
</bean>
<bean name="register_result" class="org.springframework.web.servlet.view.JstlView">
<property name="url" value="response/register_result.jsp"/>
</bean>
<context:component-scan base-package="com.encore.spring"></context:component-scan>
</beans>
'Web Programming > Spring' 카테고리의 다른 글
[Spring] File Upload/Download (0) | 2020.08.11 |
---|---|
[Spring] Annotation (0) | 2020.08.06 |
[Spring] Bean 설정문서 (0) | 2020.08.06 |
[Spring] My Batis - SQL (1) | 2020.08.05 |
[Spring] MyBatis Data Access (0) | 2020.08.04 |
댓글