原文: 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
。
2. Spring InternalResourceViewResolver
在大多数 Spring MVC 应用程序中,视图直接映射到模板的名称和位置。 InternalResourceViewResolver
有助于映射逻辑视图名称以直接查看特定预配置目录下的文件。
2.1. InternalResourceViewResolver
配置
要注册InternalResourceViewResolver
,可以在 Web 应用程序上下文中声明此类型的 Bean。
<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 的有效配置。
@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"
。
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
配置和示例有关。
学习愉快!