书籍:Spring Boot + Vue全栈开发 作者:王松
第一章:Spring Boot入门
1.1 简介
1.1.1 优势
- 快速构建项目
- 通用性配置
- 内嵌服务器
1.2 第一个spring boot程序
1.2.1 创建maven工程
目前使用IDEA较多,直接使用IDEA创建springboot工程
第二章:Spring Boot配置
2.1 spring-boot-starter-parent
spring-boot-starter-parent是一个特殊的starter,提供了一些Maven的默认配置,主要是便于管理
- Java默认使用版本1.8
- 编码格式utf-8
- 提供Dependency Management进行项目依赖的版本管理
- 默认资源过滤与插件配置
2.2 @SpringBootApplication
启动类的注解,集合三个注解的功能
- @SpringBootConfiguration:配置类,类似与applicationContext.xml
- @EnableAutoConfiguration:自动化配置
- @ComponentScan:包扫描,扫描位于当前类所在包下的所有类, @Service、@Repository、@Component、@Controller、@RestController
注:@Configuration可专门用来配置Bean
2.3 定制banner
在resources创建一个banner.txt文件,启动时就会打印出来
关闭操作:
2.4 Web容器配置
2.4.1 Tomcat配置
1. 常规配置
spring boot内嵌:
- Tomcat
- Jetty
- Undertow
- Netty
spring-boot-starter-web:默认Tomcat,其扩展配置application.properties
server.port=8081
server.error.path=/error
server.servlet.session.timeout=30m
server.servlet.context-path=/chapter02
server.tomcat.uri-encoding=utf-8 // 请求编码
server.tomcat.max-threads=500
server.tomcat.basedir=/home/sang/tmp
2. HTTPS配置
给网站加上HTTPS证书能够在一定程度上保障网站及其数据之间的交互
java数字证书管理工具keytool(\jdk\bin),可以生成一个数字证书
keytool -genkey -alias tomcathttps -keyalg RAS -keysize 2048 -keystore sang.p12 -validity 365
执行完毕后生成snag.12的文件,将其复制到根目录下并在application.properties配置如下
server.ssl.key-store=sang.p12
server.ssl.key-alias=tomcathttps
server.ssl.key-store-password=123456
生成自己的证书后,需要将http请求重定向为https请求,需要TomcatConfig类
2.4.2 Jetty配置
将pom文件中的spring-boot-starter-web去掉
添加:spring-boot-starter-jetty
2.5 Properties配置
application.properties可出现在四个位置,其加载顺序1到4依次降低
2.6 类型安全配置属性
Properties和Yaml配置---->加载到Spring Environment
Spring提供@Value注解以及EnvironmentAware接口将Spring Environment中的数据注入到属性上
例:
2.7 Yaml配置
2.7.1 常规配置
优点:条理清晰,简洁强大,具有层次感
application.yml
server:
port:80
servlet:
context-path: /chapter02
tomcat:
uri-encoding: utf-8
2.7.2 复杂配置
列表配置
对象配置
2.8 Profile
一项工程需要频繁地在各种环境下测试数据,例如开发环境(application-dev.properties)和生产环境(application-prod.properties)
在applicaiton.properties指定环境可节省时间:
spring.profile.active=dev // profile占位符--application-profile.properties
第三章:Spring Boot整合视图层技术
模板引擎:
- Thymeleaf
- FreeMarker
3.1 整合Thymeleaf
使用IDEA创建springBoot工程的时候选择Thymeleaf,则在pom文件中有spring-boot-starter-thymeleaf
由thymeleaf源码可知,Thymeleaf的配置写在templates下
常见配置如下:(配置写在application.properties中)
# 是否开启缓存
spring.thymeleaf.cache = true
# 检查模板是否存在
spring.thymeleaf.check-template = true
# 检查模板位置是否存在
spring.thymeleaf.check-template-location = true
# content-type配置
spring.thymeleaf.servlet.content-type = text/html
# 模板文件编码方式
spring.thymeleaf.encoding = UTF-8 #模板编码。
# 模板文件位置
spring.thymeleaf.prefix = classpath:/templates/
# 模板文件后缀
spring.thymeleaf.suffix = .html
使用:
1) 实体类
public class Book{
private Integer id;
private String name;
private String author;
// getter setter方法
// toString
}
2) 控制类
@Controller
public class BookController{
@GetMapping("/books")
public ModelAndView books(){
List<Book> books = new ArrayList<>();
Book b1 = new Book();
b1.setId(1);
b1.setName("罗贯中");
b1.setAuthor("三国演义");
Book b2 = new Book();
b2.setId(2);
b2.setName("曹雪芹");
b1.setAuthor("红楼梦");
books.add(b1);
books.add(b2);
ModelAndView mv = new ModelAndView();
mv.addObject("books",book);
mv.setViewName("books");
return mv;
}
}
3) 创建视图
<!DOCTYPE html>
<html lang="en" xmlns:th=” http://www.thymeleaf.org" >
<head>
<meta charset=” UTF- 8” >
<title >图书列表</ title>
</head>
<body>
<table border=” 1” >
<tr>
<td>图书编号< ltd>
<td>图书名称</ td>
<td>图书作者</ td>
</tr>
<tr th:each="book:${books }">
<td th:text="${book.id)"></ td>
<td th:text="${book.name}"></ td>
<td th:text="${book.author}"></ td>
</tr>
</table>
</body>
</html>
3.2 整合FreeMarker
pom:spring-boot-starter-freemarker
其位置也在template下,文件后缀.ftl
同样在application.properties对默认配置进行修改
#HttpServletRequest的属性是否可以覆盖 controller中model的同名项
spring.freemarker.allow-request-override=false
#HttpSession的属性是否可以覆盖controller中model的同名项
spring.freemarker.allow-session-override=false
#是否开启缓存
spring.freemarker.cache=false
#模板文件编码
spring.freemarker.charset=UTF-8
#是否检查模板位置
spring.freemarker.check-template-location=true
#Content-Type的值
spring.freemarker.content-type=text/html
#是否将HttpServletRequest中的属性添加到Model中
spring.freemarker.expose-request-attributes=false
#是否将HttpSession中的属性添加到Model中
spring.freemarker.expose-session-attributes=false
#模板文件后缀
spring.freemarker.suffix= .ftl
#模板文件位置
spring.freemarker.template-loader-path=classpath:/templates/
第四章:整合web开发
4.1 返回json数据格式
目前前后端分离,都是将后端数据以json的形式发送到前端,所以需要在后端将数据封装为json格式
4.1.1 默认实现
spring-boot-starter-web中提供jackson-databind作为json处理器,使其返回的数据为json格式
注:@RestController组合了@ResponseBody和@Controller
4.1.2 自定义转换器
1. Gson 谷歌开源JSON解释框架,需除去jackson-databind
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson,core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
当加入Gson依赖后,springboot默认提供Gson封装数据
但是当对日期数据进行格式化时,需要开发者自己定义HttpMessageConverter
@Configuration
public class GsonConfig {
@Bean
GsonHttpMessageConverter gsonHttpMessageConverter() {
GsonHttpMessageConverter converter= new GsonHttpMessageConverter() ;
GsonBuilder builder= new GsonBuilder( );
builder.setDateFormat("yyyy-MM-dd");
builder.excludeFieldsWithModifiers(Modifier.PROTECTED) ;
Gson gson = builder.create();
converter.setGson(gson) ;
return converter;
}
}
2. fastjson 阿里巴巴自己开发的Json解析框架
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson,core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.41</version>
</dependency>
开发者自己配置HttpMessageConverter
package com.github.afkbrb.lightblogback.configurer;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.nio.charset.Charset;
@Configuration
public class MyFastJsonConfig {
@Bean
FastJsonHttpMessageConverter fastJsonHttpMessageConverter(){
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
// 日期格式
config.setDateFormat("yyyy-MM-dd");
// 数据编码
config.setCharset(Charset.forName("UTF-8"));
config.setSerializerFeatures(
// 是否在生成的json中输出类名
SerializerFeature.WriteClassName,
// 是否输出value为null的数据
SerializerFeature.WriteMapNullValue,
// 生成的json格式化
SerializerFeature.PrettyFormat,
// 空集合输出[]而非null
SerializerFeature.WriteNullListAsEmpty,
// 空字符串输出""而非null
SerializerFeature.WriteNullStringAsEmpty
);
converter.setFastJsonConfig(config);
return converter;
}
}
当还出现中文乱码的时候,在application.properties中添加如下配置:
spring.http.encoding.force-response=true
4.2 静态资源访问
4.2.1 默认策略
springboot默认会过滤掉所有的静态资源,静态资源的位置有5个,最后一个为 /
使用IDEA创建springboot工程,默认生成static文件夹
4.2.2 自定义策略
1. 在application.properties中配置过滤规则和静态资源位置
spring.mvc.static-path-pattern=/static/** // 过滤规则
spring.resources.static-locations=classpath:/static/ // 静态资源位置
2. java编码定义
4.3 文件上传
springboot中提供文件上传自动化配置类Multipar