突破SpringBoot概念

前言

最近学习用SpringBoot开发应用,学习过程中,有些概念和术语会造成阻碍,看了不少相关文章,但大都是教如何做,很少有说为什么的,所以结合自身实践,写一篇总结,希望对要入门SpringBoot的朋友有所帮助

另外

  • Java是工业标准化认证的变成语言之一(还有C、C++),SpringBoot是基于Java的,是现在流行的企业级Web应用开发框架,是程序员必会的技能之一
  • SpringBoot比较年轻,在国内正在被快速应用,有巨大的应用市场,但由于年轻,文档相对比较杂乱,没有合适的切合入门者的文章,大都是如何操作一类的,对于从其他语言框架切换过来的同学有一定的障碍
  • SpingBoot是可以被快速学会的,需要一个简单易懂的引导,特别是对从Nodejs 和 Django等Web开发转过来的朋友

正文

什么是Web应用

这是个比较傻的问题,相信你看了会觉得好笑,因为互联网的浪潮都过去了好几拨了,确实是,但要快速学习一个新技术,基础知识很重要,说白了没有什么新技术,而是在原来的基本的技术上不断做的扩展和延申。
简单说Web应用是基于互联网技术,将用户的请求通过Web服务器的加工,再给用户反馈请求结果的应用程序,如果没有互联网,这样的应用和三十年前的单机应用没什么区别,用户在屏幕上点击按钮,然后得到点击后的结果。但有了互联网,事情就不一样了,一个Web应用会分为客户端、服务器端,即前端和后端,中间通过Http协议通信,将两者连接起来,就这样的分离和改变,造就了繁荣的互联网时代。

Web应用的核心特征
  1. 结构
    Web应用和传统的应用的区别在于,将应用分为前后两个端,利用TCP/IP协议,通过Http/s,WebSocket技术实现前后端通信的
  2. URL
    URL是Web服务向外界提供的接口,Web服务通过解析URL做出客户端期待的相应,来完成客户的请求
  3. 路由
    URL类似于一种文件目录结构一样的东西(其实就是从文件系统衍生而来的),有层次,有路径,为了处理方便,可以将其看成一个地址,从而有了路由的概念,例如路径 /api和/static是不同的路由,可以交给不同的后台模块来处理
  4. 请求
    有客户端(前端或者用户代理)向后端(Web服务器)发送的请求,客户端一般是浏览器,发送给后端的Http请求,可以看成一段有格式的文本(在http2.0中这种理解恰当)
  5. 响应
    后端收到客户端的请求后,根据请求URL,内容作出恰当的处理,并将请求结果作为响应返回给客户端
SpringBoot
  1. SpringBoot可以说是Spring的增强版,让开发更简单,摆脱了Spring繁杂的配置工作,结合Maven几乎可以实现为零配置开发Web应用程序
  2. 什么是Maven,现在的软件几乎没有从头开始开发的,都需要用借助一些已经开发好的库,框架,每个编程语言周围,面向不同的开发领域,都有大量的库,来解决各种问题,从而方便开发,比如Nodejs的npm,比如Python的pip,都是管理各自语言的库的。有了大量的库,虽然方便了,但是使用起来很麻烦,就比如不同的库之间有依赖,要用A库,需要加入他的依赖库B,而B有分了好多版本,好不容易配置好了,A的版本升级了,就不得不修改B,还得看看版本对不对,繁琐而复杂,特容易出错。Maven就是为这事而来的,首先他集中了各种优秀的库,然后开放了接口,方便其他优秀的库加入进来,通过组别ID(groupID)和组件ID(artifactID)来标识,还可以指定版本号。留给开发者的事情只剩下通过配置文件,将需要用的库A加进入就好了,Maven自动帮你加载A依赖的B,当A的版本要变,改下配置,Maven自动帮你找到合适的B替换掉,有了Maven,生活多美好
  3. 既然有Maven这个强大的存在,要SpringBoot干啥,这是个好问题,因为他们负责的方面不同,Maven负责库的管理,SpringBoot复杂Web工程的组建。这样说有点抽象,要说明白,需要了解Java体系下,还是不展开了,换种说法,Java之所以无所不能,并不是语言本身有多厉害,而是利用了很多概念,约定,和设计模式,比如如何让框架又厉害,又灵活呢,厉害在于少写代码,就能得到强悍的功能,灵活在于,适应不同的业务逻辑,或者运行环境,本来这是个矛盾的,但有了注入这个概念问题就解决了,结合面向对象语言的特性,在外部实现一个符合具体业务的类,然后注入到框架中就好了,这样描述还是很抽象,不过不用担心,有这个概念再看具体的例子就清楚了。回到正题,SpringBoot是为了用Java方便的开发应用而产生的开发框架,主要帮助开发这做业务配置用的。其实这里还有个概念是Spring,更是起到了这个作用,SpringBoot让Spring用起来更方便
  4. SpringBoot解决了Spring中复杂繁琐的配置问题,真正让Spring可以做到零配置开发应用,所以可以理解成Spring的一个增强版
