SpringBoot基础实战系列(一)整合视图
下一篇: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基础实战系列(一)整合视图的更多相关文章
- SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter
SpringBoot解析Json格式数据 @ResponseBody 注:该注解表示前端请求后端controller,后端响应请求返回 json 格式数据前端,实质就是将java对象序列化 1.创建C ...
- SpringBoot基础实战系列(三)springboot单文件与多文件上传
springboot单文件上传 对于springboot文件上传需要了解一个类MultipartFile ,该类用于文件上传.我此次使用thymeleaf模板引擎,该模板引擎文件后缀 .html. 1 ...
- 【机器学习算法基础+实战系列】KNN算法
k 近邻法(K-nearest neighbor)是一种基本的分类方法 基本思路: 给定一个训练数据集,对于新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,这k个实例多数属于某个类别,就把输 ...
- 【机器学习算法基础+实战系列】SVM
概述 支持向量机是一种二分类模型,间隔最大使它有别于感知机.支持向量机学习方法由简至繁的模型:线性可分支持向量机(linear support vector machine in linearly s ...
- MP实战系列(七)之集成springboot
springboot是现在比较流行的微服使用的框架,springboot本质上就是将spring+springmvc+mybatis零配置化,基本上springboot的默认配置符合我们的开发.当然有 ...
- MP实战系列(八)之SpringBoot+Swagger2
SpringBoot一个原则,爱好编程的朋友们都知道,那就是"习惯优于配置". 今天一上来主要说的还是代码,个人比较喜欢来的实战系列的,不过有的时候还是比较偏重于理论,理论是造轮子 ...
- 【SpringBoot 基础系列】实现一个自定义配置加载器(应用篇)
[SpringBoot 基础系列]实现一个自定义配置加载器(应用篇) Spring 中提供了@Value注解,用来绑定配置,可以实现从配置文件中,读取对应的配置并赋值给成员变量:某些时候,我们的配置可 ...
- SpringBoot系列——MyBatis-Plus整合封装
前言 MyBatis-Plus是一款MyBatis的增强工具(简称MP),为简化开发.提高效率,但我们并没有直接使用MP的CRUD接口,而是在原来的基础上封装一层通用代码,单表继承我们的通用代码,实现 ...
- 学习SpringBoot,整合全网各种优秀资源,SpringBoot基础,中间件,优质项目,博客资源等,仅供个人学习SpringBoot使用
学习SpringBoot,整合全网各种优秀资源,SpringBoot基础,中间件,优质项目,博客资源等,仅供个人学习SpringBoot使用 一.SpringBoot系列教程 二.SpringBoot ...
随机推荐
- Java中集合概念
集合的由来: 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行储存,而想要储存多个对象,就不能是一个基本的变量,而应该是一个 ...
- pytorch 手写数字识别项目 增量式训练
dataset.py ''' 准备数据集 ''' import torch from torch.utils.data import DataLoader from torchvision.datas ...
- Asp.Net Core 3.1 学习3、Web Api 中基于JWT的token验证及Swagger使用
1.初始JWT 1.1.JWT原理 JWT(JSON Web Token)是目前最流行的跨域身份验证解决方案,他的优势就在于服务器不用存token便于分布式开发,给APP提供数据用于前后端分离的项目. ...
- windows下部署.netcore+docker系列四 (部署程序,重点就要来了)
前面的都是为这章做准备,加油把骚年们 PS:C# 项目可以按照流程一步步来,java 偶然其他的可以找下其他的网上资源 1.在 VS2019中 添加docker 支持 (其实也就是追加一个Docker ...
- 005.Ansible de palybook简单使用
一 Ansible Playbook简介 ansbile-playbook是一系列ansible命令的集合,利用yaml 语言编写.playbook命令根据自上而下的顺序依次执行.同时,playboo ...
- curl的$post传递多维数组
php curl传数组的话只能传一维数组,如果想传多维数组:两个方法: 1.转换成json在传输 2. //通过curl模拟post的请求: function SendDataByCurl($url, ...
- bootstrop日历
https://blog.csdn.net/cuixiaobo521/article/details/77880633
- QT踩坑记录1-Q_OBJECT编译问题
QT踩坑记录1-Q_OBJECT编译问题 QTC++Bugs 错误输出 Q_OBJECT 宏错误的地方会编译出现这样的错误, 无法找到.... 由于自己不想再看到这个错误, 此处 复制自 参考连接1, ...
- JAVA进程CPU高的解决方法
无限循环的while会导致CPU使用率飙升吗?经常使用Young GC会导致CPU占用率飙升吗?具有大量线程的应用程序的CPU使用率是否较高?CPU使用率高的应用程序的线程数是多少?处于BLOCKED ...
- Python 正则表达式——re模块介绍
Python 正则表达式 re 模块使 Python 语言拥有全部的正则表达式功能,re模块常用方法: re.match函数 re.match从字符串的起始位置匹配,如果起始位置匹配不成功,则matc ...