• spring使用thymeleaf


    一、spring使用thymeleaf做解析器其实很简单,这是基于xml配置的方式

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd">
        <context:component-scan base-package="com.test.controller"></context:component-scan>
        <!-- 开启mvc注解,可使用@DateTimeFormat,@NumberFormat -->
        <mvc:annotation-driven></mvc:annotation-driven>
    
        <!-- 告知静态文件不要拦截,直接访问,这种方式下面那种要好在可以访问web-info下的资源 -->
        <mvc:resources location="/WEB-INF/css/" mapping="/css/**"></mvc:resources>
        <mvc:resources location="/WEB-INF/js/" mapping="/js/**"></mvc:resources>
        <mvc:resources location="/WEB-INF/images/" mapping="/images/**"></mvc:resources>
    
        <!-- 配置默认servlet静态资源访问 -->
        <!-- <mvc:default-servlet-handler/> -->
    
        <!-- SpringResourceTemplateResolver automatically integrates with Spring's 
            own -->
        <!-- resource resolution infrastructure, which is highly recommended. -->
        <bean id="templateResolver"
            class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
            <property name="prefix" value="/WEB-INF/templates/" />
            <property name="suffix" value=".html" />
            <!-- HTML is the default value, added here for the sake of clarity. -->
            <property name="templateMode" value="HTML" />
            <!-- Template cache is true by default. Set to false if you want -->
            <!-- templates to be automatically updated when modified. -->
            <property name="cacheable" value="false" />
        <property name="characterEncoding" value="UTF-8"/>
    </bean> <!-- SpringTemplateEngine automatically applies SpringStandardDialect and --> <!-- enables Spring's own MessageSource message resolution mechanisms. --> <bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine"> <property name="templateResolver" ref="templateResolver" /> <!-- Enabling the SpringEL compiler with Spring 4.2.4 or newer can speed up --> <!-- execution in most scenarios, but might be incompatible with specific --> <!-- cases when expressions in one template are reused across different data --> <!-- ypes, so this flag is "false" by default for safer backwards --> <!-- compatibility. --> <property name="enableSpringELCompiler" value="true" /> </bean> <bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver"> <property name="templateEngine" ref="templateEngine" /> <!-- NOTE 'order' and 'viewNames' are optional --> <property name="order" value="1" />
            <property name="characterEncoding" value="UTF-8"/>
    <!-- Controller中返回的视图名后缀包含leaf的,才会进行解析 --> <!-- <property name="viewNames" value="*leaf" /> --> </bean> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsps/" /> <property name="suffix" value=".jsp" /> <property name="order" value="2" /> <!-- Controller中返回的视图名后缀包含jsp的,才会进行解析 --> <!-- <property name="viewNames" value="*jsp" /> --> </bean> </beans>

    和我们传统的配置文件相比,也就多增加了红色的部分,如果你的项目不会使用到jsp,那么就没有必要再配置jsp的解析器了

    二、基于注解的配置,首先这个web.xml需要改动成下面这个样子

    <?xml version="1.0" encoding="utf-8"?>
    
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                          http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        version="3.1" metadata-complete="true">
    
        <!-- Configure ContextLoaderListener to use AnnotationConfigWebApplicationContext
            instead of the default XmlWebApplicationContext -->
        <context-param>
            <param-name>contextClass</param-name>
            <param-value>
                org.springframework.web.context.support.AnnotationConfigWebApplicationContext
            </param-value>
        </context-param>
    
        <!-- Configuration locations must consist of one or more comma- or space-delimited
            fully-qualified @Configuration classes. Fully-qualified packages may also be
            specified for component-scanning -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>com.test.dao.configure.ApplicationConfigure</param-value>
        </context-param>
    
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    
        <servlet>
            <servlet-name>springMVC</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- Configure DispatcherServlet to use AnnotationConfigWebApplicationContext
                instead of the default XmlWebApplicationContext -->
            <init-param>
                <param-name>contextClass</param-name>
                <param-value>
                    org.springframework.web.context.support.AnnotationConfigWebApplicationContext
                </param-value>
            </init-param>
            <!-- Again, config locations must consist of one or more comma-(逗号) or space-delimited(空格)
                and fully-qualified @Configuration classes -->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>com.test.mvc.configure.SpringWebConfig</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>springMVC</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        <filter>
            <filter-name>characterEncodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
            <init-param>
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>characterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
    </web-app>

    标红部分就是与传统web.xml配置的区别。

    下面是声明thymeleaf的java配置方式

    package com.test.mvc.configure;
    
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.support.ResourceBundleMessageSource;
    import org.springframework.format.FormatterRegistry;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    import org.thymeleaf.spring4.SpringTemplateEngine;
    import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver;
    import org.thymeleaf.spring4.view.ThymeleafViewResolver;
    import org.thymeleaf.templatemode.TemplateMode;
    
    import com.test.fomatter.MyDateFormatter;
    
    @Configuration
    @EnableWebMvc
    

      @ComponentScan(basePackages = { "com.test.controller" }, includeFilters = {
      @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {
                org.springframework.stereotype.Controller.class }) })

    public class SpringWebConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware {
        private ApplicationContext applicationContext;
    
        public SpringWebConfig() {
            super();
        }
    
        public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
            this.applicationContext = applicationContext;
        }
    
        /* ******************************************************************* */
        /* GENERAL CONFIGURATION ARTIFACTS */
        /* Static Resources, i18n Messages, Formatters (Conversion Service) */
        /*配置静态资源,i18n 信息, 格式转换器*/
        /* ******************************************************************* */
        @Override
        public void addResourceHandlers(final ResourceHandlerRegistry registry) {
            super.addResourceHandlers(registry);
            registry.addResourceHandler("/images/**").addResourceLocations("/images/");
            registry.addResourceHandler("/css/**").addResourceLocations("/css/");
            registry.addResourceHandler("/js/**").addResourceLocations("/js/");
        }
    
        @Bean
        public ResourceBundleMessageSource messageSource() {
            ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
            //设置国际化资源的baseName
            messageSource.setBasename("Messages");
            return messageSource;
        }
    
    
    
        /**
         * 添加转换器
         */
        @Override
        public void addFormatters(final FormatterRegistry registry) {
            super.addFormatters(registry);
            registry.addFormatter(varietyFormatter());
        }
    
        @Bean
        public MyDateFormatter varietyFormatter() {
            return new MyDateFormatter("yyyy-MM-dd");
        }
    
    
        /* **************************************************************** */
        /* THYMELEAF-SPECIFIC ARTIFACTS */
        /* TemplateResolver <- TemplateEngine <- ViewResolver */
        /* **************************************************************** */
        /**
         * thymeleaf的模板解析器
         * @return
         */
        @Bean
        public SpringResourceTemplateResolver templateResolver() {
            // SpringResourceTemplateResolver automatically integrates with Spring's
            // own
            // resource resolution infrastructure, which is highly recommended.
            SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
            templateResolver.setApplicationContext(this.applicationContext);
            
            templateResolver.setPrefix("/WEB-INF/templates/");
            
            templateResolver.setSuffix(".html");
            // HTML is the default value, added here for the sake of clarity.
            //模板解析模式使用HTML模式
            templateResolver.setTemplateMode(TemplateMode.HTML);
            // Template cache is true by default. Set to false if you want
            // templates to be automatically updated when modified.
            //是否缓存模板,默认是true,不过在调试的时候最好是false,因为模板随时需要改变
            templateResolver.setCacheable(false);
         templateResolver.setCharacterEncoding("utf-8");
    return templateResolver; } /** * thymeleaf的模板引擎 * @return */ @Bean public SpringTemplateEngine templateEngine() { // SpringTemplateEngine automatically applies SpringStandardDialect and // enables Spring's own MessageSource message resolution mechanisms. SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver()); // Enabling the SpringEL compiler with Spring 4.2.4 or newer can // speed up execution in most scenarios, but might be incompatible // with specific cases when expressions in one template are reused // across different data types, so this flag is "false" by default // for safer backwards compatibility. templateEngine.setEnableSpringELCompiler(true); return templateEngine; } /** * thymeleaf的视图解析器 * @return */ @Bean public ThymeleafViewResolver viewResolver() { ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setTemplateEngine(templateEngine());
            templateResolver.setCharacterEncoding("utf-8");
         return viewResolver; 
      }
    }
  • 相关阅读:
    [转]C# DirectShow 播放多媒体
    有机会学学小魔术
    [文摘20080919]小软件将网页变为3D世界
    [转]在IE中使用VS.net WinForm控件
    C# WinFrom SplitContainer和UserControl组成简单的类似于web系统的框架页
    [转].NET下对二进制文件进行加密解密(C#)
    C# aspx页面动态加载ascx用户控件 及 利用反射调用其内方法
    [转]在WinForm中通过HTTP协议向服务器端上传文件
    投入热忱 勇往直前
    [转]c# winFrom 使窗体显示SplitContainer或Panel中
  • 原文地址:https://www.cnblogs.com/honger/p/6875148.html
Copyright © 2020-2023  润新知