渲染Web视图
Spring自带的13个视图解析器
视图解析器:描述
BeanNameViewResolver:将视图解析为Spring应用上下文的bean,其中Bean的ID与视图名称相同
ContentNegotiatingViewResolver:通过考虑客户端需要的内容类型来解析视图,委托给另一个能产生对应内容类型的视图解析器
FreeMarkerViewResolver:将视图解析为FreeMarker模板
InternalResourceViewResolver:将视图解析为Web应用的内部资源(一般为jsp)
JasperReportsViewResolver:将视图解析为JasperReports定义
ResourceBundleViewResolver:将视图解析为资源bundle(一般为属性文件)
TilesViewResolver:将视图解析为Apache Tiles定义,其中tiles ID与视图名称相同。
注意两个不同的TilesViewResolver实现,分别对应Tiles2.0和Tiles3.0,Spring3.2及以上才支持
UrlBasedViewResolver:直接根据视图的名称解析视图,视图名称会匹配一个物理视图的定义
VelocityViewResolver:将视图解析为Velocity布局,从不同的Velocity模板中组合页面
XmlViewResolver:将视图解析为特定的XML文件中bean定义,类似于BeanNameViewResolver
XsltViewResolver:将视图解析为XSLT转换后的结果
配置适用于JSP的视图解析器
在使用@Bean注解的是偶,我们可以按照如下方式配置InternalResourceViewResolver
//配置视图解析器
@Bean
public ViewResolver viewResolver(){
InternalResourceViewResolver resolver =
new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
若使用xml的Spring配置,那么可以按照如下的方式配置InternalResourceViewResolver
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/views/" p:suffix="jsp" />
解析JSTL视图
到目前为止,我们对InternalResourceViewResolver的配置都很基础和简单。他最终会将逻辑视图名解析为InternalResourceView实例,这个实例会引用JSP文件。但是如果这些JSP使用JSTL标签来处理格式化和信息的话,么我们会希望InternalResourceViewResolver将视图解析为JstlView。
如果想让InternalResourceViewResolver将视图解析为JstlView,而不是InternalResourceView的话,那么我们只需要设置特德viewClass属性即resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
若是xml配置
添加:p:viewClass=”org.springframework.web.servlet.view.JstlView”
配置Thymeleaf视图解析器
为了在Spring中使用Thymeleaf,我们需要配置三个启用Thymeleaf与Spring集成的bean:
ThymeleafViewResolver:将逻辑视图名称解析为Thymeleaf模板视图
SpringTemplateEngine:处理模板并渲染结果
TemplateResolver:加载Thymeleaf模板
配置如下:
//配置Thymeleaf视图解析器
@Bean
public ViewResolver viewResolver(SpringTemplateEngine springTemplateEngine){
ThymeleafViewResolver thymeleafViewResolver
= new ThymeleafViewResolver();
thymeleafViewResolver.setTemplateEngine(springTemplateEngine);
return thymeleafViewResolver;
}
@Bean
public TemplateResolver templateResolver(){
ServletContextTemplateResolver
resolver = new ServletContextTemplateResolver();
resolver.setPrefix("/WEB-INF/thymeleaf/");
resolver.setSuffix(".html");
resolver.setTemplateMode("HTML5");
resolver.setCacheable(false);
return resolver;
}
@Bean
public SpringTemplateEngine springTemplateEngine(TemplateResolver templateResolver){
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver);
return engine;
}
使用的jar
javassist-3.12.1.GA.jar、slf4j-api-1.7.21.jar、thymeleaf-2.0.16.jar、thymeleaf-spring3-2.0.21.jar
简单的页面
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<title>Content page 1</title>
</head>
<body>
dfsaa
</body>
</html>