语法基础:Java、Html、JavaScript、Css、Sql、Maven、Thymeleaf
系统需求:VsCode/IDEA、MysqlWorkbench、Maven3+
IDEA需要破解版,大家可以自己去找资源,本篇文章用的是VsCode,Mysql可以用自己喜欢的软件
官方文档
https://spring.io
在开发中我们需要用到SSM来框架来开发,SSM框架是spring、spring MVC 、和mybatis框架的整合,是标准的MVC。标准的SSM框架有四层,分别是dao层(mapper),service层,controller层和View层。使用spring实现业务对象管理,使用spring MVC负责请求的转发和视图管理,mybatis作为数据对象的持久化引擎。本篇文章会一个一个详细介绍四层框架。
他可以快速的创建出出生产级别的Spring应用
优点:
1、创建独立Spring应用
2、内嵌Web服务器
3、自动starter依赖,简化配置
4、自动配置Spring以及第三方功能
5、无代码生成、无需编写XML
JDK :在VsCode中配置下的好JDK
VsCode及插件: Java Extension Pack & Spring Boot Extension Pack
Java:
VSCode 配置Java Home 要不然无法编译运行JAVA
Maven是一个项目管理工具,它包含了一个项目对象模型(POM:Project Object Model),一组标准集合,一个项目生命周期(Project LifeCycle),一个依赖管理系统(Dependency managerment System),和用来运行定义在生命周期(phase)中插件(plugin)目标(goal)的逻辑。
通俗来说,我们需要引入的各种Jar包,Maven可以自动下载。
官方文档
https://maven.apache.org
创一个空文件夹,然后VsCode打开 control +shift + P打开VsCode场景选择起
在下载的Spring Initialize Java Support中可以通过Maven自动创建一个Springboot 项目
选择配置好的Java Version 注意一定要和自己在Vscode中的配置的版本一样
不知道的可以打开终端输入 Java -v
选择场景依赖,也是场景启动器,你需要的依赖都可以选择,这里可以先选择DevTools
创建之后就是在第一次加载,可能需要很长时间,Maven要下载jar包
启动Springboot Hello
在Controller中写一个HelloController 标注是Controller注解,这是第一个Hello请求
在页面中输入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 包里面
1.在pom文件中 parent几乎声明了所有开发中的版本号
2.修改版本号
查看spring-boot-dependencies里面规定当前依赖的版本用的key
在当前项目里面重写配置
3.starter场景启动器
4、所有场景启动器最底层的依赖
依赖
org.springframework.boot
spring-boot-starter-tomcat
2.3.4.RELEASE
compile
(1)@AutoConfigurationPackage
自动配置包
将指定的一个包下的所有组件导入进来(包MainApplication)
(2)@Import(AutoConfigurationImportSelector.class)
所有的自动配置类在这里配置写死
4、按需开启自动配置
虽然127个场景所有配置在启动时候都会加载
但最终都会按需配置
5、修改只需要在
在Config包中,你需要添加和修改的配置类需要加上@Configuration注解,这会告诉springboot这是一个配置类==配置文件
在Configuration中使用@Bean是将此方法注入到容器中,才可以调用,不然会报空指针异常
@component是spring中的一个注解,它的作用就是实现bean的注入。在Java的web开发中,提供3个@Component注解衍生注解(功能与@component一样)分别是:
@Controller 控制器(注入服务) 用于标注控制层,在controller包中所有的controller都要加上这个注解
来告诉Springboot这是一个控制层
@Service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理
@Repository(实现dao访问) 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件
####@ComponentScan、@ Import( )导入组件
在Config中使用@Import({User.class})将User这个类注入到Config中,这样才可以使用
条件装配:满足Conditional指定的条件,则进行组件注入
在浏览器输入localhost:8080/car
因为我的注解是RestController它会将返回的数据变成Json的形式
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可以自动设置Bean的get set等方法
@Data自动映入属性的set和get方法
@ArgsConstructor 设置全参构造器
1、引入依赖
在springboot dependecy找到lombok然后加入到pom文件中
2、安装插件
在编译的时候自动生成
4、@Slf4j日志
log.info(String字符串)
在编译的时候终端会打印出日志内容
自动配置maven,创建springboot,要什么场景直接选
https://yaml.org/spec/1.2.2/
下载yaml插件将application.properties改成yaml结尾
可以防止在配置文件中的冗余
基本语法可以看官方文档
创建:在创建Springboot项目的时候选择依赖的时候Spring web、Dev Tools、Lombok、Configuration Processor
1、目录
静态资源jsp、png、html放在静态资源目录下
目录可以下面这些
原理: 静态映射/**
先去所有的容器里找,然后再去静态资源文件找
也可以改变
spring.mvc.static-location=classpath:/haha/
2、静态资源访问前缀
默认无前缀
在配置文件中设置spring.mvc.static-path-pattern=/res/**
Springboot默认访问tomcat是从静态资源下 index.html
可以配置静态资源路径
不可以配置静态资源的访问前缀,否则无法默认访问
controller能处理 index
Springboot默认访问在stactic目录下加入favicon.ico
静态路径不可以访问到
SpringBoot启动默认加载 xxxAutoConfiguration类
SpringMVC功能的自动配置类 大多在WebMvcAutoConfiguration,生效
给容器中配置
核心Filter: HiddenHttpMethodFilter
用法:
在html中的Form中绑定action
Spring Boot要手动开启Delete:
spring.mvc.hiddenmethod.filter.enabled=true
JVM DispatcherServlet
所有的请求映射都在HandlerMapping(映射处理器)中
比如 SpringBoot自动配置了欢迎页的HanderMapping 访问/就可以访问/index.html
以Json数据发送请求,但是可以设置xml 只需要在请求后面加?format=xml
将数据都放入到map中,然后返回map,我这里是以Xml的格式返回
Controller:
要有name不然无法获取
3、中文乱码问题
配置文件中加入
server.tomcat.uri-encoding=utf-8
server.servlet.encoding.force=true
server.servlet.encoding.enabled=true
server.servlet.encoding.charset=UTF-8
1、语法
2、SpringBoot默认禁用了矩阵变量
手动开启:原理 对于路径的处理 UrlPathHelper进行解析
方法一:
Map Model HttpServertRequest(map model 里面的数据会被放在request请求域中)
给requset数据域中放数据
数据绑定:页面提交请求(GET、POST)到可以和对象属性进行绑定
1、在bean层写入对象
Converter是SpringMvc里面的功能,可以将html获取的数据进行转换
自定义SpringMVC的功能:在Bean里面重新写函数返回WebMvcConfigurer
在返回WebMvcConfigurer中重写addFormatters方法
addFormatter可以通过FormatterRegistry添加一个Converter
要写好获取类型和返回类型
然后再重新Convert方法,将字符串分割
Springboot自动引入JSON
只需要给方法中标注RespondBody,就可以前段自动返回json数据,或者直接RequestMapping
通过遍历所有的MessageConverter能找到合适处理MediaType的MessageConverter
例如:
1、xml依赖
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
2、PostMan测试返回json 和xml
只需要改变请求头Accept字段,Http协议中规定的告诉服务器客户端可以接收的数据类型
3、开启浏览器参数方式内容协商功能
spring.mvc.contentnegotiation.favor-parameter=true
4、自定义MessageConverter
视图解析:SpringBoot默认不支持 JSP,需要引入第三方模板引擎技术实现页面渲染。
过程:把所有的页面资源放在templates文件夹中,然后根据每个页面的不同操作,写对应的controller,完成数据交互
官方文档
https://www.thymeleaf.org
可以把客户端的内容写到网页中
与JSP(动态网页技术)Velocity,FreeMaker 等模板引擎类似,也可以轻易地与 Spring MVC 等 Web 框架集成,当通过 Web 应用程序访问时,Thymeleaf 会动态地替换掉静态内容,使页面动态显示。
https://www.thymeleaf.org
()
1、引入依赖
org.springframework.boot
spring-boot-starter-thymeleaf
2、自动配置
自动配好的策略
● 1、所有thymeleaf的配置值都在 ThymeleafProperties
● 2、配置好了 SpringTemplateEngine
● 3、配好了 ThymeleafViewResolver 视图解析器
● 4、我们只需要直接开发页面
前缀
3、页面开发
先引入thymeleaf
模板下载
https://gitee.com/coderdlg/adminex/tree/master
1、将表单绑定post和/login请求
Bean中User类
3、抽取公共页
(1)写入公共元素
每个页面的左侧菜单和头菜单都是一样的
在common.html中写上相同的
如头都是一样的
include:不会保留大标签
replace:会保留head
例如在main中调用公共同的head的link:
(4)修改公共跳转页面
在common中找到跳转去掉.html,直接访问路径下的页面
主要登入检查功能
有三种位置
prehandler在处理目标方法前
在处理方法后还没到页面posthandler
在页面结束后还可以afterhandler
核心 HandlerInterceptor 接口
1、编写一个拦截器实现HandlerInterceptor接口
2、拦截器注册到容器中 (实现webmvcConfiguer的addinteceptors)
3、指定拦截规则
异常记录处理
spring.mvc.hiddenmethod.filter.enabled=true
1、使用Servlet api
Servlet
先在主函数上写@ServletComponentScan指定Servlet组件放哪里
然后利用@WebServlet(urlPatterns = “/my”)直接响应,没有经过Spring拦截器
Filter(过滤器)
https://blog.csdn.net/m0_51545690/article/details/123677340
Listener (监听器)
2、使用RegistrationBean
ServletRegistrationBean, FilterRegistrationBean, and ServletListenerRegistrationBean
● 默认支持的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包存在)
1、定制化的常见方式
● 修改配置文件;
● xxxxxCustomizer;
● 编写自定义的配置类 xxxConfiguration;+ @Bean替换、增加容器中默认组件;视图解析器
● Web应用 编写一个配置类实现 WebMvcConfigurer 即可定制化web功能;+ @Bean给容器中再扩展一些组件
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中详细讲
1、导入JDBC场景
org.springframework.boot
spring-boot-starter-data-jdbc
导入数据库驱动MySQL
https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.20
去Maven官网找到自己的MySql版本
2、自动配置
1、引入依赖
com.alibaba
druid
1.1.17
2、自定义方法
(1)StatViewServlet
StatViewServlet的用途包括:
提供监控信息展示的html页面
提供监控信息的JSON API
监控页功能
@Bean
public ServletRegistrationBean servletRegistrationBean(){
StatViewServlet statViewServlet=new StatViewServlet();
ServletRegistrationBean registrationBean=new ServletRegistrationBean<>(statViewServlet,"/druid/*");
return registrationBean;
}
3、官方方法
引入依赖
com.alibaba
druid-spring-boot-starter
1.1.17
####对 MyBatis操作
1、映入starter
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.4
Mybatis官方文档
https://mybatis.org/mybatis-3/zh/index.html
中文乱码问题上面提到,修改配置就可以了
官网文档:https://baomidou.com/pages/226c21/
他是Mybatis的一个增强工具,简化开发,非常好用,比Mybatis方便很多
建议下载Mybatis X插件
1、映入依赖
com.baomidou
mybatis-plus-boot-starter
3.4.1
6、在Service创建一个impl实现包,创关于Service接口的实现类