# Spring MVC `InternalResourceViewResolver`配置示例

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

了解如何在 Spring MVC 应用程序中配置`InternalResourceViewResolver`，这有助于解析基于`ViewResolver`类实现以及前缀和后缀属性的视图名称。

## 1\. 什么是视图解析器？

在基于 Spring MVC 的应用程序中，请求处理的最后一步是返回**逻辑视图名称**。 这里`DispatcherServlet`必须将控制委派给视图模板，以便呈现信息。 该**视图模板**根据返回的逻辑视图名称决定应呈现哪个视图。

这些视图模板是在 Web 应用程序上下文中声明的一个或多个**视图解析器** bean。 这些 Bean 必须实现`DispatcherServlet`的`ViewResolver`接口才能自动检测它们。 Spring MVC 带有几个`ViewResolver`实现。

在此示例中，我们将查看这种视图解析器模板，即[`InternalResourceViewResolver`](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/view/InternalResourceViewResolver.html)。

## 2\. Spring `InternalResourceViewResolver`

在大多数 [**Spring MVC**](https://howtodoinjava.com/spring-mvc-tutorial/) 应用程序中，视图直接映射到模板的名称和位置。 `InternalResourceViewResolver`有助于**映射逻辑视图名称以直接查看特定预配置目录**下的文件。

#### 2.1. `InternalResourceViewResolver`配置

要注册`InternalResourceViewResolver`，可以在 Web 应用程序上下文中声明此类型的 Bean。

```java
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

```

可以通过以下方式在 **Java 配置**中编写类似的配置。 这也是 [**SpringBoot**](https://howtodoinjava.com/spring-boot-tutorials/) 的有效配置。

```java
@Bean
 public ViewResolver configureViewResolver() {
     InternalResourceViewResolver viewResolve = new InternalResourceViewResolver();
     viewResolve.setPrefix("/WEB-INF/jsp/");
     viewResolve.setSuffix(".jsp");

     return viewResolve;
 }

```

#### 2.2. 视图解析器示例

完成上述配置后，`InternalResourceViewResolver`将以以下方式解析视图名称`home`和`admin/home`等。

| 逻辑视图名称 | 实际视图文件 |
| --- | --- |
| `home` | `/WEB-INF/jsp/home.jsp` |
| `admin/home` | `/WEB-INF/jsp/admin/home.jsp` |
| `report/main` | `/WEB-INF/jsp/report/main.jsp` |

#### 2.3. 映射不同的视图类型

默认情况下，如果在类路径中存在 JSTL 库（即`jstl.jar`），则`InternalResourceViewResolver`将视图名称解析为`JstlView`类型的视图对象。 因此，如果您的视图是带有 JSTL 标签的 JSP 模板，则可以省略`viewClass`属性。

否则，如果您的视图基于图块，则需要提供匹配的`viewClass`，即`org.springframework.web.servlet.view.tiles2.TilesView`。

## 3\. 如何从控制器返回视图名称

控制器类应以**字符串**形式或`<string>ModelAndView</string>`类的实例的形式返回视图名称。 例如，在给定的控制器类中，它的返回视图名称为`"home"`。

```java
public class HomepageController extends AbstractController{

	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest request,
						HttpServletResponse response) throws Exception 
	{

		ModelAndView model = new ModelAndView("home");

		return model;
	}
}

```

将您的查询添加到评论中 - 与 Spring MVC `InternalResourceViewResolver`配置和示例有关。

学习愉快！