科百科
当前位置: 首页 范文大全

springboot启动项目需要tomcat吗(SpringBoot到底是什么如何理解parent)

时间:2023-08-04 作者: 小编 阅读量: 3 栏目名: 范文大全

文章目录
  • 一、前言
  • 二、百度百科
  • 三、简化开发
  • 四、parent介绍
  • 五、starter介绍
  • 六、starter与parent的区别
  • 七、引导类介绍
  • 八、内嵌Tomcat
  • 1、Tomcat定义位置2、Tomcat运行原理3、更换内嵌Tomcat
  • 九、小结
一、前言

前面已经讲解了快速上手SpringBoot入门程序制作的四种方式,相信各位小伙伴们已经可以熟练的使用这些方式来创建一个简单的web程序了,但是仅仅知道这些还是不够的。接下来,带大家一起了解parent、starter、引导类、以及内嵌Tomcat相关的知识!

二、百度百科

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

三、简化开发

从百度百科中可以看出,其目的是用来简化Spring!那么到底简化在什么地方呢?

让我们想想在学习SSM时,做过原始SpringMVC程序的小伙伴应该知道,写SpringMVC程序,最基础的spring-web和spring-webmvc这两个坐标是必须的,这些还不包含我们使用的json啊等等坐标,现在呢?一个坐标搞定!

以前写配置类或者配置文件,然后用什么东西就要自己写加载bean这些东西,现在呢?什么都没写,照样能用。

有以下优点:

  • 简化依赖配置
  • 简化常用工程相关配置
  • 内置服务器,比如Tomcat

别着急,让我们慢慢来探讨探讨其中的奥秘~

四、parent介绍

打开创建好的springboot程序,可以看见pom.xml文件中的<parent> </parent>

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.4</version><relativePath/></parent>

这里的<version>2.6.4<version>就是自己使用的springboot版本,打开后可以发现其中又继承了一个坐标,引入了很多依赖

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.6.4</version></parent>

再次点击打开,就可以找到其中的奥秘了。

从下图我们可以发现各式各样的依赖版本号属性,下面列出依赖版本属性的局部,可以看的出来,定义了若干个技术的依赖版本号

再看看下图,各式各样的的依赖坐标信息,可以看出依赖坐标定义中没有具体的依赖版本号,而是引用了第一组信息中定义的依赖版本属性值

注意:上面的依赖坐标定义是出现在标签中的,其实是对引用坐标的依赖管理,并不是实际使用的坐标。因此当我们的项目中继承了这组parent信息后,在不使用对应坐标的情况下,前面的这组定义是不会具体导入某个依赖的

最后来看看使用不同的springboot版本时,其对应的pom依赖文件有什么不同。我这里对比的是springboot2.5.6版本和springboot2.6.4

从图中可以清楚的看到,当我们使用不同的springboot版本时,他们的依赖版本就会不同。这也确保了,在使用springboot时,我们可以在某种程度上避免版本冲突的复杂问题,方便了程序员们的开发!

五、starter介绍

SpringBoot关注到开发者在实际开发时,对于依赖坐标的使用往往都有一些固定的组合方式,比如使用spring-webmvc就一定要使用spring-web。每次都要固定搭配着写,非常繁琐,而且格式固定,没有任何技术含量。

SpringBoot一看这种情况,把所有的技术使用的固定搭配格式都给开发出来,以后我们使用某个技术,就不用一次写一堆依赖了,直接用springboot做好的这个东西就好了,对于这样的固定技术搭配,SpringBoot给它起了个名字叫做starter。

​starter定义了使用某种技术时对于依赖的固定搭配格式,也是一种最佳解决方案,使用starter可以帮助开发者减少依赖配置

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

比如我想开发web应用,就需要引入上面的web对应的starter依赖,并没有写SpringMVC的坐标,点击spring-boot-starter-web

我们会发现在spring-boot-starter-web中又定义了若干个具体依赖的坐标

通过上图我们可以细心的发现叫做spring-boot-starter-json的名字中也有starter,打开看看里面有什么?

我们可以发现,这个starter中又包含了若干个坐标,其实就是使用SpringMVC开发通常都会使用到Json,使用json又离不开这里面定义的这些坐标,看来还真是方便,SpringBoot把我们开发中使用的东西能用到的都给提前做好了。仔细看完会发现,里面有一些我们没用过的。的确会出现这种过量导入的可能性,不过没关系,可以通过maven中的排除依赖剔除掉一部分。不过你不管它也没事,大不了就是过量导入呗。

​到这里基本上得到了一个信息,使用starter可以帮开发者快速配置依赖关系

六、starter与parent的区别

朦朦胧胧中感觉starter与parent好像都是帮助我们简化配置的,但是功能又不一样:

​starter是一个坐标中定了若干个坐标,以前写多个的,现在写一个,是用来减少依赖配置的书写量的

​parent是定义了几百个依赖版本号,以前写依赖需要自己手工控制版本,现在由SpringBoot统一管理,这样就不存在版本冲突了,是用来减少依赖冲突的

