Spring Boot与Web开发
SpringMVC快速使用
1.基于restful http接口 的CURD
2.调用rest http接口
通过RestTemplate调用
3.通过postman调用
通过MockMvc测试
4.通过swagger调用
- 添加依赖
- 添加swagger配置类
注意:访问的地址是:http://localhost:8080/swagger-ui.html - 配置http接口
- 配置pojo类
访问:http://localhost:8080/swagger-ui.html
扩展: 实现通过swagger记录请求日志
2.SpringMVC自动配置原理分析
Spring Boot为Spring MVC提供了自动配置,可与大多数应用程序完美配合。
自动配置在Spring的默认值之上添加了以下功能:
包含ContentNegotiatingViewResolver和BeanNameViewResolver。
ViewResolver 都是SpringMVC内置的视图解析器
ContentNegotiatingViewResolver
他并不会解析视图、而是委派给其他视图解析器进行解析
所有视图解析器,都会根据返回的视图名称进行解析
视图 resolveViewName
委派给其他视图解析器进行解析:
BeanNameViewResolver
会根据handler方法返回的视图名称 (xushu), 去ioc容器中到到名字叫aa的一个Bean,并且这个bean要实现了VIew接口
可以配置一个名字叫aa的视图(VIew)
由以上代码可以得出结论,它是从Spring IOC容器获得ViewResolver类型Bean,那么我们可以自己定制一个ViewResolver,ContentNegotiatingViewResolver也会帮我们委派解析
支持提供静态资源。包括对WebJars的支持(在本文档的后面部分中有介绍)。
以前要访问jpg\css、js 等 这些静态资源文件, 需要在web.xml配置 ,在springboot不需要配置,只需要放在约定文件夹中就可以(约定大于配置)
原理:
WebJars: 就是将静态资源放在jar包中进行访问。
3.定制SpringMvc的自动配置
SpringMVC的自动配置类:WebMvcAutoConfiguration
-
在大多数情况,SpringBoot在自动配置中标记了很多@ConditionalOnMissingBean(xxxxxxxxx.class); (意
思就是如果容器中没有,当前的@bean才会生效)。 只需要在自己的配置类中配置对应的一个@Bean就可以覆盖默认自动配置。
还得结合源码的实际功能进行定制。
2.通过WebMvcConfigurer进行扩展
a. 扩展视图控制器
b. 扩展拦截器
c. 扩展全局CORS
-
Json 开发
Spring Boot提供了与三个JSON映射库的集成:
Gson
Jackson 性能最好
JSON-B
Jackson 是我们使用的默认json库
jsckson的使用
@JsonIgnore
进行排除json序列化,将它标注在属性上将不会进行json序列化
@JsonFormat(pattern = “yyyy-MM-dd hh:mm:ss”,locale = “zh”)
进行日期格式化
@JsonInclude(JsonInclude.Include.NON_NULL)
当属性值为null时则不进行json序列化
@JsonProperty(“uname”)
来设置别名
SpringBoot 还提供了@JsonComponent 来根据自己的业务需求进行json的序列化和反序列化
3.国际化
SpringBoot
- 添加国际化资源文件 resource
- 配置messageResource 设置国际化资源文件
a. 在Springboot中提供了MessageSourceAutoConfiguration 所以,我们不需要去配置
messageResource
b. 但是它并生效:开启debug=true
自动配置类没有生效的原因:
matches:
getMatchOutcome
只要在这个方法中将返回的ConditionOutcome .match =true 就匹配成功
getMatchOutcomeForBasename:
如果要让它生效
必须保证 在类路径下的messages文件夹中有国际化的资源文件
或者自己配置spring.messages.basename 告诉它资源文件在哪
即在配置文件中加上这句代码:
只要找到了国际化的属性资源文件那就会设置ConditionOutcome.match=true
当ConditionOutcome.match=true 那么@Conditional(ResourceBundleCondition.class) 就匹配成功
一旦匹配成功那自动配置类就会生效,就会帮我们配置一个meesageSource
3. 需要去解析请求头中的accept-language 或者 解析url参数中?local=
其实WebMvcAutoConfiguration 类也帮我配置了一个解析请求头中的accept-language 的localResolver
4. 随意切换本地语言,进行缓存
a. 覆盖原有localeResolver 因为自动配置类中的localeResovler它只会从accept-language中解析
- 通过messageResource 获取国际化信息
4.统一异常处理
1.SpringBoot 有统一异常处理自动配置类
ErrorMvcAutoConfiguration
它统一异常处理自动配置类
重要组件
DefaultErrorAttributes
BasicErrorController
DefaultErrorViewResolver 用来解析错误视图页面
BasicErrorController
它其实就是一个处理/error请求的一个控制器
定制自己的统一异常处理
2.@ControllerAdivce
4.SpringBoot的嵌入式Servlet容器
Spring 默认的Servlet容器是:Tomcat, 当前SpringBoot 2.3.6 的版本是对应 tomcat9
1.嵌入式Servlet容器配置修改
1.通过全局配置文件修改
可以通过server.xxx 来进行web服务配置, 没有带服务器名称的则是
通用配置
通过带了具体的服务器名称则是单独对该服务器进行设置,比如
server.tomcat.xxx 就是专门针对tomcat的配置
2.通过WebServerFactoryCustomizer的Bean修改
修改server.xxx 配置的相关内容
会跟配置文件形成互补
2.注册servlet三大组件
servlet listener filter
servlet3.0规范提供的注解方式注册
1.声明servlet 及映射
2.加上@ServletComponentScan才会扫描上面3个注解
SpringBoot提供的注册
使用ServletRegistrationBean,FilterRegistrationBean以及
ServletListenerRegistrationBean
3.切换其他嵌入式Servlet容器
Spring Boot包含对嵌入式Tomcat,Jetty和Undertow服务器的支持
tomcat(默认)
Jetty(socket)
Undertow(响应式)
5.使用外部Servlet容器
外部servlet容器
服务器、本机 安装tomcat 环境变量…
部署: war—运维—>tomcat webapp startup.sh 启动
开发: 将开发绑定本地tomcat
开发 、 运维 服务器配置 war
内嵌servlet容器:
部署: jar—> 运维—java -jar 启动
使用:
- 下载tomcat服务
2.设置当前maven项目的打包方式
3.让tomcat相关的依赖不参与打包部署 ,因为外置tomcat服务器已经有这些jar包
4 为了让它支持springboot需要加上: 才能启动springboot应用
5 在idea中运行