一点一滴学习Spring(六)之Spring MVC视图解析器

渲染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

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 1title>
  head>
  <body>
    dfsaa
  body>
html>

你可能感兴趣的:(Spring)