Springboot2简化开发项目

文章目录


当学完前端Html和数据库的时候,会不会想到如何在页面中链接起我们的数据库,写一个web应用?这个时候我们就需要用到框架!
,本篇文章是我对Springboot学习的一些理解,当然Springboot的强大不止这些,还有很多可以去了解学习的,多看官方文档,本篇文章是一些Springboot的基础用法,希望看完对大家有帮助,本篇文章用的是Springboot+Thymeleaf,后期会出Springboot+vue前后端分离的文章,请大家多多关注,适用于快速上手。

语法基础:Java、Html、JavaScript、Css、Sql、Maven、Thymeleaf
系统需求:VsCode/IDEA、MysqlWorkbench、Maven3+
IDEA需要破解版,大家可以自己去找资源,本篇文章用的是VsCode,Mysql可以用自己喜欢的软件

Springboot

官方文档
https://spring.io

Springboot简介

什么是Springboot?

在开发中我们需要用到SSM来框架来开发,SSM框架是spring、spring MVC 、和mybatis框架的整合,是标准的MVC。标准的SSM框架有四层,分别是dao层(mapper),service层,controller层和View层。使用spring实现业务对象管理,使用spring MVC负责请求的转发和视图管理,mybatis作为数据对象的持久化引擎。本篇文章会一个一个详细介绍四层框架。

Springboot能做什么?

官方文档的解释
1.png

为什么用Springboot呢

他可以快速的创建出出生产级别的Spring应用
优点:
1、创建独立Spring应用
2、内嵌Web服务器
3、自动starter依赖,简化配置
4、自动配置Spring以及第三方功能
5、无代码生成、无需编写XML

准备环境

Vscode准备

JDK :在VsCode中配置下的好JDK
VsCode及插件: Java Extension Pack & Spring Boot Extension Pack
Java:
2.png

VSCode 配置Java Home 要不然无法编译运行JAVA
3.png

Spring Boot:
4.png
5.png

开始使用Springboot

依赖管理Maven

Maven是一个项目管理工具,它包含了一个项目对象模型(POM:Project Object Model),一组标准集合,一个项目生命周期(Project LifeCycle),一个依赖管理系统(Dependency managerment System),和用来运行定义在生命周期(phase)中插件(plugin)目标(goal)的逻辑。
通俗来说,我们需要引入的各种Jar包,Maven可以自动下载。

安装Maven

官方文档
https://maven.apache.org

创建Springboot项目

创一个空文件夹,然后VsCode打开 control +shift + P打开VsCode场景选择起
在下载的Spring Initialize Java Support中可以通过Maven自动创建一个Springboot 项目
7.png

选择版本我选择的是2.7.5
8.png

选择Java
image.png

更改项目的名字修改com.后面的内容
image.png

创建修改ID
image.png

选择Jar包
image.png

选择配置好的Java Version 注意一定要和自己在Vscode中的配置的版本一样
不知道的可以打开终端输入 Java -v
image.png

选择场景依赖,也是场景启动器,你需要的依赖都可以选择,这里可以先选择DevTools
image.png

创建之后就是在第一次加载,可能需要很长时间,Maven要下载jar包
image.png

启动Springboot Hello
在Controller中写一个HelloController 标注是Controller注解,这是第一个Hello请求
image.png

启动Springboot
image.png

在页面中输入http://localhost:8080/hello
就发现出现了Hello ,Spring Boot 2

自动配置原理

● 自动配好Web常见功能,如:字符编码问题
○ SpringBoot帮我们配置好了所有web开发的常见场景
● 自动配好SpringMVC
○ 引入SpringMVC全套组件
○ 自动配好SpringMVC常用组件(功能)
● 默认的包结构
1、@SpringBootApplication
配置类
2、@ComponentScan
指定扫描,包扫
3、@EnableAutoConfiguration

@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.example.demo")

● 按需加载所有自动配置项
○ 非常多的starter
○ 引入了哪些场景这个场景的自动配置才会开启
○ SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面

Maven自动配置

