玩一玩Spring Boot框架

Posted howard2005

tags:

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

文章目录

一、Spring Boot框架概述

(一)由Spring到Spring Boot

  • 早期版本的Spring专注于XML配置,开发一个程序需要配置各种XML配置文件。为了简化开发,在Spring 2.x版本开始引入少量的注解,由于支持的注解不是很多且功能尚不完善,所以只能辅助使用。
  • 随着实际生产中敏捷开发的需要,以及Spring注解的大量出现和功能改进,到了Spring 4.x版本基本可以脱离XML配置文件进行项目开发,多数开发者也逐渐感受到了基于注解开发的便利,因此,在Spring中使用注解开发逐渐占据了主流地位。与此同时,Pivotal团队在原有Spring框架的基础上通过注解的方式进一步简化了Spring框架的使用,并基于Spring框架开发了全新的Spring Boot框架。

(二)Spring Boot框架核心功能

  1. 独立运行的Spring项目
  2. 内嵌Servlet容器
  3. 提供starter简化Maven配置
  4. 自动配置Spring
  5. 准生产的应用监控
  6. 无代码生成和xml配置

(三)Spring Boot框架的应用

  • Spring Boot框架本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用,并且在开发过程中大量使用“约定优先配置”(Convention over Configuration)的思想来摆脱Spring框架中各种复杂的手动配置,同时衍生出了Java Config(取代传统XML配置文件的Java配置类)这种优秀的配置方式。也就是说,Spring Boot并不是替代Spring框架的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具,同时Spring Boot还集成了大量常用的第三方库配置(例如Jackson、JDBC、Redis、Mail等)。使用Spring Boot开发程序时,几乎是开箱即用(out-of-the-box),大部分的Spring Boot应用都只需少量的配置,这一特性更能促使开发者专注于业务逻辑的实现。
  • 随着近几年微服务开发的需求和火爆,怎样快速、简便地构建一个准生产环境的Spring应用也是摆在开发者面前的一个难题,而Spring Boot框架的出现恰好完美地解决了这些问题,同时内部还简化了许多常用的第三方库配置,使得微服务开发更加便利

二、Spring Boot基本配置

(一)入口类与@SpringBootApplication

  • 利用Spring Initializr创建Spring Boot项目
  • 配置项目基本信息
  • 添加相关依赖
  • 设置项目名称与保存位置
  • 单击【Finish】按钮,完成项目初始化

1、项目入口类 - SpringBootDemoApplication

  • 包含一个主方法作为入口类的入口方法
  • 利用SpringApplication类的静态方法run()启动入口类实例,可以接收命令行参数

2、了解核心注解 - @SpringBootApplication

  • @SpringBootApplication是Spring Boot的核心注解,是一个组合注解。
  • 查看@SpringBootApplication的源代码

3、设置exclude属性值,关闭特定的自动配置

  • 关闭数据源自动配置

  • 查看数据源自动配置类 - DataSourceAutoConfiguration

(二)启动项目,查看效果

  • 要暂时关闭数据源自动配置(因为目前尚未配置数据源,不关闭数据源自动配置,运行程序要报错)

(三)添加控制器与路由函数

  • 直接在入口类上面添加@Controller注解,然后定义路由函数index()

  • 启动项目,访问http://localhost:8080

  • 添加路由函数welcome(),通过model参数向前端模板页面传递数据

  • templates里创建welcome.html,跟路由函数welcome()里的逻辑视图名welcome相对应

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org/">
<head>
    <meta charset="UTF-8">
    <title>Welcome</title>
<head>
<body>
<h3><span th:text="$message">亲爱的朋友,欢迎访问Spring Boot世界~</span></h3>
</body>
</html>
  • 说明:<span>元素的内容是静态数据,客户端打开页面看到的数据
  • 启动项目,模板页面利用th:text="$message看到后端控制器通过model传递过来的数据

2022-6-5 更新到此