温馨提示

​ SpringBoot官方给出了好多个starter的定义,方便我们使用,而且名称都是如下格式

命名规则:spring-boot-starter-技术名称

七、引导类介绍

配置说完了,我们发现SpringBoot确实帮助我们减少了很多配置工作,下面说一下程序是如何运行的。目前程序运行的入口就是SpringBoot工程创建时自带的那个类了,带有main方法的那个类,运行这个类就可以启动SpringBoot工程的运行,我的是这个:

@SpringBootApplicationpublic class Springboot0101Application {public static void main(String[] args) {SpringApplication.run(Springboot0101Application.class, args);}

写代码测试一下,先创建一个User类,把它放在容器中

@Componentpublic class User {}

然后再写一个BookController类,也把它放在容器中

@RestController@RequestMapping("/books")public class BookController {@GetMapping("/getBooks")public String getBooks() {System.out.println("springboot程序正在运行呢~");return "Hello,SpringBoot is running";}}

看看我对应类的目录结构:

最后写代码测试一下:

@SpringBootApplicationpublic class Springboot0101Application {public static void main(String[] args) {ConfigurableApplicationContext applicationContext= SpringApplication.run(Springboot0101Application.class, args);BookController bookBean = applicationContext.getBean(BookController.class);System.out.println("The message of bookBean : "bookBean);User userBean = applicationContext.getBean(User.class);System.out.println("The message of userBean : "userBean);}}

运行结果:

看到结果,小伙伴们不难猜想了——SpringBoot程序启动是创建了一个Spring容器对象吧?答案就是如此!

Springboot0101Application这个类在SpringBoot程序中是所有功能的入口,称这个类为引导类。

​作为一个引导类最典型的特征就是当前类上方声明了一个注解@SpringBootApplication

点击进入@SpringBootApplication,我们可以看到:

这里面有我们之前学习SSM时用到的包扫描注解,再点击进入@SpringBootConfiguration内:

我们可以发现,它最终使用了@Configuration注解,所以,归根到底,我们使用的引用类,也是一个配置类。

八、内嵌Tomcat1、Tomcat定义位置

程序现在已经运行了,通过引导类的main方法运行了起来。但是运行java程序不应该是执行完就结束了吗?但是我们现在明显是启动了一个web服务器啊,不然网页怎么能正常访问呢?这个服务器是在哪里写的呢?

认真想一想,它就在我们引入的spring-boot-starter-web场景starter中,我们打开它来看一看:

这里面有一个核心的坐标,tomcat-embed-core,叫做tomcat内嵌核心。就是这个东西把tomcat功能引入到了我们的程序中。

2、Tomcat运行原理

再来说第二个问题,这个服务器是怎么运行的?

Tomcat服务器是一款软件,而且是一款使用java语言开发的软件,既然是使用java语言开发的,运行的时候肯定符合java程序运行的原理,java程序运行靠的是什么?对象呀,一切皆对象,万物皆对象。那tomcat运行起来呢?也是对象。

如果是对象,那Spring容器是用来管理对象的,这个对象能不能交给Spring容器管理呢?答案是可以的!tomcat服务器运行其实是以对象的形式在Spring容器中运行的,怪不得我们没有安装这个tomcat,而且还能用。闹了白天这东西最后是以一个对象的形式存在,保存在Spring容器中悄悄运行的。具体运行的是什么呢?其实就是上前面提到的那个tomcat内嵌核心

具体内嵌核心依赖如下:

<dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-core</artifactId><version>9.0.58</version><scope>compile</scope><exclusions><exclusion><artifactId>tomcat-annotations-api</artifactId><groupId>org.apache.tomcat</groupId></exclusion></exclusions></dependency>

3、更换内嵌Tomcat

那既然是个对象,如果把这个对象从Spring容器中去掉是不是就没有web服务器的功能呢?当然可以,通过依赖排除可以去掉这个web服务器功能。根据SpringBoot的工作机制,用什么技术,加入什么依赖就行了。我选择的是SpringBoot提供的内置服务器jetty

更换代码如下:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId></dependency>

让我们运行一下看看是什么样的结果:

输出结果是没有问题的,但是服务器就不是默认的Tomcat了,而是我选择的jetty服务器

九、小结SpringBoot极大的简化了开发的步骤,我们要熟练使用。博主正在积极准备SpringBoot工程的具体细节相关的博客文章,喜欢的话,可以给博主一个赞哦~~​

原文链接:https://blog.csdn.net/weixin_59654772/article/details/123202832

    推荐阅读
  • 垃圾分类我能行知识竞赛活动(特别的爱送给特别的你)

    同学们争先恐后,积极参与,踊跃发言。家长们也纷纷表示,通过今天的学习,大家知道了垃圾分类的重要性、必要性,今后将从自身做起,从点滴做起,逐步养成良好的垃圾分类习惯。此次活动旨在培养学生树立“垃圾分类要从小做起”的理念,让孩子们带头宣传垃圾分类知识,从而带动家庭、带动家长、推动社会,有助于实现“教育一个孩子、带动一个家庭、文明整个社会”的良好效果。

