首页 > 其他分享 >springboot_3.2_freemark_基础环境配置

springboot_3.2_freemark_基础环境配置

时间:2023-12-22 23:08:31浏览次数:37  
标签:springboot spring boot freemark springframework 3.2 import org 模板



springboot_3.2_freemark_基础环境配置

  • 一、前言
  • 二、环境
  • 三、相关资料
  • 四、目标
  • 五、默认配置项
  • 六、构建springboot 3.2项目
  • 6.1 pom.xml 内容:
  • 6.2 启动类
  • 6.3 添加ftlh模板
  • 6.4 controller内容
  • 6.5 bootstrap.yml配置
  • 七、总结


一、前言

FreeMarker 是一款模板引擎:即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
模板编写为FreeMarker Template Language (FTL)。它是简单的标签语言。需要在服务器端组织数据,之后通过编写FTL模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据,而在模板之外可以专注于要展示什么数据。

注:从freemarker 2.x 开始模板的默认后缀由 ftl 改为 ftlh(配置类FreeMarkerProperties.DEFAULT_SUFFIX)。

二、环境

  • java 21
  • springboot 3.2

三、相关资料

四、目标

  • sprinboot 3.2 整合freemarker基础配置;
  • 加入freemarker模板;
  • 编写controller将绑定数据输出到模板中;
  • 运行测试页面;

五、默认配置项

  • jar包:spring-boot-autoconfigure-3.2.0.jar
  • 对象:org.springframework.boot.autoconfigure.freemarker.FreeMarkerProperties

六、构建springboot 3.2项目