1.在pom文件中 parent几乎声明了所有开发中的版本号

2.修改版本号
查看spring-boot-dependencies里面规定当前依赖的版本用的key
在当前项目里面重写配置
3.starter场景启动器
4、所有场景启动器最底层的依赖
image.png

Tomcat

依赖

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <version>2.3.4.RELEASE</version>
      <scope>compile</scope>
    </dependency>

自动引入 只需要访问localhost:8080
image.png

自动配置原理

(1)@AutoConfigurationPackage
自动配置包
将指定的一个包下的所有组件导入进来(包MainApplication)
(2)@Import(AutoConfigurationImportSelector.class)
所有的自动配置类在这里配置写死
4、按需开启自动配置
虽然127个场景所有配置在启动时候都会加载
但最终都会按需配置
5、修改只需要在
image.png

Springboot容器功能

组件添加

@Configuration配置

在Config包中,你需要添加和修改的配置类需要加上@Configuration注解,这会告诉springboot这是一个配置类==配置文件
image.png

@Bean、@Component、@Controller、@Service、@Repository
@Bean

在Configuration中使用@Bean是将此方法注入到容器中,才可以调用,不然会报空指针异常

Component

@component是spring中的一个注解,它的作用就是实现bean的注入。在Java的web开发中,提供3个@Component注解衍生注解(功能与@component一样)分别是:

@Controller

@Controller 控制器(注入服务) 用于标注控制层,在controller包中所有的controller都要加上这个注解
来告诉Springboot这是一个控制层

@Service

@Service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理

@Repository

@Repository(实现dao访问) 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件

####@ComponentScan、@ Import( )导入组件
在Config中使用@Import({User.class})将User这个类注入到Config中,这样才可以使用

@Conditional

条件装配:满足Conditional指定的条件,则进行组件注入

原生配置文件引入

@ImportResource(“classpath:beans.xml”)导入spring的配制文件

配置绑定

@ConfigurationProperty+@Component

image.png

写Controller
image.png

配置文件
image.png

在浏览器输入localhost:8080/car
因为我的注解是RestController它会将返回的数据变成Json的形式
image.png

@EnableConfigurationProperties(Car.class)

1、开启Car配置绑定
2、把这个Car这个组件自动注册
在Config中写

    @EnableConfigurationProperties(Car.class)
	public class MyConfig {
	}

最佳实践

步骤

1、引入场景依赖
sprint-boot-starter-什么什么
2、查看自动配置(选)
在properties中 加入 debug=true
3、是否需要修改配置项
(1)在spring boot官网参照文档
(2)自定义加入或替换组件
用@Bean或者@Component

Lombok简化开发

Lombok可以自动设置Bean的get set等方法
@Data自动映入属性的set和get方法
@ArgsConstructor 设置全参构造器
1、引入依赖
在springboot dependecy找到lombok然后加入到pom文件中
2、安装插件
image.png

3、在Bean包中的类 加入注解
image.png

image.png

在编译的时候自动生成
4、@Slf4j日志
log.info(String字符串)
在编译的时候终端会打印出日志内容

dev-tools

control+F9热更新,项目更改内容实时生效
image.png

Spring Initailizr

自动配置maven,创建springboot,要什么场景直接选
image.png

配置文件-yaml(选)

https://yaml.org/spec/1.2.2/
下载yaml插件将application.properties改成yaml结尾
image.png

可以防止在配置文件中的冗余
基本语法可以看官方文档

Web开发

创建:在创建Springboot项目的时候选择依赖的时候Spring web、Dev Tools、Lombok、Configuration Processor

SpringMVC自动配置

静态资源访问

1、目录
静态资源jsp、png、html放在静态资源目录下
目录可以下面这些
image.png

