下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Javaweb研发的发展史以及演变过程⼀、背景⾸先介绍⼀个整理⽂章的背景:本来打算学习web容器是如何加载web应⽤程序的,越了解越深⼊,发现⾃⼰有很多地⽅都是模棱两可的,这时就对javaweb的前世今⽣产⽣了很⼤好奇,于是查询各种资料和对⽐,查阅⼤量资料的同时突然明⽩了⼀些问题,了解javaweb开发的前世今⽣对javaweb的开发有很⼤的帮助加深理解;Javaweb的早期发展:使⽤Javaweb技术实现时可以借助于多种相关的技术,如常见的JavaBean、servlet、等,也可以使⽤⽀持MVC的设计框架,常见的框架有struts、springmvc、spring、JSF等。下⾯有⾃⼰新的总结以及配图⼆、单体应⽤架构、servlet⼤多数⼈还是了解的,也还在使⽤,这⾥就从servlet说起吧。传说在上世纪90年代,因为nternet和浏览器的飞速发展,使得基于浏览器的B/S模式随之⽕爆发展起来。最初,⽤户使⽤浏览器向WEB服务器发送的请求都是请求静态的资源,⽐如html、css等。但是可以想象:根据⽤户请求的不同动态的处理并返回资源是理所当然必须的要求,例如⽤户提交⼀些东西,服务器就能按提交的内容反馈⽤户不同的效果。所以⼈们应该⾮常迫切想要推出⼀项技术来实现动态的处理,java为了应对上述需求,促进了servlet技术诞⽣。、SUN公司刚刚推出JavaEE(Java企业版)时,推出了Servlet这个东西,命名就是Service+Applet,即服务⼩程序。Servlet可以说是Java技术中最早的Web解决⽅案,Servlet与普通Java类的编写⾮常类似。在Servlet中可以通过挨着⾏输出Html等语句来实现页⾯的样式和输出,数据的动态功能当然也就实现了。表现、逻辑、控制、业务全部混在Servlet类中。下⾯给出⼀个简单例⼦来直观感受⼀下。out.println("<head><title>HelloWorld</title></head>");out.println("<body>");out.println("<p>HelloWorld</p>");out.println("</body></html>");}这样就动态的⽣成了⼀个内容为HelloWorld!的HTML页⾯在浏览器上显⽰。⼀项技术的出现必然解决了⼀些现存的问题,但是我们知道servlet之后还有好些技术来替代在servlet中⽣成HTML页⾯的⽅式,那就说明servlet还存在痛点。从上⾯代码中我们可以看到servlet编程其实很繁琐:1.servlet代码有⼤量冗余代码,out输出就得写上百遍;2.开发servlet必须精通⽹页前端和美⼯,你得⾮常不直观的在Servlet中写前端代码,这使得实现各种页⾯效果和风格⾮常困难。3.对于后端来说,所有的业务逻辑、页⾯跳转、样式表现全部混杂在同⼀个类中,并且⼀项业务⼀般只有⼀个Servlet类与其对应,实在是….太⿇烦了。所以为了解决这些问题(真庆幸晚⽣了好多年),sun公司借鉴微软的asp,正式推出了JSP(servlet1.1)、经过纯Servlet开发的噩梦之后,Sun公司⼜推出(或者说是倡导)了JSP技术,全称是JavaServerPage,JSP中采⽤HTML语⾔直接⽣成界⾯,还可以在界⾯中使⽤<%%>脚本标识嵌⼊Java代码,揪其本质也是最终⽣成⼀个Servlet类来编译解析。如果要开发具有⼤量⽹页内容的⽹站,可以先使⽤⽹页编辑⼯具编写⽹页,然后在⽹页中嵌⼊处理代码即可。再来⼀个简单的例⼦:<body></body></html>虽然JSP可以实现⽹站的快速开发,但依然存在缺点:⽹站的输⼊输出、处理、控制全部夹杂在⼀起,维护不⽅便,即使只需要修改该页⾯的⼀个简单按钮⽂本,或者⼀段静态的⽂本内容,也不得不打开混杂的动态脚本的页⾯源⽂件进⾏修改。当⽹站中需要进⾏⼤量的处理代码的时候,JSP⽂件将很难维护,并且代码也不容易共享。1.前端开发⼈员需要看⼤量他看不懂的后端代码;2.同样,servlet开发⼈员也在复杂的前端代码中找到其能写servlet代码的地⽅因为JSP在编写⽹页⽅⾯具有优势,⽽编写处理代码存在很多问题,所以⼈们把JSP中的处理代码使⽤JavaBean来实现。于是出现了JSP+JavaBean的开发模式(有⼈叫做Model1开发模式,为什么这么叫,嗯~~不知道~~~)。最早期作为⼀个jsp技术初学者,使⽤纯粹的jsp代码实现⽹站开发是其⾸选。在这种模式中实现开发⽹站其实就是在jsp页⾯中包含各种代码,如HTML标记、CSS标记、JavaScript标记、逻辑处理、数据库处理代码等。这么多种代码放置在⼀个页⾯中,如果出现错误,不容易排查和调试。(jsp技术可以理解为可以包含各种标记语⾔HTML、css、Java等、的技术)、(这⾥就要⾸先弄清楚JavaBean到底是啥?JavaBean是⼀种JAVA语⾔写成的可重⽤组件。为写成JavaBean,类必须是具体的和公共的,并且具有⽆参数的构造器。JavaBean通过提供符合⼀致性设计模式的公共⽅法将内部域暴露成员属性,set和get⽅法获取(百度)。其实可以理解就是Java类,这⾥我理解为JavaBean的出现作为和数据库交互的类,Jsp页⾯⾥边中写部分Java代码⽤于转发等操作以及HTML页⾯的⽣成代码,⽽获取数据的⽅式以及部分业务逻辑则通过JavaBean来实现。整体结构这种开发模式有⼀个简单的分层JSP:表现层、控制层;JavaBean:模型层利⽤我们现在熟悉的MVC模型的思想去看,虽然编写代码⼗分容易,但Jsp混淆了MVC模型中的视图层和控制层,⾼度耦合的结果是Jsp代码⼗分复杂,后期维护依旧困难。由原有的Model1开发模式转变成Model2开发模式,即Servlet+JSP+JavaBean。同时也使得在Web项⽬中将实现。(2)有其他资料显⽰是下⾯的处理流程图,主要是在JavaBean上⾯对单⼀模式进⾏改进,将jsp页⾯响应请求转交给JavaBean处理,最后将结果返回给客户。所有的数据通过bean来处理,jsp实现页⾯展⽰。jsp+JavaBean模式技术实现了页⾯展⽰和业务逻辑分离。使⽤jsp技术中HTML、css等可以⾮常容易地构建数据显⽰页⾯,⽽对于数据处理可以交给JavaBean技术,如连接数据库代码、显⽰数据库代码等同时也可以达到重⽤的⽬的等;、Servlet+JSP+JavaBean(Model2时代)Model1虽然在⼀定程度上解耦了,但JSP依旧即要负责页⾯控制,⼜要负责逻辑处理,职责不单⼀!此时Model2应运⽽⽣,使得各个部分各司其职,Model2是基于MVC模式的。Model2的开发模式是:Jsp+Servlet+JavaBean的模式,它和Model1不同的是,增加了Servlet。在这种开发模式下,JSP页⾯中就可以不⽤任何的<%%>语句了,包括<%=%>全部⽤EL表达式来代替,列表的遍历和条件判断等(Java中的for循环和if语句)也可以通过JSTL来代替。这样的话视图层相⽐较之前的开发模式来说要薄得多的多,JSP中不涉及任何的业务逻辑,前端⼈员修改样式也⼗分⽅便。这⾥可以理解为JSP为中的V,即视图。控制层通过Servlet来实现,获取前台传的参数、控制页⾯跳转,封装对象、向前台传输对象或者参数。并且可以由⾃⼰设计,设法⽤⼀个Servlet类实现该模块的所有功能的页⾯跳转。这⾥可以理解为Servlet为中的C,即控制器。但这⾥要说明的是Model2并不是⼀个完全标准的,因为JavaBean还过于臃肿,并不能完全作为M层存在,所以将JavaBean再⼀次进⾏分割:业务逻辑、数据持久化。1.3、jsp+JavaBean+servlet模式MVC(model、view、controller)是⼀个设计模式,他强制性的地使应⽤程序的输⼊处理和输出分开。使⽤MVC应⽤程序被分成三个核⼼部件:模型、视图、控制器,每个部分各⾃处理⾃⼰的任务。M:JavaBeanV:JSPC:servlet1.3.1、模型模型(model)就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其他层来说是⿊箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核⼼。MVC设计模式告诉我们,把应⽤的模型按⼀定的规则抽取出来,抽取的层次很重要,这也是判断开发⼈员是否优秀的设计依据。抽象与具体不能隔得太远,也不能太近。1.3.2、视图视图(view)代表⽤户交互界⾯,对于web应⽤可以概括为HTML界⾯,也可以是XHTML和applet。随着页⾯的复杂性和规模性,界⾯的处理也变得具有挑战性。⼀个应⽤可能有很多不同的视图,MVC设计模式对于视图的处理仅限与视图上数据的采集和处理,以及⽤户的请求,⽽不包括在视图上的业务流程处理。业务流程的处理交给“模型”处理。例如:⼀个订单的视图只接受来⾃模型的数据并显⽰给⽤户,以及将⽤户界⾯的输⼊数据和请求传递给控制层和模型层1.3.3、控制器控制器(controller)可以理解为从⽤户接受请求将模型与视图匹配在⼀起,共同完成⽤户的请求。划分控制层的作⽤也是很明显,它清楚地告诉你,它就是⼀个分发器,要选择什么样的模型,要选择什么样的视图,可以完成什么样的⽤户请求。控制层并不做任何的数据处理。例如:⽤户点击⼀个连接,控制层接受请求后并不处理业务信息,它只把⽤户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给⽤户。因此,⼀个模型可能对应多个视图,⼀个视图肯能对应多个模型。模型、视图与控制器的分离,使得⼀个模型可以具有多个显⽰视图。如果⽤户通过某⼀个视图的控制器改变了模型的数据,所有其他依赖于这些数据的视图都会反映出这些变化。因此,⽆论何时发⽣了何种变化,控制器都会将变化通知所有的视图,导致显⽰的更新。jsp+javabean+servlet技术的组合很好地实现了MVC模式,其中view通常是JSP⽂件,即页⾯显⽰部分;controller⽤servlet来实现,即页⾯显⽰的逻辑部分实现;model通常⽤服务端的JavaBean或者EJB实现,即业务逻辑部分的实现,其形式如图三层架构与MVC设计模式这⾥⾸先讨论⼀下三层架构和MVC的关系。我们⼤多数⼈总会把三层架构和MVC混为⼀谈,其实并⾮如此。三层架构是指软件系统的整体设计分层:业务逻辑层、数据持久化层和表现层。⽽MVC设计模式只体现在表现层中,即将表现层⼜分为模型、视图和控制器。所以在上⾯Model2模式下对JavaBean分割后形成了三层架构与MVC的全新的JavaWeb开发模式。这⾥在分别介绍⼀下三层架构以及MVC设计模式:三层架构:1.表现层(Web层):通俗说就是⽤户所能看到的直观的界⾯。其作⽤就是接收⽤户提交的请求数据,以及将程序对⽤户请求所产⽣的响应数据反馈给⽤户。⽬的就是为⽤户提供可交互的操作界⾯。所以,表现层就像已经搭好的积⽊。2.业务逻辑层:简单讲就是“具体问题,具体分析”。它根据⽤户的不同请求⽽做出不同响应的处理。可以说是对数据层的⼀种整合⽅式。所以,就如同每个⼈会根据⾃⼰的喜好搭建不同的积⽊⼀样,业务逻辑层代表的就是搭积⽊的⽅式。3.数据访问层(持久化):它只是提供对数据库操作的多种途径。不同的数据就好⽐形状各异的积⽊,⽽数据访问层就好⽐取出或放回这些积⽊的动作。MVC设计模式:1.模型(Model):封装的是数据源和所有基于对这些数据的操作。在⼀个组件中,Model往往表⽰组件的状态和操作状态的⽅法。2.视图(View):封装的是对数据源Model的⼀种显⽰。⼀个模型可以由多个视图,⽽⼀个视图理论上也可以与不同的模型关联起来。3.控制器(Control):封装的是外界作⽤于模型的操作。通常,这些操作会转发到模型上,并调⽤模型中相应的⼀个或者多个⽅法。⼀般Controller在Model和View之间起到了沟通的作⽤,处理⽤户在View上的输⼊,并转发给Model。这样Model和View两者之间可以做到松散耦合,甚⾄可以彼此不知道对⽅,⽽由Controller连接起这两个部分。⾄此,页⾯的表现由jsp实现,转发控制由servlet实现,业务逻辑写在业务逻辑层,操作数据库部分写在持久化层,分⼯明确,各司其职。Model1、Model2、三层是在解耦的基础上⼀步步进化⽽来,通过解耦我们可以进⾏进⼀步的抽象,以应对现实需求的变动。这⾥要说的就是,从servlet⼀直到三层架构的转变,其实都是为了实现⾼内聚,低耦合。⼀步⼀步将各个功能分配到不同的地⽅实现。四、框架阶段倡导了MVC思想的jsp+javabean+servlet出现,也存在问题:1)jsp页⾯中嵌⼊了很多java代码,使得结构很乱;2)对于⼤型项⽬,servlet过多,转向频繁,流程,配置等不易集中管理,因⽽出现了struts、的出现2001年6⽉,struts1.0出现,struts针对jsp推出了⼀套struts标签,从⽽使得jsp中没有了Java代码,结构清晰,功能强⼤。针对servlet,它提供了Action类来代替了servlet,这个Action类具有servlet的功能,并且能够进⾏⼀些请求过滤和⾃动转码的功能。、的出现原本已经开起来很完美了,但是⼜有⼀个问题,就是我们在Actio
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村低保测试题目及详细答案
- 2025-2026学年昭通市永善县三下数学期中统考模拟试题(含答案)
- 2025-2026学年成都市青白江区数学四下期末监测试题含答案
- 气道管理单选题附答案
- 人货电梯试题和答案全解析
- 入院病人宣教知识测验题目及答案
- 2025-2026学年山西省大同市四年级数学第二学期期中达标测试试题含答案
- 企业保洁考试题目及详细答案
- 祁阳小升初试题集及答案分享
- 社会生单招历年试题及答案呈现
- 资源循环业务风机叶片热解科研产线落地服务建设项目环境影响报告表
- 心包穿刺术实施方案及流程
- 装配整体式叠合剪力墙安装作业规程
- 2026年信息技术安全培训方案
- 2026年应急管理信息化应用培训考试试卷(含答案)
- 高中数学 加练 专题5 第50练 复 数
- SYT 6649-2025《油气管道管体缺陷修复技术规范》
- 电玩城安全工作方案
- 2026中国新材料技术在航空航天领域应用趋势及投资前景报告
- 2026年上海市助理政工师职称考试(思想政治工作)试题解析及核心考点
- 门店消防应急疏散预案
评论
0/150
提交评论