• 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的进行)。

  • 相关阅读:
    linux开发板出现Read-only file system的解决办法
    nginx源码分析之网络初始化
    nginx源码分析之hash的实现
    hdu4833 Best Financing(DP)
    PHP读取office word文档内容及图片
    nginx+uwsgi+bottle python服务器部署
    创建、托管和浏览文档
    python非官方扩展库
    simplexml_load_string 转换xml为数组
    PHPExcel 导出数据(xls或xlsx或csv)- 助手类(函数)
  • 原文地址:https://www.cnblogs.com/javazl/p/12630135.html
Copyright © 2020-2023  润新知