声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。java
老一辈的程序员通常都经历了Web程序架构模式的演进,从最开始的在jsp或者jsp+Servlet上作开发,到后来的mvc、三层等。而如今有挺多人学完web,可能都没怎么使用过jsp或jsp+Servlet开发过项目,就直接学习使用Spring、Spring Boot或者SpringMVC等框架进行开发。若是没有经历这样一个逐步演进的过程,就很难理解框架带给了咱们什么样的好处,并且开发过程当中遇到问题也难以解决,更别说去学习这些框架中的源码了。学习是一个按部就班的过程,不能急于求成,因此本文旨在简单的聊一聊Web的发展史。程序员
以目前Spring Boot做为时间轴的话,web发展的过程大体能够分为如下几个阶段: 1.纯jsp / jsp+Servlet / jsp+JavaBean+Servlet
2.MVC / MVP / 三层架构
3.使用EJB进行分布式应用的开发,EJB是重量级框架,在使用上比较复杂和麻烦
4.因为EJB过重了,因而Spring应运而生,可是Spring在发展上愈来愈臃肿,因此仍是有许多繁琐的配置
5.一样的因为String配置太繁琐,因而Spring boot诞生了,这时就能够体验到 “约定大于配置” 的乐趣web
1.jsp / jsp+Servlet / jsp+JavaBean+Servlet开发模式:spring
在最开始的时候,jsp刚刚出来,那时候的web开发基本都是在jsp+JavaBean上完成的。更有甚着直接把页面、逻辑、数据处理全都写在jsp上,想也知道这种方式开发的项目代码不只乱、并且耦合性至关高,形成项目难以维护。数据库
纯JSP流程图以下:编程
JSP+JavaBean流程图以下:设计模式
相信不少人在刚开始学习JavaWeb的时候,或多或少都使用过以上两种模式的开发,第一种模式就不用说了,全部的代码都写在JSP上耦合度至关地高。第二种模式虽然相较于第一种模式上,在必定程度上解耦了,但JSP依旧要负责页面控制以及请求与响应的处理,职责不单一。耦合度依旧比较高,高度耦合的结果是JSP代码十分复杂混乱,后期维护很困难。api
以上这种模式虽然开发起来比较简单,当时这种模式也可以适合一些小型项目的开发,可是因为代码混乱维护困难也就逐渐被淘汰了。安全
领教到这种模式的蛋疼以后就开始加上了Servlet,这时JSP只负责页面控制,Servlet上负责数据的验证,JavaBean负责具体的业务逻辑与数据处理、封装以及和数据库交互等。服务器
JSP+JavaBean+Servlet流程图以下:
在这种模式上已经开始有点MVC的影子了,可是这种模式还不能称之为一个比较完善的MVC设计模式。这种模式相对于以前的两种模式来讲分工更明确,抽取出了Servlet层,体现了一个简单的分层思想。
思惟导图:
1.MVC架构模式
这时候web开发上也开始应用了MVC架构模式,尽管MVC早已不是什么新鲜的架构模式了,早在桌面开发的时代MVC模式就已经存在。MVC是Model、View、Controller的缩写,MVC将系统分解为模型、视图、控制器三部分,每一部分都相对独立,职责单一,在实现过程当中能够专一于自身的核心逻辑。MVC是对系统复杂性的一种合理的梳理与切分,它的思想实质就是“关注点分离”。至于MVC三元素的职责划分与相互关系,这里再也不赘述,下图给出了很是细致的说明:
上图说明了MVC组件的功能和关系。 MVC模式各部分之间的通讯方式以下:
View 传送指令到 Controller Controller 完成业务逻辑后,要求 Model 改变状态 Model 将新的数据发送到 View,用户获得反馈 全部通讯都是单向的
接受用户指令时,MVC 能够分红两种方式。一种是经过 View 接受指令,传递给 Controller,流程图以下:
另外一种是直接经过controller接受指令,流程图以下:
通常在实际项目中每每采用更灵活的方式,一般会把这两种方式结合在一块儿,大体流程图以下:
1.用户能够向 View 发送指令(页面请求)。
2.用户也能够直接向 Controller 发送指令(Servlet请求)。
如今的SpringMVC就是MVC架构模式的框架。
MVP与MVC很像,MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。因此不少人都不是很分的清这两种模式的区别,简单来讲二者主要的区别在于,MVC是单向通讯的,而MVP是双向通讯的。MVP模式将 Controller 更名为 Presenter,因此同时改变了通讯方向,流程图以下:
各部分之间的通讯,都是双向的。
View 与 Model 不发生联系,都经过 Presenter 传递。
View 很是薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter很是厚,大部分主要逻辑都部署在那里。
三层架构(3-tier architecture) 一般意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最多见,也是最重要的一种结构。微软推荐的分层式结构通常分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。
不少人容易把三层模式与MVC模式混淆,三层与MVC的最不一样的地方在于三层是没有Controller控制器的概念。虽然一样是架构级别的,三层与MVC相同的地方在于他们都有一个表现层,可是他们不一样的地方在于其余的两个层。MVC没有把业务的逻辑访问当作两个层,这是采用三层架构或MVC搭建程序最主要的区别。固然了,在三层中也提到了Model概念,可是三层架构中Model的概念与MVC中Model的概念是不同的,“三层”中典型的Model层是以实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的。
在三层中JSP与Servlet代码都属于表示层,业务逻辑层则是完成业务规则的实体类,数据访问层则是JDBC等代码,示意图:
以上已经介绍了几种架构模式,能够看到架构模式的演进目的都是为了解耦,低耦合的架构才能方便于项目后期的维护和扩展,好的架构模式才能让项目有较好的健壮性。
这个阶段开始使用EJB进行分布式应用的开发:
EJB是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。简单来讲就是把已经编写好的程序(即:类)打包放在服务器上执行。凭借java跨平台的优点,用EJB技术部署的分布式系统能够不限于特定的平台。EJB (Enterprise JavaBean)是J2EE(javaEE)的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特色包括网络服务支持和核心开发工具(SDK)。 在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。在EJB3.0推出之后,实体Bean被单独分了出来,造成了新的规范JPA。
EJB 从技术上而言不是一种”产品”,EJB 是一种描述了构建应用组件要解决的标准: 可扩展 (Scalable)
分布式 (Distributed)
事务处理(Transactional)
数据存储(Persistent)
安全性 (Secure)
以上转自百度百科。
因为我我的没有使用过EJB进行开发,不敢随便发表意见,以避免误导你们,对EJB有兴趣的能够参考如下文章:
http://www.uml.org.cn/j2ee/2009112011.asp
Rod Johnson在2002年编写的《Expert One-to-One J2EE Design and Development》一书,Rod 在本书中对J2EE正统框架(EJB)臃肿、低效、脱离现实的种种学院派作法提出了质疑,并以此书为指导思想,编写了interface21框架,也就是后来的Spring。
基于最优方法并适用于各类应用类型的Spring框架的创建要归功于Rod Johnson。这些想法也在他的书中得以阐述。书发表后,基于读者的要求,源代码在开源使用协议下得以提供。
一批自愿拓展Spring框架的程序开发员组成了团队,2003年2月在Sourceforge上构建了一个项目。在Spring框架上工做了一年以后,这个团队在2004年3月发布了第一个版本(1.0)。这个版本以后,Spring框架在Java社区里变得异常流行,部分的要归结于它好于通常水准的文档功能和参考文献,特别是对于一个开源项目而言尤为如此。
Spring解决的是业务逻辑层和其余各层的松耦合问题,所以它将面向接口的编程思想贯穿整个系统应用。简单来讲,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。
轻量
控制反转
面向切面
容器
框架
MVC
Spring架构概述:
Spring虽然相较于EJB要轻量不少,可是发展到如今,Spring也有些臃肿了,在配置上也稍微有些繁琐,可是Spring依旧是如今的主流框架之一。框架的存在就是为了方便于咱们使用一些架构模式,没必要再从底层去开始开发,提升了开发的效率。
到目前为止,已经出现了不少优秀的java开源框架,常见的有Spring、SpringMVC、Spring Boot、Struts 、Hibernate、MyBatis等,其中Spring Boot是Spring框架的简化。经过这些框架,咱们能够很高效的应用架构模式去开发大型的项目。
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员再也不须要定义样板化的配置。经过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
能够建立独立的Spring应用程序
嵌入的Tomcat,无需部署WAR文件
简化Maven配置
自动配置Spring
提供生产就绪型功能,如指标,健康检查和外部配置
绝对没有代码生成以及不要求配置XML
Spring Boot虽然目的是为了简化Spring,彷佛看起来无需去学习Spring的繁琐配置,直接学Spring Boot多好啊,配置简单美滋滋,可是若是没有忍受过Spring的繁琐配置,没有经历过架构模式的演进以及JavaWeb基础不扎实的话,在使用Spring Boot的过程当中就容易出现没有遇到过的错误,也不知道如何去解决。并且设计模式不熟悉的话,也不知道人家框架是怎么进行实现的,设计思想彻底不知道,那么即使有好的框架在手也无法玩得6,更别说去设计架构模式了。
从以上的演进简史能够看到目前这些主流框架是怎么来的,为何要有这些框架。能够说咱们目前学习技术的时代遇上了最好的时代,如今有那么多优秀的开源框架可使用,又有那么多的设计思想能够借鉴,咱们跳过了不少前人常常踩的坑,正是前人踩过了这些坑以后,才能发展那么多优秀的开源框架与设计思想。可是咱们也应该要去经历一下这种架构模式的演进,才能深入体会到不一样的架构模式与框架带给咱们的好处。如今的新东西愈来愈多,你我只有不停的进步,不停地学习才能跟上这个时代。