SpringBoot
2.1 Spring分布式架构
2.2 SpringBoot 概述
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。
该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
2.3 为什么要使用SpringBoot
说到为什么使用Spring Boot, 就不得不提到Spring框架的前世今生
Spring框架由于其繁琐的配置,一度被人认为“配置地狱”,各种XML、Annotation配置混合使用,让人眼花缭乱,而且如果出错了也很难找出原因。
通过SpringMVC框架部署和发布web程序,需要和系统外服务器进行关联,操作繁琐不方便。
Spring Boot是由Spring官方推出的一个新框架,对Spring进行了高度封装,是Spring未来的发展方向。使用Spring
Boot框架后,可以帮助开发者快速搭建Spring框架,也可以帮助开发者快速启动一个Web服务,无须依赖外部Servlet容器,使编码变得简单,使配置变得简单,使部署变得简单,使监控变得简单。
2.4 Spring 前世今生
1) Spring1.x 时代
在Spring1.x时代,都是通过xml文件配置bean
随着项目的不断扩大,需要将xml配置分放到不同的配置文件中
需要频繁的在java类和xml配置文件中切换。
2) Spring2.x时代
随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的
减少了xml配置文件,同时也大大简化了项目的开发。
那么,问题来了,究竟是应该使用xml还是注解呢?
最佳实践:
应用的基本配置用xml,比如:数据源、资源文件等;
业务开发用注解,比如:Service中注入bean等;
3) Spring3.x到Spring4.x
从Spring3.x开始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的
Bean,现在我们就处于这个时代,并且Spring4.x和Spring
boot都推荐使用java配置的式。
1 | //Spring 1.X |
2.5 自动创建一个SpringBoot项目
1) 在Idea中new→Module→Spring Initializr
2) 给工程命名、设置包名等,其他默认即可
3) 选择工程的版本
4) 点击Next ,给工程命名,然后点击Finish
2.6 手动创建一个SpringBoot 项目
2.6.1 创建Maven项目
2.6.2 集成Spring Boot框架
- 修改pom.xml文件,增加Spring Boot框架的依赖关系及对Web环境的支持。
1 | <project> |
- Spring Boot版本为官方最新正式版2.2.2.RELEASE
- 以往的项目中,所有类库的依赖关系都需要我们自己导入到pom.xml文件中,但是Spring
Boot项目增加spring-boot-starter-web依赖后,会自动加载web环境配置相关依赖(SpringMVC,
Tomcat),简化了我们的操作。 - spring-boot-starter-parent:继承Spring Boot的相关参数
- spring-boot-starter-xxx:代表一个Spring Boot模块
- spring-boot-starter-web:代表Web模块,在这个模块中包含了许多依赖的JAR包
扩展:修改一下Maven编译插件的版本
1 | <properties> |
2.6.3 增加程序代码
- 在src/main/java目录中增加类com.atguigu.springboot.SpringBootSelfApplication,并增加相应代码。
1 | package com.atguigu.springboot; |
- Spring
Boot项目中都会有一个以Application结尾的应用类,然后有一个标准的Java入口方法main方法。通过这个方法启动SpringBoot项目,方法中无需放入任何业务逻辑。 - @SpringBootApplication注解是Spring Boot核心注解
- 右键点击项目或项目中的SpringBootSelfApplication类, 选择菜单Run as Spring Boot
App,启动SpringBoot项目.
2.6.4 集成Tomcat服务器
- SpringBoot内置了Tomcat,当增加Web依赖后执行main方法,等同于启动Tomcat服务器,
默认端口号为8080。如果想具体指定,通过server.port来指定 - 默认情况下SpringBoot启动后,默认的context-path的值为/,从浏览器端访问项目时,,不需要加项目名,直接通过
http://localhost:8080/请求名 来访问,
如果想具体指定,通过server.servlet.context-path来指定 - 例如:在src/main/resources/目录中增加application.properties文件。
1 | =/ |
- SpringBoot会自动读取src/main/resources/路径或着src/main/resources/config路径中的application.properties文件或application.yml文件。
2.6.5 为什么还会有配置文件
Spring Boot我们称之为微框架,这里的“微”不是小和少的意思,而是“简”的意思,简单,简洁。
项目中大部分的基础配置由Spring Boot框架帮我们自动集成,简化了我们的配置,但是框架自身为了扩展性,依然需要提供配置文件。
上面的代码中只是简单的应用了Spring Boot框架,但是我们真正要做的是将Spring
Boot应用到项目中,所以接下来我们增加对SpringMVC框架,Mybatis框架的集成。
2.7 SpringBoot 集成 Spring & Spring Web MVC
- 基本的Spring Boot环境已经构建好了,现在需要配置Spring框架及SpringMVC框架的业务环境
2.7.1 @ComponentScan注解
- 通过@ComponentScan注解指定扫描的包
1 | package com.atguigu.springboot; |
- 默认扫描
默认扫描当前包com.atguigu.springboot和子包com.atguigu.springboot.*
如果还需要扫描其他的包,那么需要增加@ComponentScan注解,指定包名进行扫描。
2.7.2 增加控制器代码
在src/main/java目录中增加类com.atguigu.springboot.controller.UserController,并增加相应代码。
1 | package com.atguigu.springboot.controller; |
2.7.3 执行main方法启动应用
访问路径http://localhost:8080[/应用路径名称]/ getAllUser页面打印JSON字符串即可
2.7.4 @Controller和@RestController区别
@RestController等同于@Controller + @ResponseBody,所以上面的代码可以变为:
1 | package com.atguigu.springboot.controller; |
2.7.5 页面跳转[了解]
1) 如果需要转发跳转Jsp页面,可参考如下步骤
- 在pom.xml中加入如下依赖
1 | <dependency> |
- 将jsp页面存放在src/main/webapp目录下,Springboot默认从该目录下查找jsp页面
- 在application.properties文件中配置:
1 | =/ |
2) 如需要进行重定向,可参考如下步骤
- 在请求处理方法中的返回值前面加上”redirect:”
- 重定向的页面同样存放在src/main/webapp下
2.8 SpringBoot集成通用Mapper
2.8.1 通用Mapper简介
通用mapper可以极大的方便开发人员进行CRUD操作,提供极其方便的单表增删改查。
一句话简单说,它就是个辅助mybatis极简单表开发的组件。它不是为了替代mybatis,而是让mybatis的开发更方便。
2.8.2 集成通用Mapper
1) 在pom.xml中加入通用Mapper的starter
1 | <dependency> |
2) 添加持久层代码
- 通用Mapper提供了Mapper接口,该接口中提供了常用的CRUD方法.
- 用户可以自己定义自己的Mapper接口,继承通用Mapper提供的Mapper接口,
1 | package com.atguigu.springboot.mapper; |
3) 在src/main/resources下创建application.yml文件,配置数据源
1 | # jdbc配置 |
2.9 整合测试
2.9.1 增加业务层代码
1) 增加业务层接口
1 | package com.atguigu.springboot.service; |
2) 增加业务层实现类
1 | package com.atguigu.springboot.service; |
2.9.2 增加控制层方法
1 | package com.atguigu.springboot.controller; |
2.9.3 扫描Mapper
1 | (basePackages = "com.atguigu.springboot.mapper") |
2.9.4 测试
访问路径http://localhost:8080[/应用路径名称]/ getAllUser页面打印JSON字符串即可
2.10 Restful风格URL
2.10.1 REST 简介
REST(Representational State Transfer)又被称作表现层状态转换。它涉及到三个重要名词:
资源
所谓资源简单讲就是服务所能提供的数据,可以是实体数据也可是媒体类型,图片、PDF、文本等
表现层
何为变现层?简单说就是将数据以某种方式展现给用户,或者给客户返回一张图片等等动作称之为表现,通常是已JSON或XML形式展现数据
状态转换
状态转换就是对数据进行一系列的操作,因为资源本身并非一尘不变,随着需求的变化而变化。一个资源可能会随着需求的变化而经历一个资源创建、修改、查询、删除等过程,REST风格正是基于HTTP协议运行的,HTTP协议又被称为无状态协议,所以资源的变化需要在服务端完成,
简单用一句话概括就是:REST风格使用URL定位资源,用HTTP动词(GET,POST,DELETE,PUT)描述操作。
2.10.1 REST 规定
GET请求
- 获取资源
例如:/emp/1
获取id=1的员工信息
- POST请求
- 添加资源
例如:/emp
添加员工信息
- PUT请求
- 更新资源
例如:/emp/1
更新id=1的员工信息
- DELETE请求
- 删除资源
例如:/emp/1
删除id=1的员工信息
2.10.2 Resulful风格URL 和普通URL对比
普通URL:localhost:8888/SpringBootSelf/selectUser?id=1001&username=zhangsan
Restful: localhost:8888/SpringBootSelf/selectUser/1001/zhangsan
2.10.3 如何在后台处理Restful风格URL中的参数
客户端的URL:
localhost:8888/SpringBootSelf/selectUser/1001在@RequestMapping注解中使用 {} 占位符对应实际URL中的参数
1 | ("/selectUser/{ids}") |
- 在方法中使用@PathVariable注解指定将占位符对应的URL中的参数值赋值给方法的形参.
1 | ("/selectUser/{ids}") |
2.10.4 转换PUT请求和DELETE请求[了解]
PUT请求和DELETE请求需要通过POST请求来转换
发送POST请求我们需要在form表单中发送,所以我们需要使用SpringBoot的模板
转换的步骤:
1、添加Thymeleaf模块
1 | <dependency> |
添加该模块后在main/resources目录下创建templates目录
2、在templates目录下创建index.html页面,添加form表单,请求方式设置为post,表单中设置一个隐藏域,name属性值为_method,value值为put(转换为PUT请求时的值)或delete(转换为DELETE请求时的值)
1 |
|
3、配置过滤器
- 创建一个类继承HiddenHttpMethodFilter
- 在类上添加@WebFilter
1 | import org.springframework.web.filter.HiddenHttpMethodFilter; |
4、在启动类上添加@ServletComponentScan注解
1 |
|