原理: 静态映射/**
先去所有的容器里找,然后再去静态资源文件找
也可以改变
spring.mvc.static-location=classpath:/haha/
2、静态资源访问前缀
默认无前缀
在配置文件中设置spring.mvc.static-path-pattern=/res/**

欢迎页支持

Springboot默认访问tomcat是从静态资源下 index.html
可以配置静态资源路径
不可以配置静态资源的访问前缀,否则无法默认访问
controller能处理 index

自定义Favicon 小图标

image.png

Springboot默认访问在stactic目录下加入favicon.ico
image.png

静态路径不可以访问到

静态资源配置原理

SpringBoot启动默认加载 xxxAutoConfiguration类
SpringMVC功能的自动配置类 大多在WebMvcAutoConfiguration,生效
给容器中配置

请求参数处理

前后端的数据传输都是以Json的形式传输
image.png

请求映射

在Controler中定义自己的请求
image.png

核心Filter: HiddenHttpMethodFilter
用法:
在html中的Form中绑定action
image.png

页面显示:
image.png

点击删除
image.png

Spring Boot要手动开启Delete:
spring.mvc.hiddenmethod.filter.enabled=true
image.png

请求映射原理

image.png

JVM DispatcherServlet
所有的请求映射都在HandlerMapping(映射处理器)中
比如 SpringBoot自动配置了欢迎页的HanderMapping 访问/就可以访问/index.html

普通参数与基本注解

以Json数据发送请求,但是可以设置xml 只需要在请求后面加?format=xml

@ PathVariable使用

路径变量获取{ }中的数据返回
image.png

将数据都放入到map中,然后返回map,我这里是以Xml的格式返回
image.png

点击
image.png

页面返回Map
image.png

@RequestHeader使用

@RequestParam(获取请求参数)

image.png

image.png

@RequestBody(获取请求体[POST])表单

Controller:
image.png

Html:
image.png

页面:
image.png

点击提交返回
image.png

要有name不然无法获取

@RequestAttribute获取request域属性

image.png

先将msg部署进去
然后访问数据有两种办法
1、注解
image.png
image.png

2、request中getAttribute
image.png

3、中文乱码问题
配置文件中加入
server.tomcat.uri-encoding=utf-8
server.servlet.encoding.force=true
server.servlet.encoding.enabled=true
server.servlet.encoding.charset=UTF-8

@MatrixVariable矩阵变量

1、语法
image.png
2、SpringBoot默认禁用了矩阵变量
手动开启:原理 对于路径的处理 UrlPathHelper进行解析
方法一:
image.png

方法二:
image.png

image.png

复杂参数

Map Model HttpServertRequest(map model 里面的数据会被放在request请求域中)
给requset数据域中放数据
image.png

收到请求
image.png

返回Json
image.png

自定义对象参数(对象)

数据绑定:页面提交请求(GET、POST)到可以和对象属性进行绑定
1、在bean层写入对象
image.png

image.png

2、在html中form一一对应他的属性
image.png

3、绑定controller
image.png
image.png
点击提交返回Json数据:
image.png

自定义Converter

当我想让pet的格式获取为名字,年龄
image.png

Converter是SpringMvc里面的功能,可以将html获取的数据进行转换

自定义SpringMVC的功能:在Bean里面重新写函数返回WebMvcConfigurer

在返回WebMvcConfigurer中重写addFormatters方法
addFormatter可以通过FormatterRegistry添加一个Converter
要写好获取类型和返回类型
然后再重新Convert方法,将字符串分割
image.png
image.png

数据响应与内容协商

image.png

响应JSON

Springboot自动引入JSON
只需要给方法中标注RespondBody,就可以前段自动返回json数据,或者直接RequestMapping
image.png

内容协商

根据客户端接受能力不同,返回不同媒体类型的依赖
image.png

通过遍历所有的MessageConverter能找到合适处理MediaType的MessageConverter

例如:
1、xml依赖

<dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

2、PostMan测试返回json 和xml
只需要改变请求头Accept字段,Http协议中规定的告诉服务器客户端可以接收的数据类型
image.png

3、开启浏览器参数方式内容协商功能
spring.mvc.contentnegotiation.favor-parameter=true
image.png

4、自定义MessageConverter

视图解析与模板引擎

视图解析:SpringBoot默认不支持 JSP,需要引入第三方模板引擎技术实现页面渲染。

1、视图解析

image.png

过程:把所有的页面资源放在templates文件夹中,然后根据每个页面的不同操作,写对应的controller,完成数据交互

2、Thymeleaf模板引擎

官方文档
https://www.thymeleaf.org
可以把客户端的内容写到网页中
与JSP(动态网页技术)Velocity,FreeMaker 等模板引擎类似,也可以轻易地与 Spring MVC 等 Web 框架集成,当通过 Web 应用程序访问时,Thymeleaf 会动态地替换掉静态内容,使页面动态显示。
https://www.thymeleaf.org
()
1、引入依赖

 <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

2、自动配置
自动配好的策略
● 1、所有thymeleaf的配置值都在 ThymeleafProperties
● 2、配置好了 SpringTemplateEngine
● 3、配好了 ThymeleafViewResolver 视图解析器
● 4、我们只需要直接开发页面
前缀
image.png

后缀
image.png

3、页面开发
先引入thymeleaf

<html lang="en" xmlns:th="http://www.thymeleaf.org">

在页面中
image.png

image.png

构建后台管理系统

模板下载
https://gitee.com/coderdlg/adminex/tree/master
1、将表单绑定post和/login请求
Bean中User类
image.png

表单发送Post方式的login请求,处理完进入main
image.png

image.png

2、login跳转到main页
image.png

image.png

session原理
image.png

image.png

model
image.png

3、抽取公共页
(1)写入公共元素
每个页面的左侧菜单和头菜单都是一样的
在common.html中写上相同的
如头都是一样的
image.png

(2)标注名字(两种方法)th官方文档中有
image.png

(3)使用公共
th调用,有三种用法
image.png

include:不会保留大标签
replace:会保留head
例如在main中调用公共同的head的link:
image.png

id调用
image.png

例如:在main中调用公共的JS
image.png

(4)修改公共跳转页面
在common中找到跳转去掉.html,直接访问路径下的页面
image.png

4、在form中历练表单
image.png

拦截器

主要登入检查功能
有三种位置
prehandler在处理目标方法前
在处理方法后还没到页面posthandler
在页面结束后还可以afterhandler
核心 HandlerInterceptor 接口
1、编写一个拦截器实现HandlerInterceptor接口
image.png

2、拦截器注册到容器中 (实现webmvcConfiguer的addinteceptors)
3、指定拦截规则
image.png

异常记录处理

image.png

spring.mvc.hiddenmethod.filter.enabled=true

web原生组件(Servlet Filter Listener)

1、使用Servlet api
Servlet
先在主函数上写@ServletComponentScan指定Servlet组件放哪里
image.png

然后利用@WebServlet(urlPatterns = “/my”)直接响应,没有经过Spring拦截器
image.png
Filter(过滤器)
https://blog.csdn.net/m0_51545690/article/details/123677340
image.png

Listener (监听器)

image.png

2、使用RegistrationBean
ServletRegistrationBean, FilterRegistrationBean, and ServletListenerRegistrationBean
image.png

嵌入式Servlet容器

● 默认支持的webServer
○ Tomcat, Jetty, or Undertow
○ ServletWebServerApplicationContext 容器启动寻找ServletWebServerFactory 并引导创建服务器
● 原理
○ SpringBoot应用启动发现当前是Web应用。web场景包-导入tomcat
○ web应用会创建一个web版的ioc容器 ServletWebServerApplicationContext
○ ServletWebServerApplicationContext 启动的时候寻找ServletWebServerFactory(Servlet 的web服务器工厂—> Servlet 的web服务器)
○ SpringBoot底层默认有很多的WebServer工厂; TomcatServletWebServerFactory, JettyServletWebServerFactory, or UndertowServletWebServerFactory
○ 底层直接会有一个自动配置类。ServletWebServerFactoryAutoConfiguration
○ ServletWebServerFactoryAutoConfiguration导入了ServletWebServerFactoryConfiguration(配置类)
○ ServletWebServerFactoryConfiguration 配置类 根据动态判断系统中到底导入了那个Web服务器的包。(默认是web-starter导入tomcat包),容器中就有 TomcatServletWebServerFactory
○ TomcatServletWebServerFactory 创建出Tomcat服务器并启动;TomcatWebServer 的构造器拥有初始化方法initialize—this.tomcat.start();
○ 内嵌服务器,就是手动把启动服务器的代码调用(tomcat核心jar包存在)
image.png

定制化原理

1、定制化的常见方式
● 修改配置文件;
● xxxxxCustomizer;
● 编写自定义的配置类 xxxConfiguration;+ @Bean替换、增加容器中默认组件;视图解析器
● Web应用 编写一个配置类实现 WebMvcConfigurer 即可定制化web功能;+ @Bean给容器中再扩展一些组件
image.png

JWT

什么是JWT

1.什么是JWT

在介绍JWT之前,我们先来回顾一下利用token进行用户身份验证的流程:

客户端使用用户名和密码请求登录
服务端收到请求,验证用户名和密码
验证成功后,服务端会签发一个token,再把这个token返回给客户端
客户端收到token后可以把它存储起来,比如放到cookie中
客户端每次向服务端请求资源时需要携带服务端签发的token,可以在cookie或者header中携带
服务端收到请求,然后去验证客户端请求里面带着的token,如果验证成功,就向客户端返回请求数据
依赖

  <dependency>
			<groupId>com.auth0</groupId>
			<artifactId>java-jwt</artifactId>
			<version>3.10.3</version>
		</dependency>

2、原理分析套路
场景starter - xxxxAutoConfiguration - 导入xxx组件 - 绑定xxxProperties – 绑定配置文件项
3、使用会在下一篇Springboot+vue中详细讲

数据访问

SQL

数据源的配置

1、导入JDBC场景

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>

自动导入了
image.png

导入数据库驱动MySQL
https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.20
去Maven官网找到自己的MySql版本
image.png
2、自动配置

image.png

3、修改配置项
image.png

4、检验是否连接
image.png

使用Druid数据源

1、引入依赖

		<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.17</version>
        </dependency>

2、自定义方法
(1)StatViewServlet
StatViewServlet的用途包括:
提供监控信息展示的html页面
提供监控信息的JSON API
监控页功能

@Bean
public ServletRegistrationBean servletRegistrationBean(){
    StatViewServlet statViewServlet=new StatViewServlet();
    ServletRegistrationBean<StatViewServlet> registrationBean=new ServletRegistrationBean<>(statViewServlet,"/druid/*");
    return registrationBean;
}

开启监控功能
image.png

访问sql 监控生效
image.png

3、官方方法
引入依赖

	 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.17</version>
        </dependency>

手动配置
image.png

####对 MyBatis操作

1、映入starter

	<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

image.png

Mybatis官方文档
https://mybatis.org/mybatis-3/zh/index.html

配置模式

步骤:
1、
全局配置文件
内容都配置好了不用 写
image.png

2、指定配置路径
image.png

3、Bean
image.png

要加入Mapper注解 不然mybatis找不到
image.png

配置xml绑定接口,绑定函数 mapper就可以操作数据库
image.png

4、Service
image.png

5、controller调用Service
image.png

中文乱码问题上面提到,修改配置就可以了

注解模式

1、写City类放入到Bean
image.png

2、写Mapper
image.png

3、写service
image.png

image.png

整合Mybatis-plus完成Crud
整合Mybatis-plus

官网文档:https://baomidou.com/pages/226c21/
他是Mybatis的一个增强工具,简化开发,非常好用,比Mybatis方便很多
建议下载Mybatis X插件

1、映入依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>

自动配置了
image.png

准备工作
1、自动包扫
image.png

2、如果要用Mybatis配置模式也可以 只不过位置改了
image.png

3、Bean中放类
image.png

4、写Mapper
image.png

5、在Service中创建有关服务接口
image.png

6、在Service创建一个impl实现包,创关于Service接口的实现类
image.png

实战:Crud

1、展示数据
image.png

image.png

2、分页
controller
image.png

from
image.png

分页功能
image.png
image.png

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值