美文网首页Spring-webmvc
配置视图解析器

配置视图解析器

作者: xzz4632 | 来源:发表于2019-07-09 09:09 被阅读0次

    1. ViewResolver

    spring内置的ViewResolver实现.

    ViewResolver 视图技术 说明
    InternalResourceViewResolver JSP 将视图解析为内部资源文件, 一般为JSP

    2. 视图配置

    2.1 JSP视图配置
    2.1.1基础配置
    • java配置:
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver vr = new InternalResourceViewResolver();
        vr.setPrefix("/WEB-INF/view/");
        vr.setSuffix(".jsp");
        return vr;
    }
    
    • xml配置:
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--指定视图文件所在位置-->
        <!--前缀,指视图文件定义在view文件夹下-->
        <property name="prefix" value="/WEB-INF/view/"/>
        <!--视图文件名的后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
    

    注意:此时DispatcherServleturl-pattern配置为/, 否则可能无法访问jsp文件.

    2.1.2使用JSTL标签

    使用JSTL标签, 则指定InternalResourceViewResolverviewClass属性为org.springframework.web.servlet.view.JstlView.
    即添加如下配置:

    xml:配置
    <property name="viewClass" class="org.springframework.web.servlet.view.JstlView"/>
    
    java配置:
    setViewClass("org.springframework.web.servlet.view.JstlView");
    

    注:JSTL全称为JavaServer Pages Standard Tag Library.

    2.1.3使用spring标签库
    • 在jsp页面引入spring表单标签库
    <%@ uri="http://www.springframework.org/tags/form" prefix="form"%>
    

    标签示例:

    <form:input path="user.name"/>
    
    • 在jsp页面使用spring通用标签库
    <%@ uri="http://www.springframework.org/tags" prefix="spring"%>
    

    标签示例:

    <spring:bind path=""/>
    
    2.2 Apache Tiles视图配置

    它的作用是定义视图布局, 即提供公共的页面部分. 现用Apache Tiles3. 了解.

    3. 配置Thymeleaf视图

    注:Thymeleaf与spring的集成由Thymeleaf负责, 所以要引入相应的依赖.

    3.1 引入依赖
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring5</artifactId>
        <version>3.0.11.RELEASE</version>
    </dependency>
    
    3.2 配置
    • xml配置:
    <!-- 视图解析器 -->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="templateEngine" ref="templateEngine"/>
    </bean>
    
    <!-- 模板引擎 -->
    <bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
        <property name="templateResolver" ref="templateResolver"/>
    </bean>
        
    <!-- 模板解析器 -->
    <bean id="templateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
        <property name="prefix" value="/WEB-INF/thymeleaf/"/>
        <property name="suffix" value=".html"/>
        <property name="templateMode" value="HTML5"/>
    </bean>
    

    4. 配置Freemarker视图

    4.1 引入依赖
    • freemarker依赖
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.28</version>
    </dependency>
    
    • spring-context-support依赖
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>5.1.8.RELEASE</version>
    </dependency>
    

    注:如果没有这个依赖, 会提示org.springframework.ui.freemarker.FreeMarkerCofigurationFactory找不到异常.

    4.2 配置
        <!-- 配置freeMarker的模板路径 -->
        <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
            <property name="templateLoaderPath" value="/WEB-INF/freemarker/" /><!--注意这儿不要添加classpath-->
            <property name="defaultEncoding" value="utf-8" />
            <property name="freemarkerVariables">
                <map>
                    <entry key="xml_escape" value-ref="fmXmlEscape" />
                </map>
            </property>
            <property name="freemarkerSettings">
                <props>
                    <prop key="template_update_delay">0</prop>
                    <prop key="default_encoding">UTF-8</prop>
                    <prop key="number_format">0.##########</prop>
                    <prop key="date_format">yyyy-MM-dd</prop>
                    <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
                    <prop key="locale">zh_CN</prop>
                    <prop key="classic_compatible">true</prop>
                    <prop key="template_exception_handler">ignore</prop>
                </props>
            </property>
        </bean>
        <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>
    
        <!-- 配置freeMarker视图解析器 -->
        <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
            <property name="contentType" value="text/html;charset=UTF-8"></property>
            <property name="requestContextAttribute" value="request" />
            <property name="exposeSpringMacroHelpers" value="true" />
            <property name="exposeRequestAttributes" value="true" />
            <property name="exposeSessionAttributes" value="true" />
            <property name="cache" value="true" />
            <property name="prefix" value="" />
            <property name="suffix" value=".ftl" />
            <property name="order" value="0"/>
        </bean>
    

    5. spring提供了ViewResolver

    ViewResolver 说明
    AbstractCachingViewResolver 它的子类能缓存它们解析的视图实例, 这提高了性能, 可通过设置cache属性为false来禁用缓存, 也可以通过removeFromCache()方法来刷新视图.
    BeanNameViewResolver 将视图解析为Spring容器中的bean(bean的id与视图名相同)
    ContentNegotiatingViewResolver 根据客户端需要的content type来解析视图, 委托给另外一个能生成对应类型视图的解析器生成视图
    FreeMarkerViewResolver 使用FreeMarker生成视图
    InternalResourceViewResolver 将视图解析为web应用的内部资源, 一般为JSP
    ResourceBundleViewResolver 将视图解析为资源bundle(一般为属性文件)
    TilesViewResolver 解析Apache Tile视图
    UrlBaseViewResolver 根据视图名称解析视图
    XmlViewResolver 将视图解析为特定xml文件中的bean定义
    XsltViewResolver 解析XSLT视图

    相关文章

      网友评论

        本文标题:配置视图解析器

        本文链接:https://www.haomeiwen.com/subject/icaohctx.html