最近在学springboot,本来的顺序应该是从spring开始,奈何上手困难,因此从springboot开始先了解,打算再翻过去学习spring。
跟着慕课的一个小项目练习,我自己用到的版本是Idea2020.01.07,电脑win10,maven是idea自带,jdk11。
整个项目应该是:
下面开始记录过程:
选择 maven-archetype-quickstark,这种项目是以jar包方式提供输出,构建项目最快速。(archetype意思是原型)
以前没有 springboot 的时候,可能更多的会选择 maven-archetype-webapp,创建的项目是以 war 包方式部署在 tomcat 等容器里的。
举个 apache 公司的 tomcat 项目例子:这个项目的 groupId 是 org.apache ,它的域是org(因为tomcat是非营利项目),公司名称是 apache,artigactId 是 tomcat。
这个过程中会下载一些东西来创建这个工程,可以看到过程,基本上就是很多jar包。
虽然下面仍然在下插件,但是已经可以看到,构建成功了。
这里提一句:
Maven这个工具好就好在,以前你要做项目,一个一个的依赖jar包,要去网上搜,要匹配版本不然会报错,下好了你得一个一个引入,放到对应的位置,而现在,就是这一键操作。(具体我还没有单独学习过,这是快速开始的简单理解,感觉类似于python的pip命令?)
那么可以看到,出现了一个Pom.xml 文件,xml文件就是一系列的配置信息,pom是project object management的缩写,就是项目对象管理。
右下角显示还在下插件,等一等,速度很慢,这应该是用国外源的通病,似乎可以在哪里设置源换成国内的镜像,不过现在我还是乖乖等吧。
结束之后,自动配置已经好了,pom.xml文件里面显示了一些信息。
接着,我们看构建好的目录:
也就是说,我们指定这个java路径下面装的是我们项目的源代码。
然后将下面的 test 右键标记为,测试源 根。(英文里面是 test sources root,用了汉化以后还看起来怪怪的)
接下来我们还需要一个资源文件,在main目录下面右键新建一个路径:
然后我们可以看到,在源码下面,有一个 App.java 文件,打开看看:
是一个helloworld。我们可以执行一下。
执行成功。
以前,我们构建一个Web项目的做法(我是在eclipse里),要new出一个web项目,要配置xml,一步一步导包,集成tomcat,然后写一个导航index,写一个servlet(?),然后开始运行,在浏览器访问默认的端口,能够显示一个helloworld。
那么现在利用 springboot ,我们就不用这样了,因为一切操作都改进成为了在 xml 里面的配置,也就是给他命令,他帮你执行,至于这些命令的指导,我们需要去 springboot 的官方文档查看。
https://www.springcloud.cc/spring-boot.html
在这里,目录11可以看到,正好是指示了我们使用Maven进行构建的方法,如下图:
可以在下面这张图对比看看,配置的标签应该放的对应位置。
我们把 parent 标签里的内容都来复制过来。
xml 里面有各种标签。
spring-boot-starter 翻译过来是 spring-boot 场景启动器
spring-boot-starter 后面跟的单词就是场景
比如说后面跟web,就是导入web场景的所有依赖。
这里跟的是parent。
parent顾名思义就是父标签,理解成可以对子项目的公共依赖部分进行配置;或者说是 spring-boot-starter-parent(控制版本信息),以后我们导入依赖默认就不需要写版本。
我们把这段 parent 标签粘贴进去,位置就在version标签之下就可以。
然后还需要依赖的标签,网页的文档继续向下看,如图所示:
文档也给出了解释,上面我们也说了。
spring-boot-starter-web就是web的场景,自动帮我们引入了web模块开发需要的相关jar包。
这段复制粘贴的位置就是在 dependencies 标签里面的子标签,可以看到构建的时候已经有一个dependency了,就是 Junit 的引入,我们粘贴的位置就和这个子标签平行。
然后在两个需要的依赖都添加之后,刷新一下。
此时可以看到右下角在显示:
也就是说,xml文件读取了,他开始帮我们加载需要的东西,会有很多jar包,也会比较慢,下载完能看到复制进去的标签部分字体颜色从红变蓝了。
结束之后,查看左边我们的项目目录,可以看到 external library 里面,外部的这些资源:
除了本身的jdk(我是11)之外多出来很多对应的包。
这就是我们以前需要手动做的内容,现在一键都由 springboot 帮我们 boot 出来了。
现在我们可以再来看看我们的 pom.xml 这个核心的配置文件:
从上到下的标签基本是:
刚才说过的父pom,发现了吗,字面来看,我们的项目在上面配置了有对应的三个标签,这里配置的parent也有三个标签,也就是把这个项目作为了我们的父pom,可以理解为我们指定用了springboot本来的一个模板。
依赖,指定了两个,一个是用上面的springbootstarterparent的一个web项目,有了这个标签,会把这个对应的jar包下载下来;一个是用了junit这个第三方
此时我们再次回到App.java里来。
@EnableAutoConfiguration
@EnableAutoConfiguration 注解的作用,见名知意,就是开启自动配置。
(具体这个东西的实现原理,和spring也有关,似乎也是面试的考点。)
SpringApplication.run(App.class,args);
此时我们再运行:
可以看到,在输出helloworld之后,系统并没有停止运行,而是继续在进行一系列操作
这些工作里就包括,他帮我们启动了一个tomcat容器,而且默认在 8080 端口 listen 了。
这个时候我们可以打开浏览器,输入localhost:8080去查看:
虽然没有内容,但是说明我们已经有一个工程在8080端口了。
进阶一步:
再给工程增添一些色彩,SpringMVC是用来解决web的控制层问题,(最早项目肯定简单的 javaweb 是多是用JSP 、Servlet + JDBC )
但是严格按照MVC的分层模式开发,就要解决控制层的问题,而 springboot 也可以直接帮我们搞定 controller 的问题。
在第一个EnableAutoConfiguration的注解下面再加上一行:
@RestController
接着,我们就简单定义一个方法,在输出一个helloword:
@RequestMapping("/")
public String hello(){
return "hello world";
}
这个注解和 springmvc 一致,表示用户访问根目录的时候,输出一个helloworld,到web的控制台。
这个时候重新运行程序,再打开8080端口,可以看到:
到这里,一个web应用就已经搭建完成 。
前端没写,数据库也还没连,但是已经能看了,下一篇是:连接Mybatis。