Spring boot整合视图层

Posted 繁华乱世

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring boot整合视图层相关的知识,希望对你有一定的参考价值。

一般前后端分离开发很少会使用到页面模板,但是在特定的场景还是会使用,比如邮件发送,比如支付等,那么Spring Boot中支持哪些页面模板呢?

  1. Freemarker
  2. Thymeleaf
  3. jsp

目前就支持这三种模板,他们是如何使用的,我们一个一个看

首先整合Freemarker,创建Spring Boot项目引入两个依赖,如下图:

 

Spring Boot对Freemarker进行了自动化配置,先了解他是如何体现的,以便帮助我们理解?

 我们可以双击shift,去搜FreemarkerAutoConfiguration,这是Freemarker的一个自动化配置类,里面就两个方法,一个是检查模板的位置,一个是获取这个位置。很简单,那么他的自动化体现在哪里? 在最上边的注解里面:@ConditionalOnClass:这个意思就是当这两个.class文件存在的时候,才会执行下面的方法,也就是当pom.xml 中有有了Freemarker的依赖的时候,就会存在这两个jar文件.进而就会执行下面的方法。

 

接下来就是创建一个实体类,一个Controller,还有一个模板引擎Freemarker

//实体类
package com.bean;

public class User {
    private int id;
    private  String username;
    private String  address;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }



//Controller类
package com.controller;

import com.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.ArrayList;
import java.util.List;

@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("王昭君--" + i);
            user.setAddress("西安---" + i);
        list.add(user);
        }
         model.addAttribute("list",list);
        return "user";

        }




//模板Freemaker
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>user</title>
</head>
<body>
<table border="1">
    <tr>
        <td>编号</td>
        <td>用户名</td>
        <td>地址</td>
    </tr>
    <#list list as u>
        <tr>
            <td>${u.id}</td>
            <td>${u.getUsername()}</td>
            <td>${u.getAddress()}</td>
        </tr>

    </#list>
</table>
</body>
</html>

这个很简单,就是在模板中展示用户数据,这里要注意的是模板就是一个html,但是后缀名有所不同,我记着以前默认一直是.ftl,但是运行的时候,报错,说找不到我这个模板,后来查了下源码才知道,官方将他的后缀名改成了.ftlh,所以这里要特别注意一下。当然后缀也可以自己配置,这也是Spring Boot中约定大于配置的理念的体现。

我们看一下它的后缀是怎样配置的:

 

 当然这里可以配置很多东西,像是否开启缓存,编码格式,模板的路径等等。。

下面是运行结果

 

 在Freemarker中,有很多命令:

  1. if
  2. switch case default  break
  3. list break
  4. include 
  5. import
  6. noparse
  7. escape
  8. assign
  9. setting
  10. macro nested return

差不多常用的就是这些,这个具体的用法,可以去参考freemaker官方文档。

第二个就是Thymeleaf:

Thymeleaf是新一代的模板引擎,支持HTML原型,后缀名是.html,它和freemaker以及jsp有什么区别呢?freemake和jsp要想在页面展示,需要服务器 的渲染才可以,而Thymeleaf直接可以在页面展示。

这个做法的话,可以参考freemaker的步骤进行,唯一不同的处理,就是模板页面命令不同,这个可以参考Thymeleaf的官方文档。

第三个是jsp:

Spring Boot对jsp的支持没有前两个的友好,实际开发中也很少使用jsp,jsp在Springboot中的配置也是比较麻烦的,不像前两个只需要引入依赖,零配置,就可以使用。

jsp具体做法:

1.引入依赖,这个需要手动的加,一个是jsp的解析器(tomcat-embed-jasper),一个是jstl的标签。

2.创建webapp,将jsp页面放在这个目录下。

3.配置视图解析器,创建一个配置类继承webMvcConfigurer ,配置它的访问路径,和后缀名

4.测试(可以仿照freemake的进行)。

以上是关于Spring boot整合视图层的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot系列Spring Boot整合持久层

峰哥说技术:08-Spring Boot整合FreeMarker视图

文件上传之Spring Boot整合web层

峰哥说技术:09-Spring Boot整合JSP视图

spring boot整合mybitas怎么配置oracle?

Spring Boot:整合MyBatis框架