SpringMVC 视图解析器
1.视图解析器 会 根据 把控制器返回的逻辑视图名 确定 渲染模型的视图文件的物理位置。
Spring MVC的一个重要特性:将控制器中处理请求的逻辑 和 视图中渲染实现 解耦。 控制器方法和视图实现 只会在模型内容上保持一致,这是两者最大的关联。
2.Spring提供了13个视图解析器,能够将逻辑视图名 转换为 物理实现。其中 每一项都对应Java Web应用中特定的某种视图技术。
视图解析器InternalResourceViewResolver 一般会用来解析JSP视图。JSP曾经是,而且现在依然还是Java领域占主导地位的视图技术
3.配置解析JSP的视图解析器
Spring MVC中 InternalResourceViewResolver是最简单和最常用的视图解析器 能将视图名映射为JSP文件
JavaConfig中配置如下 参考 搭建Spring MVC Web项目----JavaConfig
如下配置 home 解析为“/WEB-INF/views/home.jsp”
books/detail 解析为“/WEB-INF/views/books/detail.jsp”
@Bean
public ViewResolver viewResolver() { // 配置 试图解析器
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("WEB-INF/views");
viewResolver.setSuffix(".jsp");
viewResolver.setExposeContextBeansAsAttributes(true);
return viewResolver;
}
XML配置 参考 搭建 Spring MVC WEB项目----XML配置
<!-- 视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
4.标签库
参考 SpringMvc对JSP的支持---支持JSTL标签库
5.Spring对JSP标签库的支持--解析JSTL视图
参考SpringMvc对JSP的支持---支持JSTL标签库
6.Spring对JSP标签库的支持--Spring的JSP标签库
参考 SpringMVC对JSP的支持---Spring的JSP标签库---Spring通用标签库
7.Thymeleaf 视图
以上讲的是在Spring 中集成JPS视图 有时候项目中需要使用Thymeleaf视图。为了在Spring 中使用Thymeleaf,需要配置三个 启用Thymeleaf与Spring集成的 bean。这样 应用程序就可以将响应中的模板渲染到Spring MVC控制器所处理的请求中。Java配置如下:
ThymeleafViewResolver是Spring MVC中viewResolver的一个实现类。像其他(JSP)视图解析器一样,接收一个逻辑视图名并将其解析为Thymeleaf模板视图,它解析成的视图是一个Thymeleaf模板。SpringTemplateEngine会在Spring中启用Thymeleaf引擎,用来解析模板,并基于这些模板渲染结果。TemplateResovler 加载Thymeleaf模板 ,与JSP的InternalResourceViewResolver类似,它也是通过prefix和suffix来定位Thymeleaf引擎 最终定位和查找模板。
这还有个问题 TemplateResolver 没找到是哪个jar包里的
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.ViewResolver;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
// Thymeleaf 视图解析器
@Bean
public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine);
return viewResolver;
}
// 模板引擎
@Bean
public TemplateEngine templateEngine(TemplateResolver templateResolver) {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
return templateEngine;
}
// 模板解析器
@Bean
public TemplateResolver templateResolver() {
TemplateResolver templateResolver = new ServletContextTemplateResolver(null);
templateResolver.setPrefix("WEB-INF/templates/");
templateResolver.setSuffix(".html");
//要解析的模板会渲染成HTML 5输出
templateResolver.setTemplateModel("HTML5");
return templateResolver;
}