(四)定制与关闭Banner

1、在resources目录下创建banner.txt文件

2、通过http://patorjk.com/software/taag网站生成字符

3、将网站生成的字符复制到banner.txt文件里

4、启动应用程序,查看启动图案

5、关闭Banner

  • 修改入口程序代码
  • 启动应用,查看效果
  • 大家可以看到,项目启动图案消失无踪了。
  • 注释掉设置旗帜模式语句,恢复启动图案

(五)使用Spring Boot的应用属性文件进行配置

1、修改服务器的端口号

2、修改入口类 - SpringBootDemoApplication

3、启动应用,查看控制台输出信息

4、启动浏览器,访问http://localhost:8888/index

  • 在application.properties文件里注释掉修改服务器端口号的语句,于是服务器端口号恢复成默认的8080。
  • 启动浏览器,访问http://localhost:8080/index

(六)允许使用XML配置Spring

1、创建用户实体类 - User

package net.hw.boot.bean;

/**
 * 功能:用户实体类
 * 作者:华卫
 * 日期:2020年11月23日
 */
public class User 
    private int id;
    private String name;
    private String gender;
    private int age;
    private String telephone;

    public int getId() 
        return id;
    

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

    public String getName() 
        return name;
    

    public void setName(String name) 
        this.name = name;
    

    public String getGender() 
        return gender;
    

    public void setGender(String gender) 
        this.gender = gender;
    

    public int getAge() 
        return age;
    

    public void setAge(int age) 
        this.age = age;
    

    public String getTelephone() 
        return telephone;
    

    public void setTelephone(String telephone) 
        this.telephone = telephone;
    

    @Override
    public String toString() 
        return "User" +
                "id=" + id +
                ", name='" + name + '\\'' +
                ", gender='" + gender + '\\'' +
                ", age=" + age +
                ", telephone='" + telephone + '\\'' +
                '';
    

2、在resources目录里创建Spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean id="user" class="net.hw.boot.bean.User">
        <property name="id" value="1"/>
        <property name="name" value="李晓红"/>
        <property name="gender" value=""/>
        <property name="age" value="18"/>
        <property name="telephone" value="15867675590"/>
    </bean>
</beans>

3、修改入口类,导入Spring配置文件

4、启动应用,访问http://localhost:8080/index

  • 其实,也可以创建Spring MVC配置类,在里面定义内部资源视图解析器。

三、Spring Boot项目访问静态资源

  • 静态资源(css、images、scripts)都放在resources\\static目录里。下面以访问图片为例说明静态资源的访问。

1、在static里创建images目录,拷贝一张图片

2、修改入口类,访问静态资源

  • Spring Boot静态资源目录的自动配置在哪里可以查看呢?

  • 访问静态资源resources\\static\\images\\bear.jpg,在Java代码里只需要写虚拟路径images\\bear.jpg

3、启动应用,访问http://localhost:8080/index

四、Spring Boot支持的视图技术

  • Spring Boot框架为简化项目的整体开发,对一些常用的视图技术实现了整合支持,并主要推荐整合模板引擎技术来实现前端页面的动态化内容。
  • Spring Boot可整合的模板引擎技术
  1. FreeMarker
  2. Groovy
  3. Thymeleaf
  4. Mustache
    ……

五、Thymeleaf基本语法

1、Thymeleaf常用标签

th:标签说明
th:insert页面片段包含(类似JSP中的include标签)
th:replace页面片段包含(类似JSP中的include标签)
th:each元素遍历(类似JSP中的c:forEach标签)
th:if条件判断,如果为真
th:unless条件判断,如果为假
th:switch条件判断,进行选择性匹配
th:case条件判断,进行选择性匹配
th:object变量声明
th:with变量声明
th:attr通用属性修改
th:attrprepend通用属性修改,将计算结果追加前缀到现有属性值
th:attrappend通用属性修改,将计算结果追加后缀到现有属性值
th:value属性值修改,指定标签属性值
th:href用于设定链接地址
th:src用于设定链接地址
th:text用于指定标签显示的文本内容
th:utext用于指定标签显示的文本内容,对特殊标签不转义
th:fragment声明片段
th:remove移除片段