项目是通过idea脚手架创建,由于2.x不在维护,建项目时通过服务(https://start.spring.io)只能创建springboot3.x项目,如果想要创建低版本可以使用阿里的脚手架(start.aliyun.com)。springboot3.x只支持java 17 及以上版本。所以建项目前先配置好本地的jdk。

idea脚手架服务更改位置:file/New/New Project/Sping Initializr : Server URL start.string.io ,点击后面的齿轮标记修改!

6.1 pom.xml 内容:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.test</groupId>
    <artifactId>test2312</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>test2312</name>
    <description>test2312</description>
    <properties>
        <java.version>21</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

6.2 启动类

其中在@SpringBootApplication注解中屏蔽了DataSourceAutoConfiguration.class的加载,目的是避免出现“
Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.”
错误提示。

因为我们目的只是验证freemarker,不需要数据库相关的依赖,所以不需要配置数据源相关配置。而springboot基础依赖中默认加载了MySQL、Oracle、Mybatis等和数据库相关的依赖包,结果我们的配置文件中却没有添加数据库相关的配置。

package com.test;

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

@SpringBootApplication(exclude = {
        DataSourceAutoConfiguration.class
})
public class StartApplication {

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

}

6.3 添加ftlh模板

freemarker2.x开始默认的后缀由ftl改为ftlh了,使用ftl在freemarker3.x中是找不到的。
模板中对spring、list、map等常用的类型,做了绑定和遍历示例。加了个test目录是需要与后面的controller的地址一致。

模板位置:resources\templates\test\index.ftlh

<html>
<head>
    <title>Welcome!</title>
</head>
</body>
    <br>
    <h1>Welcome ${user} !</h1>
    <br>
    <b>展示list中的数据:</b>
    <p>
        <ul>
        <#list lst as item>
            <li>${item}</li>
        </#list>
        </ul>
        <ul>
        </ul>
    </p>
<p>
    <b>map遍历:key值遍历</b>
    <ul>
    <#assign  keys=map?keys/>
    <#list keys as key>
        <li>key=${key}; value=${map["${key}"]};</li>
    </#list>
    </ul>
    <b>map遍历:直接遍历</b>
    <ul>
        <#list map?keys as key>
            <li>key=${key}; value=${map["${key}"]};</li>
        </#list>
    </ul>
    <b>map遍历:直接遍历值</b>
    <ul>
        <#list map?values as value>
            <li>value=${value};</li>
        </#list>
    </ul>
</p>
</body>
</html>

6.4 controller内容

controller中有两个方法,分别是返回text内容 和 绑定ftlh模板内容。

package com.test.controller;

import lombok.extern.log4j.Log4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.View;

import java.util.Arrays;
import java.util.HashMap;

@Controller
@RequestMapping("/test")
public class TestController {
    private Logger logger = LoggerFactory.getLogger(this.getClass());
    @GetMapping("/hello")
    @ResponseBody
    public String hello(){
        logger.info("hello word~~~");
        return "hello word!";
    }

    @GetMapping("/index.html")
    public String index(Model model){
        model.addAttribute("user","joy");
        var lst = Arrays.asList("11","22","33");
        var lst4empty = new HashMap<>();
        var map = new HashMap<String,Object>(){
            {put("k1",11);}
            {put("k2",22);}
            {put("k3",33);}
        };
        model.addAttribute("lst",lst);
        model.addAttribute("lst4empty",lst4empty);
        model.addAttribute("map",map);
        logger.info("test index ~~~");
        return "/test/index";
    }

}

6.5 bootstrap.yml配置

使用这个配置可以方便做环境切换,启动项目时传入dev这个forfile参数可以读到dev环境配置。

spring:
  profiles.active: ${profile:dev}
  application:
    name: test2312
  http:
    multipart:
      max-file-size: 2MB
      max-request-size: 2MB
---
spring.profiles: dev
spring:
  freemarker:
    templateLoaderPath: classpath:/templates/
    preferFileSystemAccess: true  #支持热加载,默认为true(生产时false)

七、总结

以上就是一个比较基础的整合过程,需要注意的是通过idea构建时依赖尽量选择少的依赖,否则容易出现各种错误。


标签:springboot,spring,boot,freemark,springframework,3.2,import,org,模板
From: https://blog.51cto.com/xxjjing/8938820

相关文章

  • springboot1.x升级到springboot3.x中遇到的问题总结
    springboot1.x升级到springboot3.x中遇到的问题总结springboot1.x升级到springboot3.x中遇到的问题总结前言问题:无法创建DataSource的bean对象,提示url或driverclass未配置问题:引入freemark后页面总是报404问题:bootstrap.yml不生效,配置中的内容无法读取springboot1.x升级到spring......
  • IDEA最新2023.3.2激活教程,亲测有效!
    IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。教程更新于12月22日第一步:下载IDEA安装包访问IDEA官网:https://www.jetbrains.com/idea/download/,点击download,下载IDEA2023.2版本的安装包第二步:卸载老版本IDEA(未安......
  • Spring Framework Reference 5.3.27 - Core Technologies
    目录Chapter1.TheIoCContainerSpringIoC容器和bean介绍Chapter2.ResourcesChapter3.Validation,DataBinding,andTypeConversionChapter4.SpringExpressionLanguage(SpEL)Chapter5.AspectOrientedProgrammingwithSpringChapter6.SpringAOPAPIsChapter......
  • [Halcon] 2023.2月license分享(关注持续更新)
    作者:丶布布友情提示:Halcon18以下版本不再提供HDevelop试用授权License(只有运行License需要配合加密狗),请大家升级到最新版本!Halcon是一款商业化的视觉程序,它封装了很多方便的强大的图像处理算法,很多视觉项目都有用它,与visionpro一样,都是一款商业化的软件,加密狗相当的贵,不过Halcon......
  • SpringBoot系列---【过滤器Filter和拦截器HandlerInterceptor的区别和用法】
    1.作用时机1.1过滤器过滤器(Filter)主要作用在请求到达Servlet或JSP之前,对请求进行预处理,可以对HTTP请求进行过滤、修改。过滤器是基于回调函数实现的,开发人员通过重写doFilter()方法实现过滤逻辑,其主要功能有:权限验证:检查用户是否已经登录或者是否具有相应的权限。数据压......
  • 【Java】Spring、SpringBoot、SpringCloud理解和入门
    关于Spring、SpringBoot、SpringCloud我总结了几点。Spring是轻量级的容器框架,目前大多数项目不直接使用Spring的。SpringBoot是Spring的升级版,主要应用单个微服务,关联性小的项目、规模小、硬件要求不高的项目。SpringCloud基于SpringBoot来实现微服务开发组件。主要应用于规......
  • 【SpringBootWeb入门-17】Mybatis-基础操作-动态SQL
    1、章节回顾上一篇文章我们讲解完了Mybatis基础操作,本篇继续学习Mybatis中非常重要的功能:动态SQL。什么是动态SQL:随着用户的输入或外部条件的变化而变化的SQL语句,我们称为动态SQL。简单说SQL语句不是固定的,是动态变化的。就拿我们上一篇所提到的根据条件来查询员工的SQL语句来......
  • 如何新建SpringBoot2.7.X项目
    新版的idea在创建SpringBoot项目时最低的JDK都需要选择jdk17,可是我的本地只有jdk8,通过创建maven工程,然后在pom中手动填写相关依赖等信息来创建项目,pom文件内容(官网copy的)<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-......
  • SpringBoot原理
    配置SpringBoot中支持三种格式的配置文件.properties.yml.yaml虽然Springboot支持多种文件配置,但是通常在项目开发中,我们一般推荐使用yml文件配置优先级在SpringBoot项目中,常见的属性配置有5种,3种配置文件加上两种外部的配置,生效优先级SrpingBoot配置优先级(低->高):1......
  • JRebel2022.4 + idea23.2.2 插件使用详解
    下载下载jrebel插件(只能下载2022.4版本),其他版本是需要收费的安装中文路径安装将下载的文件解压,放到另一个全部是英文路径的地方例如这个.jrebel是激活后生成的,本来没有很正常在idea中安装插件修改路径最后一步激活地址:https://jrebel.qekang.com/可以......