在Spring MVC中,使用XmlViewResolver基於XML文件中的視圖bean來解析“視圖名稱”。默認地,XmlViewResolver將從/WEB-INF/views.xml中加載視圖bean,不過,這個位置可以通過“location”屬性覆蓋:
<beans ...>
<bean class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="location">
<value>/WEB-INF/spring-views.xml</value>
</property>
</bean>
</beans>
在上面這個例子中,它從“/WEB-INF/spring-views.xml”加載視圖bean。請看下面的XmlViewResolver示例。
1. Controller控制器
一個控制器類WelcomeController.java,返回一個名為“WelcomePage”的視圖。
//...
public class WelcomeController extends AbstractController{
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView model = new ModelAndView("WelcomePage");
return model;
}
}
2. XmlViewResolver視圖解析器
在Spring的bean配置文件中,注冊XmlViewResolver視圖解析器,從“/WEB-INF/spring-views.xml”加載視圖bean。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
<!--注冊bean -->
<bean class="cn.xuejava.common.controller.WelcomeController" />
<bean class="org.springframework.web.servlet.view.XmlViewResolver" >
<property name="location">
<value>/WEB-INF/spring-views.xml</value>
</property>
</bean>
</beans>
3. 視圖bean
視圖bean就是一個普通的Spring bean,在Spring bean配置文件中聲明。其中:
(1)“id”是要解析的視圖名稱
(2)“class”是視圖的類型
(3)“url”屬性是視圖的url位置
文件:spring-views.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="WelcomePage"
class="org.springframework.web.servlet.view.JstlView">
<property name="url" value="/WEB-INF/jsp/WelcomePage.jsp" />
</bean>
</beans>
解析過程:
當控制器返回一個名為“WelcomePage”的視圖時,XmlViewResolver將在“spring-views.xml”文件中查找id為“WelcomePage”的bean,並返回相對應的視圖URL“/WEB-INF/jsp/WelcomePage.jsp”給DispatcherServlet。