`
l4432848
  • 浏览: 253301 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaWeb程序架构模式的演进

    博客分类:
  • java
 
阅读更多

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。

JavaWeb程序架构模式的演进

老一辈的程序员一般都经历了Web程序架构模式的演进,从最开始的在jsp或者jsp+Servlet上做开发,到后来的mvc、三层等。而现在有挺多人学完web,可能都没怎么使用过jsp或jsp+Servlet开发过项目,就直接学习使用Spring、Spring Boot或者SpringMVC等框架进行开发。如果没有经历这样一个逐步演进的过程,就很难理解框架带给了我们什么样的好处,而且开发过程中遇到问题也难以解决,更别说去学习这些框架中的源码了。学习是一个循序渐进的过程,不能急于求成,所以本文旨在简单的聊一聊Web的发展史。

一、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开发模式:

在最开始的时候,jsp刚刚出来,那时候的web开发基本都是在jsp+JavaBean上完成的。更有甚着直接把页面、逻辑、数据处理全都写在jsp上,想也知道这种方式开发的项目代码不仅乱、而且耦合性相当高,造成项目难以维护。

纯JSP流程图如下:

image

JSP+JavaBean流程图如下:

image

相信很多人在刚开始学习JavaWeb的时候,或多或少都使用过以上两种模式的开发,第一种模式就不用说了,所有的代码都写在JSP上耦合度相当地高。第二种模式虽然相较于第一种模式上,在一定程度上解耦了,但JSP依旧要负责页面控制以及请求与响应的处理,职责不单一。耦合度依旧比较高,高度耦合的结果是JSP代码十分复杂混乱,后期维护很困难。

以上这种模式虽然开发起来比较简单,当时这种模式也能够适合一些小型项目的开发,但是由于代码混乱维护困难也就逐渐被淘汰了。

领教到这种模式的蛋疼之后就开始加上了Servlet,这时JSP只负责页面控制,Servlet上负责数据的验证,JavaBean负责具体的业务逻辑与数据处理、封装以及和数据库交互等。

JSP+JavaBean+Servlet流程图如下:

image

在这种模式上已经开始有点MVC的影子了,但是这种模式还不能称之为一个比较完善的MVC设计模式。这种模式相对于之前的两种模式来说分工更明确,抽取出了Servlet层,体现了一个简单的分层思想。

思维导图:

image

三、web发展初中级阶段

1.MVC架构模式

这时候web开发上也开始应用了MVC架构模式,尽管MVC早已不是什么新鲜的架构模式了,早在桌面开发的时代MVC模式就已经存在。MVC是Model、View、Controller的缩写,MVC将系统分解为模型、视图、控制器三部分,每一部分都相对独立,职责单一,在实现过程中可以专注于自身的核心逻辑。MVC是对系统复杂性的一种合理的梳理与切分,它的思想实质就是“关注点分离”。至于MVC三元素的职责划分与相互关系,这里不再赘述,下图给出了非常细致的说明:

image

上图说明了MVC组件的功能和关系。 MVC模式各部分之间的通信方式如下:

image

View 传送指令到 Controller Controller 完成业务逻辑后,要求 Model 改变状态 Model 将新的数据发送到 View,用户得到反馈 所有通信都是单向的

接受用户指令时,MVC 可以分成两种方式。一种是通过 View 接受指令,传递给 Controller,流程图如下:

image

另一种是直接通过controller接受指令,流程图如下:

image

一般在实际项目中往往采用更灵活的方式,通常会把这两种方式结合在一起,大致流程图如下:

image

1.用户可以向 View 发送指令(页面请求)。

2.用户也可以直接向 Controller 发送指令(Servlet请求)。

现在的SpringMVC就是MVC架构模式的框架。

MVP架构模式:

MVP与MVC很像,MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。所以很多人都不是很分的清这两种模式的区别,简单来说两者主要的区别在于,MVC是单向通信的,而MVP是双向通信的。MVP模式将 Controller 改名为 Presenter,所以同时改变了通信方向,流程图如下:

image

MVP特点:

各部分之间的通信,都是双向的。
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等代码,示意图:

image

以上已经介绍了几种架构模式,可以看到架构模式的演进目的都是为了解耦,低耦合的架构才能方便于项目后期的维护和扩展,好的架构模式才能让项目有较好的健壮性。

四、web发展中高级阶段

这个阶段开始使用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

Spring的诞生:

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(一站式) 轻量级开源框架。

Spring框架的特征:

轻量
控制反转
面向切面
容器
框架
MVC

Spring架构概述:

image

Spring虽然相较于EJB要轻量很多,但是发展到现在,Spring也有些臃肿了,在配置上也稍微有些繁琐,但是Spring依旧是现在的主流框架之一。框架的存在就是为了方便于我们使用一些架构模式,不必再从底层去开始开发,提高了开发的效率。

五、web发展目前阶段

到目前为止,已经出现了很多优秀的java开源框架,常见的有Spring、SpringMVC、Spring Boot、Struts 、Hibernate、MyBatis等,其中Spring Boot是Spring框架的简化。通过这些框架,我们可以很高效的应用架构模式去开发大型的项目。

化繁为简,Spring Boot框架:

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

Spring Boot特点:

可以创建独立的Spring应用程序
嵌入的Tomcat,无需部署WAR文件
简化Maven配置
自动配置Spring
提供生产就绪型功能,如指标,健康检查和外部配置
绝对没有代码生成以及不要求配置XML

Spring Boot虽然目的是为了简化Spring,似乎看起来无需去学习Spring的繁琐配置,直接学Spring Boot多好啊,配置简单美滋滋,但是如果没有忍受过Spring的繁琐配置,没有经历过架构模式的演进以及JavaWeb基础不扎实的话,在使用Spring Boot的过程中就容易出现没有遇到过的错误,也不知道如何去解决。而且设计模式不熟悉的话,也不知道人家框架是怎么进行实现的,设计思想完全不知道,那么即便有好的框架在手也没法玩得6,更别说去设计架构模式了。

六、小结

从以上的演进简史可以看到目前这些主流框架是怎么来的,为什么要有这些框架。可以说我们目前学习技术的时代赶上了最好的时代,现在有那么多优秀的开源框架可以使用,又有那么多的设计思想可以借鉴,我们跳过了很多前人经常踩的坑,正是前人踩过了这些坑之后,才能发展那么多优秀的开源框架与设计思想。但是我们也应该要去经历一下这种架构模式的演进,才能深刻体会到不同的架构模式与框架带给我们的好处。现在的新东西越来越多,你我只有不停的进步,不停地学习才能跟上这个时代。

2
1
分享到:
评论

相关推荐

    从零写一个JavaWEB框架的演进共13页.pdf.zip

    【标题】"从零写一个JavaWEB框架的演进共13页.pdf" 这个压缩包文件的标题揭示了其内容核心——一个关于如何从零开始编写Java Web框架的详细教程。Java Web框架是用于构建Web应用程序的软件工具,它简化了开发过程,...

    javaweb技术说明

    1. **MVC模式(Model-View-Controller)**:MVC模式是JavaWeb应用中最常见的架构模式之一,它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于代码的解耦合,提高...

    javaweb开发

    JavaWeb开发是Java语言在网络应用程序开发方面的一个应用分支,它利用Java语言的强大功能,结合网络编程技术,主要开发基于浏览器/服务器(B/S)架构的动态网站。JavaWeb开发通常依赖于服务器端的Java技术,如...

    国外javaWeb开发技术.doc

    总的来说,JavaWeb开发技术经历了从MVC模式的引入到各种框架的涌现,再到语义Web的探索,始终致力于提高开发效率、简化复杂性和增强应用程序的互操作性。无论是国外还是国内,这些技术都在持续演进,以适应不断变化...

    项目架构、服务技术架构的演进(单体-SOA-微服务-中台)、网站架构的演进

    在IT行业中,项目架构和服务技术架构的演进是企业应对业务复杂性和增长需求的重要手段。本文将探讨这一演进过程,从单体架构到服务导向架构(SOA),再到微服务架构和中台战略,以及网站架构的相应变迁。同时,我们...

    走进JavaWeb技术世界(JavaWeb的由来和基础知识+极简配置的SpringBoot+Tomcat5总体架构剖析等)

    JavaWeb的出现,特别是Servlet和JSP的引入,彻底改变了Web应用程序的开发模式,为动态网页和企业级应用提供了强大的支持。JavaWeb的发展历程可以分为几个关键阶段,其中包含了从静态网页到动态交互的转变。 早期的...

    JavaWeb应用开发全套课件.ppt

    课程内容分为多个章节,首先会介绍Web技术的概述,讲述Web应用从桌面应用程序到Web应用程序的演进过程。传统的桌面应用程序如音乐播放器,最初是单机版,后来发展为C/S网络版,即客户端安装程序,服务器存储数据。再...

    Javaweb课程笔记文档1

    1. **Servlet**:Servlet是JavaWeb中最基础的组件之一,它是Java语言编写的应用程序,运行在服务器端,用于处理来自客户端(通常是Web浏览器)的请求,并向客户端发送响应。Servlet通过继承`javax.servlet.Servlet`...

    java+web项目开发,javaweb开发完整实例源代码

    2. **MVC模式**:这是一种软件设计模式,它将应用程序分为模型、视图和控制器三个部分。模型处理数据,视图负责用户界面,控制器接收用户输入并调用模型和视图。 3. **JDBC**:Java Database Connectivity是Java...

    javaweb_part15

    - MVC架构:Struts 实现了 MVC 设计模式,分离了业务逻辑、数据和展示。控制器(ActionServlet)接收请求并调用相应的业务逻辑,然后将结果传递给视图进行展示。 - 动态表单处理:Struts 提供了 ActionForm 类,...

    JavaWeb源代码

    3. **MVC模式**:Model-View-Controller(模型-视图-控制器)是JavaWeb开发中常见的设计模式。模型负责业务逻辑,视图负责数据展示,控制器协调模型和视图,使得代码结构清晰,易于维护。 4. **JDBC**:Java ...

    基于ssm+vue+javaweb的吃了吗管理系统.zip

    本文将深入解析一个名为“吃了吗”的管理系统,它采用的是SSM(Spring、SpringMVC、MyBatis)经典架构与前端Vue.js框架的结合,同时融入了JavaWeb技术和微信小程序的接口,为餐饮行业的数字化管理提供了全面的解决...

    编程语言JavaWeb开发框架.pdf

    这些框架多数遵循MVC(Model-View-Controller)设计模式,以分层的方式组织应用程序,便于管理代码和资源。从文件提供的信息来看,本篇文档主要介绍和比较了几个流行的Java Web开发框架,如WebWork、Struts、...

    javaweb人事管理系统.docx

    根据提供的文档信息,本文将重点解析“javaweb人事管理系统”的关键知识点,涵盖管理信息系统的基本概念、SQL Server 2005的介绍及其在人事管理系统中的应用等方面。 ### 管理信息系统概述 #### 1. 管理信息系统的...

    零基础学Java Web开发

    Web应用程序开发技术随着网络技术的发展而不断进步,涉及到多种技术的演进和开发模式的选择。C/S与B/S架构之争是Web开发历史上的一个重要议题。C/S(客户端/服务器)架构是早期的开发模式,客户端需要安装特定软件,...

    Java Web Framework综述

    这些框架基于Java技术,通常遵循Model-View-Controller (MVC)架构模式,帮助开发者分离业务逻辑、用户界面和数据管理。本文将探讨Java Web Framework的基本工作原理以及一些常见的开源Web MVC框架。 首先,理解HTTP...

    基于Struts和Hibernate的多层构架在JAVAWeb开发中的应用.pdf

    随着互联网技术的发展,Web应用程序的需求日益增加,而Java作为企业级开发的主要语言之一,其相关的Web开发技术也在不断演进。在早期的Java Web开发中,JSP(JavaServer Pages)和Servlet是主要的技术栈,它们为创建...

    浅谈Web网站架构演变过程

    我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。该系统具备的功能:用户模块:用户注册和管理商品模块:商品展示和管理交易模块:创建交易和管理网站的初期,我们经常会在单机上跑...

Global site tag (gtag.js) - Google Analytics