2、Thymeleaf主要语法

说明表达式语法作用
变量表达式$...获取上下文中的变量值
选择变量表达式*...用于从被选定对象获取属性值
消息表达式#... 用于Thymeleaf模板页面国际化内容的动态替换和展示
链接URL表达式@...用于页面跳转或者资源的引入
片段表达式~...用来标记一个片段模板,并根据需要移动或传递给其他模板

3、Thymeleaf内置对象

  • #ctx:上下文对象
  • #vars:上下文变量
  • #locale:上下文区域设置
  • #request:(仅限Web Context)HttpServletRequest对象
  • #response:(仅限Web Context)HttpServletResponse对象
  • #session:(仅限Web Context)HttpSession对象
  • #servletContext:(仅限Web Context)ServletContext对象

4、Thymeleaf模板基本配置

  • 在Spring Boot项目中使用Thymeleaf模板,必须保证引入Thymeleaf依赖
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  • 在全局配置文件中配置Thymeleaf模板的一些参数。如设置模板缓存、模板编码、模板样式、指定模板页面存放路径、指定模板页面名称的后缀
spring.thymeleaf.cache = true
spring.thymeleaf.encoding = UTF-8   
spring.thymeleaf.mode = HTML5   
spring.thymeleaf.prefix = classpath:/templates/  
spring.thymeleaf.suffix = .html   

六、Spring Boot整合Thymeleaf

1、创建Spring Boot项目ThymeleafDemo

  • 设置项目元数据

  • 添加项目依赖

  • 设置项目名称与保存位置

  • 完成项目初始化工作

  • 查看pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>net.hw.lesson09</groupId>
    <artifactId>thymeleafdemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ThymeleafDemo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2、在全局配置文件里配置Thymeleaf属性

#缓存配置,默认即是true,开发阶段设置为false
spring.thymeleaf.cache = false
#设置模板使用的编码为utf-8
spring.thymeleaf.encoding = UTF-8
#指定为模板使用的模式为html5,默认html
spring.thymeleaf.mode = HTML5
#指定前缀,默认位置为/templates/,可以修改成其它位置
spring.thymeleaf.prefix = classpath:/templates/
#指定模板文件后缀,默认值为.html,可以修改成其它值
spring.thymeleaf.suffix = .html
  • Thymeleaf页面缓存设置,默认为true,开发中方便调试应设置为false,上线稳定后应保持默认true

3、创建登录控制器LoginController

  • 在net.hw.lesson09包里创建controller子包
  • 在controller子包里创建LoginController控制器
  • 用于前端模板页面动态数据替换效果的测试
package net.hw.lesson09.controller;

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

import java.util.Calendar;

/**
 * 功能:登录控制器
 * 作者:华卫
 * 日期:2020年08月14日
 */
@Controller
public class LoginController 
    /**
     * 通过请求“toLoginPage”跳转到templates目录下的
     * login页面,并把当前年份数据保存到模型对象中
     */
    @GetMapping("toLoginPage")
    public String toLoginPage(Model model)
        model.addAttribute("currentYear", Calendar.getInstance().get(Calendar.YEAR));
        return "login"; // 返回逻辑页面视图名称
    

4、创建模板文件,获取控制器传来的动态数据

  • 在templates目录下创建模板文件login.html

  • h3标签中通过th:text引入了后台动态传递过来的当前年份currentYear

玩一玩 webSocket 聊聊天

Spring Boot集成WebMagic爬取京东商品信息

一个建议:多玩一玩RPC

玩一玩MEAN

玩一玩数组

玩一玩WolframAlpha计算知识引擎