下一篇:SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter

SpringBoot整合freemarker

1.添加依赖:springboot基本上是无缝衔接,基本上只需要添加对应的依赖,不需要或者做很少量的配置即可

注:对于springboot项目的创建此处不做说明

 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

2.创建controller

/**
* springboot整合freemarker
*/
@Controller
public class UserController { @GetMapping("/user")
public String user(Model model){
List<User> list = new ArrayList<>();
for (int i = 0 ; i < 10 ; i++){
User user = new User();
user.setId(i);
user.setUsername("shangushenlong>>"+i);
user.setAge(i);
list.add(user);
}
model.addAttribute("users",list);
return "userInfo";
}
}

3.创建bean

public class User {
private Integer id;
private String username;
private Integer age; @Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", age=" + age +
'}';
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
}
}

4.创建freemarker文件(使用idea创建后缀名 .ftl 的文件)

templates文件夹下创建 userInfo.ftl 文件,如果我们不在application.properties更改配置,则springboot会默认自动去templates寻找相关的文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
<tr>
<td>id</td>
<td>姓名</td>
<td>年龄</td>
</tr>
<#list users as user>
<tr>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.age}</td>
</tr>
</#list>
</table>
</body>
</html>

注意:

  • freemarker只是一种模板引擎,你可以将其当成另外一种很类似于jsp的语法的html文件
  • 很可能出现的错误:路由配置正确,但是就是出现404错误,可能原因是需要在配置文件中配置application.properties,指定文件的后缀名 .ftl,因为springboot默认的后缀名很可能不是这个
spring.freemarker.suffix=.ftl

5.以上就是基本的整合配置步骤

SpringBoot整合thymeleaf

1.添加依赖,创建controller,bean等,和上面一样,代码如下

2. 添加依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

3.创建controller

/**
* springboot整合thymeleaf
*/
@Controller
public class StudentController { @GetMapping("/student")
public String stu(Model model){
ArrayList<Student> students = new ArrayList<>();
for (int i = 0 ;i < 10 ; i++) {
Student student = new Student();
student.setId(i);
student.setUsername("shanggushenlong>>" + i);
student.setAge(String.valueOf(i));
students.add(student);
} model.addAttribute("students",students);
return "student";
}
}

4.创建bean

public class Student {
private Integer id;
private String username;
private String age; @Override
public String toString() {
return "StudentController{" +
"id=" + id +
", username='" + username + '\'' +
", age='" + age + '\'' +
'}';
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
}
}

