Freemarker入门

news2024/10/5 14:45:33

 Freemarker官网

Template + data-model = output - Apache FreeMarker Manualicon-default.png?t=N7T8https://freemarker.apache.org/docs/dgui_quickstart_basics.html

整体结构


1、在pom文件中导入依赖

  <dependencies>
        <!--spring-boot-start启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--web启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--freemarker模板-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <!--lombok作用实体类-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

    </dependencies>

父工程版本依赖

因为此处引用了父工程的版本依赖,附上

<properties>
        <java.version>1.8</java.version>
        <tomcat.version>8.5.28</tomcat.version>
        <!--<spring-boot.version>2.0.6.RELEASE</spring-boot.version>-->
        <springframework.version>5.0.5.RELEASE</springframework.version>
        <mybatis-spring-boot.version>1.3.1</mybatis-spring-boot.version>
        <mybatis.version>3.4.5</mybatis.version>
        <druid.version>1.1.6</druid.version>
        <commons-io.version>2.6</commons-io.version>
        <org.apache.commons.io.version>1.3.2</org.apache.commons.io.version>
        <commons-fileupload.version>1.3.3</commons-fileupload.version>
        <commons-codec.version>1.10</commons-codec.version>
        <commons-lang3.version>3.6</commons-lang3.version>
        <okhttp.version>3.9.1</okhttp.version>
        <feign-okhttp.version>8.18.0</feign-okhttp.version>
        <lombok.version>1.18.20</lombok.version>
        <springfox-swagger.version>2.7.0</springfox-swagger.version>
        <fastjson.version>1.2.30</fastjson.version>
        <fastdfs-client-java.version>1.27.0.0</fastdfs-client-java.version>
        <mysql-connector-java.version>8.0.11</mysql-connector-java.version>
        <elasticsearch.version>6.2.1</elasticsearch.version>
        <guava.version>24.0-jre</guava.version>
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
        <!--<spring-cloud.version>Finchley.SR1</spring-cloud.version>-->
    </properties>
    <!--test-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- <dependency>
                 <groupId>org.springframework.cloud</groupId>
                 <artifactId>spring-cloud-dependencies</artifactId>
                 <version>Greenwich.RELEASE</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-connector-java.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis-spring-boot.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.2.4</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <dependency>
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp</artifactId>
                <version>${okhttp.version}</version>
            </dependency>
            <dependency>
                <groupId>com.netflix.feign</groupId>
                <artifactId>feign-okhttp</artifactId>
                <version>${feign-okhttp.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons-io.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-io</artifactId>
                <version>${org.apache.commons.io.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>${commons-fileupload.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>${commons-codec.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>${springfox-swagger.version}</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>${springfox-swagger.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
            <dependency>
                <groupId>net.oschina.zcx7878</groupId>
                <artifactId>fastdfs-client-java</artifactId>
                <version>${fastdfs-client-java.version}</version>
            </dependency>

            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-high-level-client</artifactId>
                <version>${elasticsearch.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
            <dependency>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
                <version>${elasticsearch.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${guava.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

2、resources下的页面模板

在resources下新建templates文件夹

并添加页面user.ftl

注意:文件夹名称templates不可改变,页面后缀.ftl不可改变。(在补充解释)

<html>
<head>
    <title>Welcome!</title>
</head>
<body>
<h1>Welcome ${user}!</h1>
<p>Our latest product:
    <a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>

3、application.yml配置

server:
  port: 8888
spring:
  application:
    name: test-freemarker
  freemarker:
    charset: UTF-8
    #suffix:
    cache: false
    settings:
      template_update_delay: 0 #检查模板更新延迟时间,设置为 0 表示立即检查,如果时间大于 0 会有缓存不方便进行模板测试

4、controller层——TestFreemarker 

import com.lxw.pojo.Product;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.Map;

@Controller
public class TestFreemarker {

    @GetMapping
    public String test(Map map){
        map.put("user","李白");
        Product product = new Product();
        product.setUrl("http://www.baidu.com");
        product.setName("百度");
        map.put("latestProduct",product);
        return "user";
    }

}

 5、pojo层——Product 类

package com.lxw.pojo;


import lombok.Data;

@Data
public class Product {
    private String url;
    private String name;

}

6、启动类——TestFreemarkerApplication 

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TestFreemarkerApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestFreemarkerApplication.class,args);
    }

}

启动测试!

最后在启动类中启动测试,访问网址:http://localhost:8888/

补充:

resources下的文件夹和页面名后缀为什么不能随意更改呢?

上依赖文件源码!

 

springboot采用约定大于配置的原则,默认属性都在这里设置,现在明白了吧!

那么如何自定义呢?

问的好! 

答:在application.yml配置文件中给对应属性赋值就会覆盖默认属性,以达到自定义的效果。

例如:修改页面文件的后缀名.ftl为.html,只需要给该属性赋值就好了

先在就可以 以.html结尾了。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1006439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UG\NX二次开发 获取曲面上指定位置的面方向 UF_MODL_ask_face_props

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: UG\NX二次开发 获取曲面上指定位置的面方向 UF_MODL_ask_face_props 效果: 代码: #include "me.hpp" static void AskFaceDir(tag_t face_id, dou…

分库表数据倾斜的处理让我联想到了AKF模型 | 京东云技术团队

1 背景 最近在做需求的时候需要在一张表中增加一个字段。 这张表情况如下&#xff1a; 1、拆分了多个库多张表 2、库表拆分按表中商户编码字段hash之后取模进行拆分 由于库表拆分按照商户编码&#xff0c;有些大商家的单子数量远远要高于其他普通商家&#xff0c;这样就造…

Matlab论文插图绘制模板第113期—带箭头标记的图

之前的文章中&#xff0c;分享了Matlab带线标记的图&#xff1a; 带阴影标记的图&#xff1a; 进一步&#xff0c;分享一下带箭头标记的图&#xff0c;先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载…

蓝桥杯官网练习题(搭积木)

类似题目&#xff1a; https://blog.csdn.net/s44Sc21/article/details/132758982?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132758982%22%2C%22source%22%3A%22s44Sc21%22%7Dhttps://blog.csdn.net/s44Sc21/article/deta…

数据在内存中的存储——练习2

题目&#xff1a; int main() {char a -1;signed char b-1;unsigned char c-1;printf("a%d,b%d,c%d",a,b,c);return 0; }思路分析&#xff1a; signed 是有符号的意思unsigned是无符号的意思练习2是无符号类型以有符号类型打印 注意&#xff1a; char是有符号还是无…

uni-app 前端项目(vue)部署到本地win系统Nginx上

若依移动端的项目&#xff1a;整合了uview开源ui框架&#xff0c; 配置后端请求接口基本路径地址&#xff1a; 打包复现到nginx下&#xff1a; 安装个稳定版本的&#xff1a;nginx-1.24.0 部署配置&#xff1a; 增加了网站&#xff1a;8083端口的&#xff0c; 网站目录在ngi…

C++面试/笔试准备,资料汇总

文章目录 后端太卷&#xff0c;建议往嵌入式&#xff0c;qt&#xff0c;测试&#xff0c;音视频&#xff0c;C一些细分领域投简历。有任何疑问评论区聊&#xff0c;我看到了回复 C面试/笔试准备&#xff0c;资料汇总自我介绍项目实习尽可能有1.编程语言&#xff1a;一.熟悉C语言…

玩转金融新“绿”潮,银行纷纷亮大招

在《开辟绿色金融新赛道&#xff0c;看银行如何“向绿而行”》内容中&#xff0c;我们带大家了解了商业银行绿色金融研究背景、规划与能力建设。今天&#xff0c;我们将继续带大家了解商业银行绿色金融实践路径中的绿色信贷产品、绿色债券产品及绿色投资。 在绿色金融实践中&a…

模板学堂|数据可视化仪表板大屏设计流程梳理

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场&#xff08;https&#xff1a;//dataease.io/templates/&#xff09;。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板&#xff0c;方便用户根据自身的业务需求和使用场景选择对应的仪表板模板&a…

数据在内存中的存储——练习1

题目&#xff1a; int main() {int a[4] { 1,2,3,4 };int* ptrl (int*)(&a 1);int* ptr2 (int*)((int)a 1);printf("%x,%x"&#xff0c;ptr1[-1], *ptr2);return 0; } 思路分析&#xff1a; int* ptrl (int*)(&a 1); ptr1[-1] &a表示的是整个数…

Rapid普通版DVSSL

Rapid普通版DVSSL&#xff0c;是一种单域名SSL证书&#xff0c;很多人买的平台&#xff0c;比如阿里云、腾讯云可能比较贵。 所以公布一下目前Gworg售价是&#xff1a;190元/年&#xff0c;包括技术支持等其它服务。 1、可以帮助域名认证。 2、可以帮助配置SSL证书。 3、有…

ChatGPT AIGC 一分钟列举10个Xlookup案例,快速掌握

Xlookup函数是Excel新版本中的新出的一个函数功能涵盖Vlookup,Hlookup,index+match等相关功能。 `XLOOKUP` 是 Excel 中的一个功能强大的查找函数,它用于查找和返回一个值在数组或范围中的对应值。`XLOOKUP` 函数可以替代 `VLOOKUP` 和 `HLOOKUP`,并提供了一种更直观和灵活…

堆与栈的区别

OVERVIEW 栈与堆的区别一、程序内存分区中的堆与栈1.栈2.堆3.堆&栈 二、数据结构中的堆与栈1.栈2.堆 三、堆的深入1.堆插入2.堆删除&#xff1a;3.堆建立&#xff1a;4.堆排序&#xff1a;5.堆实现优先队列&#xff1a;6.堆与栈的相关练习 栈与堆的区别 自整理&#xff0c;…

重庆两融利率最低给到多少,利率可以调整吗?

​ 在金融市场中&#xff0c;融资融券是投资者常用的一种加杠杆的金融手段。在重庆地区&#xff0c;融资融券也是广泛应用的投资方式。融资是指投资者向券商借入资金进行股票交易&#xff0c;而融券则是指投资者向券商借入股票进行卖出交易。这两个交易方式都需要支付利息费用…

学习记忆——图像篇——图像记忆

一、图像记忆原理 我们要记忆的内容一般包括图像、声音、文字和 数字这几种&#xff0c;按由易到难的顺序将它们排列&#xff1a; 图像——声音——文字——数字 记忆材料 图像 二、超级记忆的基本方法 记忆的三种类型&#xff1a; 1、瞬间记忆 2、短期记忆 短效记忆、长效记…

LED显示屏控制软件发展历程

LED显示屏控制软件的发展历程经历了多个阶段&#xff0c;从最初的简单控制到今天的复杂、高度定制化的解决方案。免费提供户外led显示屏解决方案。 以下是LED显示屏控制软件的主要发展历程&#xff1a; 早期单机控制&#xff1a; 早期的LED显示屏控制软件通常是基于单台计算机的…

smallWhiteDot Tech Suppor

Preview mail: 352056038qq.com

【测试开发】 测试题总结

祝天天开心 文章目录 1. 测试用例编写2. 如何对bug进行描述3. bug状态转换4. 测试人员和开发人员产生争执5. 登录功能测试用例设计6. 测试生命周期7. 1. 测试用例编写 编写水杯的测试用例 注意&#xff0c;测试用例有一个万能公式 功能测试性能测试页面测试安全性测试兼容性测…

【FAQ】视频监控管理平台/视频汇聚平台EasyCVR安全检查相关问题及解决方法3.0

智能视频监控系统/视频云存储/集中存储/视频汇聚平台EasyCVR具备视频融合汇聚能力&#xff0c;作为安防视频监控综合管理平台&#xff0c;它支持多协议接入、多格式视频流分发&#xff0c;视频监控综合管理平台EasyCVR支持海量视频汇聚管理&#xff0c;可应用在多样化的场景上&…

重庆电建:数据中台建设探索与实践

“数字中国”建设浪潮下&#xff0c;强化数据能力、激发数据价值成为各行各业实现高质量发展的重要抓手和关键引擎。然而&#xff0c;确保数据质量、一致性和充分利用其价值&#xff0c;对中大型企业而言&#xff0c;依然具有挑战。数据中台&#xff0c;能够为这些难题提供有效…