# Spring MVC `XmlViewResolver`配置示例

> 原文： [https://howtodoinjava.com/spring-mvc/spring-mvc-xmlviewresolver-configuration-example/](https://howtodoinjava.com/spring-mvc/spring-mvc-xmlviewresolver-configuration-example/)

在基于 Spring MVC 的应用程序中，请求处理的最后一步是返回逻辑视图名称。 这里`DispatcherServlet`必须将控制委派给视图模板，以便呈现信息。 该视图模板根据返回的逻辑视图名称决定应呈现哪个视图。 这些视图模板是在 Web 应用程序上下文中声明的一个或多个视图解析器 bean。 这些 bean 必须实现`DispatcherServlet`的`ViewResolver`接口才能自动检测到它们。 Spring MVC 附带了几个`ViewResolver`实现。 在此示例中，我们将查看这样的视图解析器模板，即[`XmlViewResolver`](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/view/XmlViewResolver.html)。

与[`InternalResourceViewResolver`](https://howtodoinjava.com/spring/spring-mvc/spring-mvc-internalresourceviewresolver-configuration-example/)相反，其中每个逻辑视图名称都直接映射到视图的物理位置，在`XmlViewResolver`的情况下，视图被声明为 Spring bean。 您可以在与 Web 应用程序上下文相同的配置文件中声明视图 Bean，但最好将它们隔离在单独的配置文件中。

默认情况下， `XmlViewResolver`从`/WEB-INF/views.xml`加载视图 bean，但是可以通过**位置**属性覆盖此位置。

```java
<bean class="org.springframework.web.servlet.view.XmlViewResolver">
    <property name="location">
        <value>/WEB-INF/admin-views.xml</value>
    </property>
</bean>

```

在`admin-views.xml`配置文件中，您可以通过设置类名称和属性来将每个视图声明为普通的 Spring bean。 例如

```java
<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-3.0.xsd">

    <bean id="home" class="org.springframework.web.servlet.view.JstlView">
        <property name="url" value="/WEB-INF/jsp/home.jsp" />
    </bean>

    <bean id="admin/home" class="org.springframework.web.servlet.view.JstlView">
        <property name="url" value="/WEB-INF/jsp/admin/home.jsp" />
    </bean>

    <bean id="logOffRedirect" class="org.springframework.web.servlet.view.RedirectView">
        <property name="url" value="home" />
    </bean>
</beans>

```

上面配置中的前两个 bean 非常明显。 逻辑视图名称`home`映射到`/WEB-INF/jsp/home.jsp`，而`admin / home`映射到`/WEB-INF/jsp/admin/home.jsp`。

第三个 bean 不映射任何物理视图文件，而是将请求重定向到 URL `home`，该 URL 实际上由 URL`/home`的控制器处理。 无论控制器将返回什么逻辑名称，都将在 bean 映射中查找该视图，然后获取实际的视图文件。

如果有什么需要更多的解释的话，请问我。

**祝您学习愉快！**