  • 农村现在能做什么生意,农村5万以内创业项目

    3、三是小型农机,比如播种机、脱粒机、铡草机等,一般可采用滚动发展的方式,逐步进行添置。

  • 怡丽丝尔专柜推荐(ELIXIR怡丽丝尔宁波阪急新店盛大开业)

    此次,怡丽丝尔以品牌全新形象店坐落宁波阪急这一现代时尚庭园,邀请怡蜜一起体验「水玉光」的独特魅力。紧致的肌肤状态是女性自信向前的后盾,以品牌代言人万茜为代表的每一位积极生活的女性,都是怡丽丝尔想要呵护的存在。即日起至5月16日,注册品牌会员并邀请好友,即可获得怡丽丝尔宁波阪急全新形象店的产品体验兑换券和面部护理体验券。

  • 新时代青年的责任与使命是什么(当代青年如何在新时代担当责任与使命)

    与此同时,要注重修炼品德。自身的提高是为了成为建设国家的有用之材,而这一价值的最终体现则要通过实践来实现,广大青年要积极投身于新时代中国特色社会主义的伟大实践,努力在新时代改革开放事业的奋斗中成为可堪大用、能担重任的栋梁之材。

  • 和平精英解除防沉迷怎么弄(和平精英解除防沉迷怎么弄)

    对此好多小伙伴们在问这个实名认证能不能进行修改呢?和平精英实名认证怎么修改大家先打开腾讯qq,然后进入到实名认证中心,进去之后,再根据说明来填写相关的姓名、身份证号码、联络地址等信息,再点击提交信息。

  • 二价宫颈癌疫苗适用人群(二价疫苗可预防70)

    下面内容希望能帮助到你,我们来一起看看吧!二价宫颈癌疫苗适用人群今天上午,国家卫健委在发布会上介绍,我国已有5款HPV疫苗获批注册。目前我国可应用的HPV疫苗包括二价、四价和九价,使用的年龄范围为9到45岁的女性,引起宫颈癌HPV高危型别最主要的是16和18亚型,所以二价疫苗就可以预防70%以上的宫颈癌。HPV疫苗越早接种效果越好,在目前HPV疫苗供应紧张的情况下,不必要因等待更高价型的疫苗而错过最佳接种时间。

  • 刚正不阿一般形容哪些人(什么样的人称得上刚正)

    刚正不阿是形容那些在工作上不畏权势、干政不阿、严守法度、不循私情的官员或者执法人员历史上最有名称得上是“刚正不阿”的官员是“包青天”,下面我们就来聊聊关于刚正不阿一般形容哪些人?历史上最有名称得上是“刚正不阿”的官员是“包青天”。刚正不阿是一个汉语成语,读音是gāngzhèngbùē。意思是刚强正直,不阿谀奉迎,无偏私。出自明·余继登《典故纪闻》卷十四:“有正大不阿,不行私谒者,便以为不贤”。

  • 女性常吃杏仁的好处(吃杏仁的好处与坏处)

    杏仁还有美容功效,能促进皮肤微循环,使皮肤红润光泽。吃杏仁好处3、吃杏仁有利于补充蛋白质和钙质。另外,杏仁的细胞壁还会阻碍脂肪酶接触脂肪,从而减少对脂肪的消化吸收。吃杏仁好处5、吃杏仁有益心脏健康。吃杏仁的坏处苦杏仁有毒,是众人皆知的。过量食用杏仁可引起氢氰酸中毒,严重时可抑制延髓呼吸中枢而致死。一旦发现杏仁中毒要及时去医院救治。杏仁含有大量的脂肪酸,对于婴儿和大便溏泻的人则可导致或加重腹泻。

  • 怎么让手机投屏到电脑不需要软件(不用安装第三方软件)

    为此我做一个简单的教程,不用安装第三方软件,就用Windows10自带的无线显示功能和安卓手机的自带无线显示功能来实现。前提条件:1.电脑是Windows10系统。具体步骤如下:1.点Windows右下角的通知区图标。第3.手机端开启无线显示,并且连接到电脑。另外投屏也可以象普通程序一下最小化,这样还可以继续显示正常的桌面。

  • 三国中孟获是哪个族(蛮王孟获的地盘究竟是今天的什么地方)

    诸葛亮的军队到达益州郡时,叛军内部发生分裂,雍闿被杀,当地少数民族首领孟获代替雍闿为头领,继续与蜀军对抗。"进入益州后,诸葛亮获悉,孟获虽然作战勇敢,却缺少谋略,估计打败他不成问题。诸葛亮的军队纪律严明,禁止烧杀抢掠,注意搞好同当地少数民族的关系。这样,诸葛亮妥善地解决了蜀汉政权和南中地区的关系。南中平定后,蜀汉后顾之忧解除。荆州丧失后,两路出兵北伐的条件已不具备,但诸葛亮并没放弃北伐的计划。