目录
6.1 理解视图解析
控制器方法和视图的实现会在模型内容上达成一致,这是两者的最大关联,除此之外,两者应该保持足够的距离。
Spring MVC 定义了一个 ViewResolver 接口,它有一个 resolveViewName(String viewName,Locale locale) 方法,接收传入的 视图名和 Locale 对象。返回值是一个 View。View 接口的任务就是接受模型以及Servlet的request和response对象,并将输出结果渲染到response中。Spring 内置了多个 ViewResolver 实现
6.2 创建 JSP 视图
6.2.1 配置适用于 JSP 的视图解析器
InternalResourceViewResolver是最简单和最常用的视图解析器。它遵循一种约定,会在视图名上添加前缀和后缀,进而确定一个Web应用中视图资源的物理路径。
用@Bean注解的时候,我们可以按照如下的方式配置InternalResourceViewResolver
用XML配置:
如果想让InternalResourceViewResolver将视图解析为JstlView,而不是InternalResourceView的话,那么我们只需设置它的viewClass属性即可:
resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
6.2.2 使用Spring的JSP库
Spring提供了两个JSP标签库,用来帮助定义Spring MVC Web的视图。其中一个标签库会用来渲染HTML表单标签,这些标签可以绑定model中的某个属性。另外一个标签库包含了一些工具类标签
6.3 使用 Apache Tiles 视图定义布局
6.3.1 配置Tiles视图解析器
在Spring中使用Tiles,需要配置一个 TilesConfigurer bean,它会负责定位和加载Tile定义并协调生成Tiles。还需要TilesViewResolver bean 将逻辑视图名称解析为Tile定义。
当配置TilesConfigurer的时候,所要设置的最重要的属性就是definitions。这个属性接受一个String类型的数组,其中每个条目都指定一个Tile定义的XML文件。
定义 Tiles
ApacheTiles提供了一个文档类型定义(document type definition,DTD),用来在XML文件中指定Tile的定义。每个定义中需要包含一个<definition>元素,这个元素会有一个或多个<put-attribute>元素
引用其他模板来创建视图:
6.4 使用Thymeleaf
Thymeleaf模板是原生的,不依赖于标签库。它能在接受原始HTML的地方进行编辑和渲染。
6.4.1 配置Thymeleaf视图解析器
要在Spring中使用Thymeleaf,我们需要配置三个启用Thymeleaf与Spring集成的bean:
- ThymeleafViewResolver:将逻辑视图名称解析为Thymeleaf模板视图;
- SpringTemplateEngine:处理模板并渲染结果;
- TemplateResolver:加载Thymeleaf模板。
ThymeleafViewResolver是Spring MVC中ViewResolver的一个实现类。像其他的视图解析器一样,它会接受一个逻辑视图名称,并将其解析为视图
SpringTemplateEngine会在Spring中启用Thymeleaf引擎,用来解析模板,并基于这些模板渲染结果。
TemplateResolver会最终定位和查找模板。与之前配置InternalResourceViewResolver类似,它使用了prefix和suffix属性。前缀和后缀将会与逻辑视图名组合使用,进而定位Thymeleaf引擎
6.4.2 定义 Thymeleaf 模板
Thymeleaf通过自定义的命名空间,为标准的HTML标签集合添加Thymeleaf属性。
示例:
thymeleaf 官网:https://www.thymeleaf.org/