springboot+vue学习

本书详细介绍了Spring Boot与Vue的全栈开发,包括Spring Boot的基础配置、视图层技术整合、Web开发、持久层技术、NoSql、RESTful服务、安全管理和WebSocket等。同时讲解了错误处理、单元测试、缓存、OAuth2认证和WebSocket实战等内容,旨在帮助读者全面掌握Spring Boot和Vue的结合应用。
摘要由CSDN通过智能技术生成

书籍: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值