写在前面
鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的博文初步都定下来包括SpringBoot介绍、入门、配置、日志相关、web开发、数据访问、结合docker、缓存、消息队列、检索、任务安全、分布式等等一系列的博文,工作量很大,是个漫长的过程,每一步我都尽量详细,配上截图说明,也希望对看的同学真的有用。
单纯就是想分享技术博文,还想说一句就是,如果觉得有用,请点个关注、给个赞吧,也算对我来说是个宽慰,毕竟也得掉不少头发,嘿嘿嘿
系列文章传送条
详细SpringBoot教程之入门(一)
详细SpringBoot教程之入门(二)
详细SpringBoot教程之配置文件(一)
详细SpringBoot教程之配置文件(二)
详细SpringBoot教程之日志框架
详细SpringBoot教程之Web开发(一)
详细SpringBoot教程之Web开发(二)
详细SpringBoot教程之Web开发(三)
详细SpringBoot教程之数据访问
详细SpringBoot教程之启动配置原理
详细SpringBoot教程之缓存开发
开发前准备
我们接下来准备使用SpringBoot开发一个restful的应用,首先我们通过Idea创建向导帮我们创建SpringBoot应用,勾选我们需要的模块,这里我们还是只勾选一个web场景,后面需要啥再添加。
前面说过,我们创建的项目中,SpringBoot将会帮我们自动配置好web开发场景中需要的相关配置,只需要在配置文件中指定少量配置就可以运行起来了,我们只需要注意在业务代码中就可以了。
当然,我们如果想要搞清楚某个场景中,SpringBoot帮我们配置了什么依赖,这个时候就需要我们了解相关的自动配置原理了,前面的博文有相关的讲解,我这里就不深入讲解了。
SpringBoot对静态资源的映射配置规则
创建好了项目之后,我们先来讲解一下SpringBoot对于静态资源的相关配置规则,因为我们现在暂时来开发一个前后端没有分离的很彻底的应用(如果前后端分离的很彻底,我们只用SpringBoot来做后端接口),所以必须要知道怎么使用SpringBoot的静态资源。
使用webjars
首先SpringBoot的有个叫webjars的东西,所有通过pom.xml引入的静态资源,都在/webjars/**下(这个在静态资源的自动配置类中可以找到),也就是说SpringBoot会自动去classpath:/META-INF/resources/webjars/找资源,webjars以jar包的方式引入静态资源(也就是说,我们都可以通过http://localhost:8080/webjars/xx访问对应的静态资源)
怎么通过pom.xml引入静态资源呢?我们可以去webjars的资源库中找,需要什么静态资源的jar基本都可以在这里找到(指的是框架依赖),里面长这样子。
各种静态资源jar都可以通过pom.xml依赖的方式引入 ,我们引入JQuery看看,引入的JQuery的依赖包下边,可以看到webjars内容长这样
现在我们引入了jQuery的静态资源,我们启动项目,来试一下能不能通过对应的路径访问,我这里使用的路径是http://localhost:8080/webjars/jquery/3.4.1/jquery.js
所以发现了没有,我通过SpringBoot来开发相关的静态资源,非常方便,我们只要引入对应的webjars就可以了,SpringBoot不需要我们进行过多的配置,有自己默认配置的规则。
使用resources
当然如果我们想要用自己的静态资源,不想使用webjars的东西,怎么做呢?这个时候就需要另外一个映射规则就是/**(也就是说,我们通过http://localhost:8080/xxx.js访问静态资源,如果我们没有配置相关,就会默认去下面这几个文件夹中找)用来配置映射,即可访问当前项目下的任何资源
- classpath:/META-INF/resources/
- classpath:/resources/
- classpath:/static/
- classpath:/public/
即通过“/**”访问的静态资源,SpringBoot会去上面这几个找资源,这些也就是SpringBoot默认的静态资源文件夹
这里我们可以随便将jquery.js放置在三个文件夹中的一个,然后通过http://localhost:8080/jquery.js可以访问到。
配置欢迎页映射
静态资源文件夹下的所有index.html页面,会被/映射;
也就是说我们直接访问http://localhost:8080/就直接访问静态资源文件夹中的index.html,相当于我们以前SpringMVC下面的index.jsp,比如我们现在随机选public的静态资源文件夹下创建index.html
同样的所有的/favicon.ico默认都是在静态资源下找,当然,如果我们不想要使用SpringBoot默认的静态资源文件夹,我们还可以定义静态资源的映射,如下
要注意了,如果自己定义了静态资源映射之后,默认的文件夹就都不生效了,相当于原来的那些访问方式都不生效了。
模板引擎
JSP、Velocity、Freemarker、Thymeleaf等等,模板引擎的本质思想是一样的,只是语法不大一致而已。比如说以freemarker为例,如下图。
SpringBoot推荐的Thymeleaf,不用JSP,因为Thymeleaf语法更加简单,功能更加强大,如何导入呢,其实对于SpringBoot不就是一个引入依赖的事情嘛,很简单,依赖包如下
1 | <dependency> |
这里引入的是SpringBoot默认的Thymeleaf依赖版本,如果我们要切换版本怎么切换,如下,加上对应版本号就可以了
1 | <properties> |
使用Thymeleaf
在使用Thymeleaf语法之前,我们先来实验一下,我们只要把HTML页面放在templates目录下就可以了,Thymeleaf就会自动渲染
正式使用
我们先编写一个控制器,用来跳转渲染,控制器中,加入我们待会儿要在HTML通过Thymeleaf获取的一个变量值,如下
在HTML编写代码之前,现在HTML的头标签中导入thymeleaf的名称空间,这样我们在使用Thymeleaf语法的时候,Idea就会提示相关代码。
编写好之后启动项目,我们通过访问http://localhost:8080/success来访问success.html页面,访问之后结果如下
SpringBoot自动配置MVC
SpringBoot集成了SpringMVC,所以里面自然自动配置了SpringMVC运行的相关基本依赖,那么SpringBoot引入了SpringMVC那些依赖呢?这里我大致进行一下介绍。Spring Boot为Spring MVC提供了自动配置,可与大多数应用程序完美配合。其中自动配置在Spring的默认值之上添加了以下功能:
- 包含ContentNegotiatingViewResolver和BeanNameViewResolver
- 支持服务静态资源,包括对WebJars的支持
- 自动注册Converter,GenericConverter和Formatter的beans。
- 支持HttpMessageConverters。
- 自动注册MessageCodesResolver
- 静态index.html支持
- 定制Favicon支持
- 自动使用ConfigurableWebBindingInitializerbean
如果要保留这些Spring Boot MVC定制并进行更多的MVC定制(拦截器,格式化程序,视图控制器和其他功能),则可以添加自己@Configuration的type类,WebMvcConfigurer但不添加 @EnableWebMvc(因为@EnableWebMvc会关闭Spring Boot MVC的默认配置,而转向需要读取我们自己添加的配置,稍后会讲)。
如果你想提供的定制情况RequestMappingHandlerMapping,RequestMappingHandlerAdapter或者ExceptionHandlerExceptionResolver,仍然保持弹簧引导MVC自定义,你可以声明类型的beans WebMvcRegistrations,并用它来提供这些组件的定制实例。
如果你想对Spring MVC中的完全控制,你可以添加自己的@Configuration注解为@EnableWebMvc,或者添加自己的@Configuration-annotated DelegatingWebMvcConfiguration中的Javadoc中所述@EnableWebMvc。
后面我们会讨论怎么对SpringMVC进行完全控制。
拓展SpringMVC
看到如下配置是不是很熟悉,我们以前在SpringMVC中是这样编写视图控制器和拦截器的,那么我们怎么在SpringBoot中使用呢?
在前面见过,为了方便编写项目的统一配置,和前面见过配置的的地方一样,我们统一把项目的配置放在config包中管理,然后我们在config包下创建一个MyMvcConfig的类,实现WebMvcConfigurer接口,就可以对SpringBoot中关于SpringMVC相关配置进行扩展了。
WebMvcConfigurer可以用来扩展SpringMVC的功能,需要什么在里面实现什么方法就可以了,比如我们扩展一下视图转换器,如下
这样实现了既保留了使用原有的配置,又能使用我们自己的方式扩展配置
@EnableWebMvc
上面我们可以自己编写类扩展SpringMVC的相关配置,如果我们再在配置类上加上@EnableWebMvc注解,是啥意思呢,也就是说我们将全面接管SpringMVC在SpringBoot中的配置,在SpringBoot中有关SpringMVC所有的默认配置都会失效,需要我们自行配置,比如上面我们默认webjars进行访问静态资源等等,都会失效
也就是说原本我们不使用@EnableWebMvc,SpringBoot会自动配置SpringMVC的默认依赖,如果我们使用@EnableWebMvc,则@EnableWebMvc就会将WebMVCConfigurationSupport组件导入进来,而导入的WebMVCConfigurationSupport组件里面只有SpringMVC一些最基本的功能。
如何修改SpringBoot的默认配置
SpringBoot在自动配置很多组件的时候,先看容器中有没有哦用户自己配置的(@Bean、@Component)如果有就用用户配置的,如果没有就自动配置,如果有些组件可以有多个(如ViewResolver)将用户配置和自己默认的组合起来
在SpringBoot中会有非常多的xxxConfigurer帮助我们进行SpringMVC的拓展配置。
写一篇
这篇博文我们在进行正式开发前的一些准备,下一篇我们来引入静态资源文件编写相关代码。