玩一玩Spring Boot框架
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩一玩Spring Boot框架相关的知识,希望对你有一定的参考价值。
文章目录
- 一、Spring Boot框架概述
- 二、Spring Boot基本配置
- 三、Spring Boot项目访问静态资源
- 四、Spring Boot支持的视图技术
- 五、Thymeleaf基本语法
- 六、Spring Boot整合Thymeleaf
- 七、Spring Boot集成Bootstrap
- 八、Thymeleaf访问模型里的数据
一、Spring Boot框架概述
- Spring Boot官网:https://spring.io/projects/spring-boot
- 当前Spring Boot GA (General Availability)版是2.7.0,当然有了Spring Boot 3.0.0快照版
(一)由Spring到Spring Boot
- 早期版本的Spring专注于
XML配置
,开发一个程序需要配置各种XML配置文件
。为了简化开发,在Spring 2.x版本开始引入少量的注解
,由于支持的注解不是很多且功能尚不完善,所以只能辅助使用。 - 随着实际生产中敏捷开发的需要,以及Spring注解的大量出现和功能改进,到了Spring 4.x版本基本可以脱离XML配置文件进行项目开发,多数开发者也逐渐感受到了
基于注解
开发的便利,因此,在Spring中使用注解开发逐渐占据了主流地位。与此同时,Pivotal团队在原有Spring框架的基础上通过注解的方式进一步简化了Spring框架的使用,并基于Spring框架开发了全新的Spring Boot框架。
(二)Spring Boot框架核心功能
- 独立运行的Spring项目
- 内嵌Servlet容器
- 提供starter简化Maven配置
- 自动配置Spring
- 准生产的应用监控
- 无代码生成和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可整合的模板引擎技术
- FreeMarker
- Groovy
- Thymeleaf
- Mustache
……
五、Thymeleaf基本语法
- 相关语法 ,请学习《thymeleaf_3.0.5_中文参考手册.pdf》 提取码:fqpu
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
- 关于Thymeleaf,可以参看博主两年前编写的《Thymeleaf模板引擎入门》
- 关于Bootstrap,可以参看博主两年前编写的《前端学习笔记:Bootstrap框架入门》
- 下面我们会一起来学习Spring Boot如何整合Thymeleaf与Bootstrap,实现一个简单的登录页面
六、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 聊聊天