如何开始

了解了Web应用的基本概念,那么要理解SpringBoot就可以从 路由,过滤,业务处理,请求响应几个方面来了解

  1. 环境搭建,有很多文章有详细的描述,不必详述了,可以参考这里Intellij IDEA 搭建Spring Boot项目
  2. 目录结构,秉承着预定优于功能的思想,SpringBoot的工程中,要用约定的方式来理解,主要是为了沟通方便
    • 工程目录
      就是整个项目的总目录,比如project,可以根据自己的喜好来定
      其中包括 源码目录 src 和 Maven配置文件 pom.xml
    • 源码目录 src
      就是项目的代码都在这里,其中分为main 和 test, main是用来管理业务代码的,test是用来些测试代码的
    • 代码主目录 main
      就是业务代码存放地,应为是Web项目,其中会分为 java和resources 两个目标,java是用来存放后端代码的,resources是用来存放前端代码和前端模板的
    • 后端代码目标 java
      如果之前做过java项目,就很容易理解,Java中有个包的概念,可以理解成代码的命名空间,或者干脆理解成目录,java的代码就是通过java目录存放在不同的命名空间下(包中)的,其中有个 Application.java文件,这是项目的总入口,项目启动时会从这个文件中的main方法开始,主要的作用是启动一个项目的生命周期,一般不需要修改,这个文件都是自动生成的
      剩下的 就是根据自己的命名空间来写代码了
  3. 写代码,了解了基本的目录结构后,看看代码怎么写
    写代码前可以根据web应用程序的基本要素来思考

    1. 如何接收请求
      在Nodejs 和 Django中 有个路由的概念,Spring中称之为 Controller,这个叫法和 MVC设计模式有关,即其中C,控制器,请求是由控制器来处理。
      所以创建可以java类,在IDE中会自动生成一个java代码文件,并且生成基本代码,如何让Spring觉得他是个控制器能,一般会想到有配置文件,java有更好玩的做法,只需要在类的方法上面加一个注解 @RequestMapping 就可以了,当然要指定处理那个路由,例如这个路由是处理首页的,这样写 @RequestMapping(“/“) 就好了,那么当客户端请求首页时,被标记了的方法就会被执行,是不是很奇妙,当然这是Spring框架在后面做了大量的工作产生的结果。
    2. 如何响应请求
      上面方式指定了接收请求方法,那么这个方法也需要处理请求的响应,这里提现了Spring框架的强悍功能,相应函数的参数很灵活,可以是原始的请求(Request)对象,可以是请求Url中的参数等等,可以根据自己的需求来确定。根据请求做出相应,比如需要从数据库读取一些数据,这里就可以调用数据库处理类的方法得到数据,最后返回一个字符串,表示用那个模板来相应这个请求,模板文件被写在 src/main/resources/template 文件加下,这里只需要返回 文件夹下模板文件的名称(不包括扩展名)就可以了

      上面的两步做完就可以完成一个Web项目的基本功能能了,但和可用的应用还差很多

  4. 过滤器 客户端请求到来时,如果需要加入更多的判断,就需要将请求层层处理,最后再到请求处理的方法上,在Nodejs中可以通过调用next方法将请求一层层转交下去,知道能处理这个请求的人来处理,所以可以说Nodejs中请求处理方法的地位是对等的,没有地位之分。Spring中能完成类似的功能,不过对请求的过滤和最终处理做了明确的规定,最终处理的方法叫Controller,过滤器叫Filter,只要写个类继承Filter就能做成一个过滤器,需要用到Spring框架中的配置
  5. Spring配置 Spring配置是初学者容易搞混的地方,一般的系统配置,会考虑配置文件格式和位置,比如在config目录下的都是配置文件,系统启动中从这些固定的地方获取配置,但Spring不太一样,她不在乎位置,只需要指定哪些类是配置类就好了,然后在这个类中继承标准的配置类,或者返回一个特定类型的配置类就可以了,这是因为Java生态中有很强悍的类加载器,通过注解的标记,类加载器就可以按照约定将特定的类加载到特定的位置,所以对于配置来说和文件格式、位置没太大关系,但是 为了开发和维护方便,最好将配置类集中放置。使用注解方式的配置,可以利用工程模式的方式将自己写的过滤器插入到系统中。
实践

实践是学习软件技能的最好方法,我假设了一个我的书单的项目,其中包括注册,登录,书单维护和共享等功能,重点在于SpringBoot的实践,前端没有使用任何框架,后续在前端实践过程中会进一步完善。
项目地址:MyBooks

结语

SpringBoot是Java企业开发领域的一股清流,让Java从笨重的EJB中走向了轻便,使用SpringBoot可以轻松开发出任何自己想要的应用,借助与强大的社区支持,和多年来的积累,是开发应用不可忽视的选项。在了解了SpingBoot的基本情况之后,这里列举出一些指定学习参考的地方,希望对你的SpringBoot学习之旅有所指引和帮助。由于计算机领域知识渊博,本人才疏学浅,欢迎批评指正。