thymeleaf与freemarker不能同时使用。因此他们两的依赖包不能同时存在于pom.xml文件中。另外说明:使用了thymeleaf与freemarker后,我们创建页面不再是去webapp文件夹下创建,而是去templates文件夹下创建。freemarker主要区别在于application.properties属性文件中的差异,freemarker更向我们平常使用的jsp页面
freemark就是用来让controller层跳转去页面的
freemarker在页面中的语法
Freemarker提供的标签
Freemarker提供了很多有用 常用的标签,Freemarker标签都是<#标签名称>这样子命名的,${value} 表示输出变量名的内容 ,具体如下:
4.1、<#list>: 遍历后台传给页面的集合
该标签主要是进行迭代服务器端传递过来的List集合,比如:
<#list nameList as names>
${names}
</#list>
names是list循环的时候取的一个循环变量,freemarker在解析list标签的时候,等价于:
for (String names : nameList) {
System.out.println(names);
}
4.2、if
该标签主要是做if判断用的,比如:
<#if (names=="谢大脚")>
执行语句
</#if>
注意:if后面有空格
这个是条件判断标签,要注意的是条件等式必须用括号括起来, 等价于:
if(names.equals("陈靖仇")){
System.out.println("他的武器是: 十五~~");
}
4.3、==include:==引入文件
该标签用于导入文件用的。
<#include "include.html"/>
这个导入标签非常好用,特别是页面的重用。
4.4、使用${}取值:就和el表达式一样使用
另外在静态文件中可以使用${} 获取值,取值方式和el表达式一样,非常方便。
以下是springboot使用freemarker与页面整合步骤↓
本案例是用IDEA创建的Maven的web项目
步骤一:在pom.xml文件中翻入依赖
<!--parent是继承,描述关系.体现maven的继承性-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.5.RELEASE</version>
<relativePath/>
</parent>
注意< dependency>标签放在< dependencies>标签中的。而 < parent>标签放在< dependencies>标签之上的
<!-- mvc,aop的依赖包。SpringBoot导进来的所有包都是通过这个依赖导进来的,体现maven的依赖性 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 由于我们在上面指定了parent,这里就不需要指定版本号 -->
</dependency>
<!--处理springboot的json数据中日期的依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.15</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>1.5.2.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
<!--freemarker依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
步骤二:在resources文件夹下创建application.properties,设置数据库连接信息和页面配置信息
##链接数据库信息
spring.datasource.url=jdbc:mysql://localhost:3306/day06
spring.datasource.username=root
spring.datasource.password=root
##数据库连接驱动地址.这里试着手打,不然可能会报datasources错误
spring.datasource.driverClassName=com.mysql.jdbc.Driver
##活跃数量
spring.datasource.max-active=20
##最大连接池数量
spring.datasource.max-idle=8
##最小连接池数量
spring.datasource.min-idle=8
spring.datasource.initial-size=10
### spring jpa配置信息
##指定那个数据库
spring.jpa.database=MYSQL
##展示sql语句
spring.jpa.show-sql=true
##生成数据表
spring.jpa.hibernate.ddl-auto=update
##指定数据表的生成规则(即表名和类名相同)
spring.jpa.hibernate.naming-strateg=org.hibernate.cfg.ImprovedNamingStrategy
##方言,此处是mysql的数据库方言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
###thymeleaf的配置信息
# 以下都是默认配置,所以用注释注释起来的。想改的话把注释打开即可
#找页面时自动去templates文件夹下找页面。相当于也是设置controller那return时的页面前缀
#spring.thymeleaf.prefix=classpath:/templates/
#设置controller那return时的后缀
#spring.thymeleaf.suffix=.html
#页面用h5的语法
#spring.thymeleaf.mode=html5
#编码用utf-8
#spring.thymeleaf.encoding=utf-8
#类型是text/html
#spring.thymeleaf.content-type=text/html
#关闭thymeleaf缓存。保证每次页面都是最新的数据
spring.thymeleaf.cache=false
#关闭thymeleaf缓存。保证每次页面都是最新的数据
spring.freemarker.cache=false
###freemarker的配置信息
#freemarker的前缀
#spring.freemarker.prefix= 设置前缀
#freemarker的后缀。此时页面是以.ftl结尾的。实际就是个html页面
#spring.freemarker.suffix=.ftl 设置后缀
#freemarker默认访问页面时去的文件
#spring.freemarker.template-loader-path=classpath:/templates/ 默认的模板文件的位置
步骤三:在resouces下创建templates(固定名字)文件夹,所有页面都放在这下面。在templates创建本次要用到的前台页面
本案例将该案例命名为:show.ftl。之所以后缀为ftl是因为application.properties中配置的freemarker后缀。
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
<h1>demo1.html</h1>
<ul>
<#list userlist as u1>
<li>${u1.username}</li>
</#list>
</ul>
</body>
</html>
环境基本已经搭建完了,下面就是写controller、dao、entity、service中的代码
步骤四:创建表对应的实体类
该案例将该类命名为:Users
package com.qf.entity;
import com.alibaba.fastjson.annotation.JSONField;
import javax.persistence.*;
import java.text.Format;
import java.util.Date;
@Entity
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)//自增。sqlserver和mysql数据库用IDENTITY,Oracle数据库用.SEQUENCE
private Integer userId;
@Column
private String username;
@Column
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date birthday;
@Column
private Integer age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Users{" +
"userId=" + userId +
", username='" + username + '\'' +
", birthday=" + birthday +
", age=" + age +
'}';
}
}
步骤五:在dao层中创建dao层接口,主要是继承JpaRepository类
package com.qf.dao;
import com.qf.entity.Users;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UsersDao extends JpaRepository<Users,Integer>{//继承JpaRepository后记得加<Users,String>,不然会报UsersDao对象创建错误,Integer为实体类对应表的主键类型。因为是全查,所以没写方法
}
步骤六:创建service层接口和实现类
该案例将该接口命名为:UsersService。用于调用dao层方法
package com.qf.service;
import com.qf.entity.Users;
import java.util.List;
public interface UsersService {
public List<Users> getall();
}
该案例将该接口命名为:UsersServiceImpl。用于调用dao层方法
package com.qf.service.impl;
import com.qf.dao.UsersDao;
import com.qf.entity.Users;
import com.qf.service.UsersService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UsersServiceImpl implements UsersService {
@Resource
UsersDao usersDao;
@Override
public List<Users> getall() {
return usersDao.findAll();
}
}
步骤七:在controller层创建处理查询数据库数据以及页面交互的controller类
该案例将该类命名为:TestController
package com.qf.controller;
import com.qf.entity.Users;
import com.qf.service.UsersService;
import org.apache.catalina.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
//RestController将方法返回结果转换成json格式并创建当前类对象。
@Controller//用的是Controller不是RestController,因为要跳转页面
public class TestController {
@Resource
private UsersService usersService;
@RequestMapping("/getUsers")//地址栏访问请求的地址http://localhost:8080/getUsers
public String test3(ModelMap map, HttpServletResponse response){
response.setContentType("text/html;charset=utf-8");
List<Users> list = usersService.getall();
map.addAttribute("userlist",list);
return "show";//实际是templates/show.ftl
}
}
本次案例结构图: