Spring整合FreeMarker生成静态页面(静态模板)

页面静态化介绍

当我们访问类似于商品详情页这种页面,里面的数据都是查询数据库来的,
就是对于这种页面来说,每次用户访问这中页面都需要查询数据库获取动态数据进行展示,而且这种页面的访问量是比较大的,这就对数据库造成了很大的访问压力,并且数据库中的数据变化频率并不高。那我们需要通过什么方法为数据库减压并提高系统运行性能呢?答案就是页面静态化。
页面静态化其实就是将原来的动态网页(例如通过ajax请求动态获取数据库中的数据并展示的网页)改为通过静态化技术生成的静态网页,这样用户在访问网页时,服务器直接给用户响应静态html页面,没有了动态查询数据库的过程。
那么这些静态HTML页面还需要我们自己去编写吗?其实并不需要,我们可以通过专门的页面静态化技术帮我们生成所需的静态HTML页面,例如:Freemarker、thymeleaf等。

1、导入FreeMarker依赖

<dependency>
    <groupId>org.freemarkergroupId>
    <artifactId>freemarkerartifactId>
    <version>2.3.23version>
dependency>

2、在spring的配置文件中配置FreeMarkerConfigurer对象

<bean id="freemarkerConfig"
      class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    
    <property name="templateLoaderPath" value="/WEB-INF/ftl/" />
    
    <property name="defaultEncoding" value="UTF-8" />
bean>

<context:property-placeholder location="classpath:freemarker.properties"/>

3、定义模板
​ 在模板里面使用的注意事项:
​ 1、文本,直接输出的部分
​ 2、注释,即<#–…-->格式不会输出
​ 3、插值(Interpolation):即${…}部分,
​ 将使用数据模型中的部分替代输出
​ 4、FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以
​ 区分,不会输出
​ Freemarker的模板文件后缀可以任意,一般建议为ftl

4、定义生成模板文件的工具类

参数:模板名称、生成的静态页面的名称、注入到静态页面的数据

public void generateHtml(String templateName,String htmlPageName,Map<String,
Object> dataMap){
    Configuration configuration = freeMarkerConfigurer.getConfiguration();
    Writer out = null;
        try {
            // 加载模版文件
            Template template = configuration.getTemplate(templateName);
            // 生成数据
            File docFile = new File(outputpath + "\\" + htmlPageName);
            out = new BufferedWriter(new OutputStreamWriter(new 	FileOutputStream(docFile)));
            // 输出文件
            template.process(dataMap, out);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != out) {
                    out.flush();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
}

你可能感兴趣的:(Spring)