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;
	}
 
posted on 2019-04-22 16:57  dreamstar  阅读(250)  评论(0编辑  收藏  举报