Spring MVC中的ViewResolver指南

A Guide to the ViewResolver in Spring MVC

1.概述

所有MVC框架都提供了一种处理视图的方法。

Spring通过视图解析器来做到这一点,该视图解析器使您可以在浏览器中呈现模型,而无需将实现绑定到特定的视图技术。

ViewResolver将视图名称映射到实际视图。

Spring框架附带了很多视图解析器,例如InternalResourceViewResolver,XmlViewResolver,ResourceBundleViewResolver等。

这是一个简单的教程,显示了如何设置最常见的视图解析器以及如何在同一配置中使用多个ViewResolver。

2. Spring Web配置

让我们从Web配置开始;我们将使用@ EnableWebMvc,@ Configuration和@ComponentScan对其进行注释:

1
2
3
4
5
6
@EnableWebMvc
@Configuration
@ComponentScan("com.baeldung.web")
public class WebConfig implements WebMvcConfigurer {
    // All web configuration will go here
}

在这里,我们将在配置中设置视图解析器。

3.添加一个InternalResourceViewResolver

此ViewResolver允许我们将属性(例如前缀或后缀)设置为视图名称,以生成最终的视图页面URL:

1
2
3
4
5
6
7
8
@Bean
public ViewResolver internalResourceViewResolver() {
    InternalResourceViewResolver bean = new InternalResourceViewResolver();
    bean.setViewClass(JstlView.class);
    bean.setPrefix("/WEB-INF/view/");
    bean.setSuffix(".jsp");
    return bean;
}

对于 如此简单 在该示例中,我们不需要控制器来处理请求。

我们只需要一个简单的jsp页面,该页面位于配置中定义的/ WEB-INF / view文件夹中:

1
2
3
4
5
6
<html>
    <head></head>
   
        This is the body of the sample view
   
</html>

4.添加一个ResourceBundleViewResolver

作为此解析器的名称,建议ResourceBundleViewResolver在ResourceBundle中使用bean定义。

首先,我们将ResourceBundleViewResolver添加到之前的配置中:

1
2
3
4
5
6
@Bean
public ViewResolver resourceBundleViewResolver() {
    ResourceBundleViewResolver bean = new ResourceBundleViewResolver();
    bean.setBasename("views");
    return bean;
}

捆绑软件通常是在类文件中的属性文件中定义的。以下是views.properties文件:

1
2
sample.(class)=org.springframework.web.servlet.view.JstlView
sample.url=/WEB-INF/view/sample.jsp

我们也可以将上面示例中定义的简单jsp页面用于此配置。

5.添加一个XmlViewResolver

ViewResolver的此实现接受以XML编写的配置文件,该配置文件的DTD与Spring的XML bean工厂相同。

1
2
3
4
5
6
@Bean
public ViewResolver xmlViewResolver() {
    XmlViewResolver bean = new XmlViewResolver();
    bean.setLocation(new ClassPathResource("views.xml"));
    return bean;
}

下面是配置文件views.xml:

1
2
3
<bean id="xmlConfig" class="org.springframework.web.servlet.view.JstlView">
    <property name="url" value="/WEB-INF/view/xmlSample.jsp" />
</bean>

与之前的示例相同 我们可以使用 简单 jsp 页面已定义 <以前是span class =" hps">。

6.链接ViewResolvers并定义订单优先级

Spring MVC还支持多个视图解析器。

这使您在某些情况下可以覆盖特定的视图。我们可以通过在配置中添加多个解析器来简单地链接视图解析器。

完成此操作后,我们需要为这些解析器定义一个顺序。 order属性用于定义链中调用的顺序。 order属性(最大订单号)越高,视图解析器在链中的位置就越晚。

要定义顺序,我们可以将以下代码行添加到视图解析器的配置中:

1
bean.setOrder(0);

请注意顺序优先级,因为InternalResourceViewResolver应该具有较高的顺序–因为它旨在表示非常明确的映射。而且,如果其他解析器具有更高的顺序,则可能永远不会调用InternalResourceViewResolver。

7.结论

在本教程中,我们使用Java配置配置了视图解析器链。通过使用顺序优先级,我们可以设置其调用顺序。

可以在github项目中找到此简单教程的实现–这是一个基于Eclipse的项目,因此应易于导入和按原样运行。