5.创建html文件(thymeleaf模板引擎后缀名 .html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns:th="http://www.w3.org">
<head>
<title>Title</title>
</head>
<body>
<table border="1">
<tr>
<td>id</td>
<td>username</td>
<td>age</td>
</tr>
<tr th:each="stu : ${students}">
<td th:text="${stu.id}"></td>
<td th:text="${stu.username}"></td>
<td th:text="${stu.age}"></td>
</tr>
</table>
</body>
</html>

希望自己能一直保持初衷,文章一直写下去,和大家一起成长

本系列代码github地址:https://github.com/shanggushenlong/springboot-demo

SpringBoot基础实战系列(一)整合视图的更多相关文章

  1. SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter

    SpringBoot解析Json格式数据 @ResponseBody 注:该注解表示前端请求后端controller,后端响应请求返回 json 格式数据前端,实质就是将java对象序列化 1.创建C ...

  2. SpringBoot基础实战系列(三)springboot单文件与多文件上传

    springboot单文件上传 对于springboot文件上传需要了解一个类MultipartFile ,该类用于文件上传.我此次使用thymeleaf模板引擎,该模板引擎文件后缀 .html. 1 ...

  3. 【机器学习算法基础+实战系列】KNN算法

    k 近邻法(K-nearest neighbor)是一种基本的分类方法 基本思路: 给定一个训练数据集,对于新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,这k个实例多数属于某个类别,就把输 ...

  4. 【机器学习算法基础+实战系列】SVM

    概述 支持向量机是一种二分类模型,间隔最大使它有别于感知机.支持向量机学习方法由简至繁的模型:线性可分支持向量机(linear support vector machine in linearly s ...

  5. MP实战系列(七)之集成springboot

    springboot是现在比较流行的微服使用的框架,springboot本质上就是将spring+springmvc+mybatis零配置化,基本上springboot的默认配置符合我们的开发.当然有 ...

  6. MP实战系列(八)之SpringBoot+Swagger2

    SpringBoot一个原则,爱好编程的朋友们都知道,那就是"习惯优于配置". 今天一上来主要说的还是代码,个人比较喜欢来的实战系列的,不过有的时候还是比较偏重于理论,理论是造轮子 ...

  7. 【SpringBoot 基础系列】实现一个自定义配置加载器(应用篇)

    [SpringBoot 基础系列]实现一个自定义配置加载器(应用篇) Spring 中提供了@Value注解,用来绑定配置,可以实现从配置文件中,读取对应的配置并赋值给成员变量:某些时候,我们的配置可 ...

  8. SpringBoot系列——MyBatis-Plus整合封装

    前言 MyBatis-Plus是一款MyBatis的增强工具(简称MP),为简化开发.提高效率,但我们并没有直接使用MP的CRUD接口,而是在原来的基础上封装一层通用代码,单表继承我们的通用代码,实现 ...

  9. 学习SpringBoot,整合全网各种优秀资源,SpringBoot基础,中间件,优质项目,博客资源等,仅供个人学习SpringBoot使用

    学习SpringBoot,整合全网各种优秀资源,SpringBoot基础,中间件,优质项目,博客资源等,仅供个人学习SpringBoot使用 一.SpringBoot系列教程 二.SpringBoot ...

随机推荐

  1. vue axios post请求下载文件,后台springmvc完整代码

     注意请求时要设置responseType,不加会中文乱码,被这个坑困扰了大半天... axios post请求:     download(index,row){         var ts =  ...

  2. 功能测试--聊天功能测试&微信聊天

    微信聊天功能测试 发送对象 普通用户.公众号.群.其他特殊主体 衍生功能 转发.语音转文字.删除等 消息发送 单聊.群聊.语音.文字.图片.表情.链接.字符及长度 消息管理 发布通知.接受通知.发文件 ...

  3. 解决laravel5.4视图不生效的坑

    遇到这种坑,主要是路由的问题 1.看看是不是单词拼错了 Route::get('/posts/{post}','\App\Http\Controllers\PostController@show'); ...

  4. 编写管理IP地址参数脚本(永久性)

    1.用各种命令取出/etc/passwd文件前5行的最后一个字母.(2种) 2.编写管理IP地址参数脚本(永久性) a.只能用sed命令完成 b.提示用户变量赋值(IP.子网掩码.网关.DNS等) c ...

  5. Springboot中,Tomcat启动war包的流程

    将一个SpringBoot项目,打成war包 <!-- 1. 修改POM依赖 --> <dependency> <groupId>org.springframewo ...

  6. ASP.NET Core 找不到 npm指令异常

    1.错误再现 利用VS2019预览版创建ASP.NET Core 的单页面Web程序 创建后直接运行,出现如下错误 Ensure that 'npm' is installed and can be ...

  7. 从「Hello World」说起

    标签: node模块 从一个简单「hello world」程序对 node.js 有个感性的认识. const http = requier ('http'); const pathname = '1 ...

  8. Algorithm Exercises

    汇总一些常见的算法题目,参考代码. 注:部分题目没有合适的oj地址 枚举 Perfect Cubes.Biorhythms.Counterfeit Dollar.EXTENDED LIGHTS OUT ...

  9. localStorage和cookie的跨域解决方案

    原文转自:点我 前言 localStorage和cookie大家都用过,我前面也有文章介绍过,跨域大家也都了解,我前面也有文章详细描述过.但是localStorage和cookie的跨域问题,好多小伙 ...

  10. C++ 函数重载,函数模板和函数模板重载,选择哪一个?

    重载解析 在C++中,对于函数重载.函数模板和函数模板重载,C++需要有一个良好的策略,去选择调用哪一个函数定义(尤其是多个参数时),这个过程称为重载解析. (这个过程将会非常复杂,但愿不要遇到一定要 ...