javaWeb发展历史

  • 前述-BS架构与CS架构
    • 1.1 CS架构
    • 1.2 BS架构
  • 2 JavaWeb发展历史
    • 2.1 servlet之前
    • 2.2 Servlet出现(纯Servlet开发)
    • 2.3 JSP(纯JSP开发)——也叫model1第一代
      • 2.3.1 JSP+JavaBean(Model1第二代)
      • 2.3.2 Servlet+JSP+JavaBean(Model2)
    • 2.4 JavaWeb经典三层框架
    • 2.5 框架阶段
      • 2.5.1 Struts
      • 2.5.2 Spring
      • 2.5.3 SpringMVC
  • 小计

前述-BS架构与CS架构

1.1 CS架构

产品:在C/S结构的情况下,不同的服务需要安装不同的客户端软件,比如QQ、迅雷、Foxmail。这种情况下安装的软件会越来越多,同时也有许多弊端,比如A出差,需要在B电脑上查收邮件,但是B电脑并未安装Foxmail等类似的客户端软件。

1,数据传输流程

1)、客户端软件产生数据,存放于客户端软件的内存中,然后调用接口将自己内存中的数据发送/拷贝给操作系统内存
2)、客户端操作系统收到数据后,按照客户端软件指定的规则(即协议)、调用网卡发送数据
3)、网络传输数据
4)、服务端软件调用系统接口,想要将数据从操作系统内存拷贝到自己的内存中
5)、服务端操作系统收到4的指令后,使用与客户端相同的规则(即协议)从网卡接收到数据,然后拷贝给服务端软件

2,cs架构图
CS:(Client/Server,客户端/服务器模式),桌面级应用 响应速度快,安全性强,个性化能力强,响应数据较快

1.2 BS架构

1,通信流程
具体参考一个请求到响应的过程

2,BS架构图
BS:(Browser/Server,浏览器/服务器模式),web应用 可以实现跨平台,客户端零维护,但是个性化能力低,响应速度较慢。


2 JavaWeb发展历史

2.1 servlet之前

servlet大多数人还是了解的,也还在使用,这里就从servlet说起吧。传说在上世纪90年代,因为nternet和浏览器的飞速发展,使得基于浏览器的B/S模式随之火爆发展起来。最初,用户使用浏览器向WEB服务器发送的请求都是请求静态的资源,比如html、css等。 但是可以想象:根据用户请求的不同动态的处理并返回资源是理所当然必须的要求,例如用户提交一些东西,服务器就能按提交的内容反馈用户不同的效果。所以人们应该非常迫切想要推出一项技术来实现动态的处理, java 为了应对上述需求,促进了servlet技术诞生。

2.2 Servlet出现(纯Servlet开发)

SUN公司刚刚推出JavaEE(Java企业版)时,推出了Servlet这个东西,命名就是Service+Applet,即服务小程序。Servlet可以说是Java技术中最早的Web解决方案,Servlet与普通Java类的编写非常类似。在Servlet中可以通过挨着行输出Html等语句来实现页面的样式和输出,数据的动态功能当然也就实现了。表现、逻辑、控制、业务全部混在Servlet类中。下面给出一个简单例子来直观感受一下。

public void doGet(HttpServletRequest request,HttpServletResponse)throws IOException,ServletException
{response.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();out.println("<html>");out.println("<head><title>Hello World!</title></head>");out.println("<body>");out.println("<p>Hello World!</p>");out.println("</body></html>");
}

这样就动态的生成了一个内容为Hello World!的HTML页面在浏览器上显示。
注意:这里所有代码的实现都在servlet这个类里实现,没有html,没有前端

一项技术的出现必然解决了一些现存的问题,但是我们知道servlet之后还有好些技术来替代在servlet中生成HTML页面的方式,那就说明servlet还存在痛点。从上面代码中我们可以看到servlet编程其实很繁琐:

servlet代码有大量冗余代码,out输出就得写上百遍;

开发servlet必须精通网页前端和美工,你得非常不直观的在Servlet中写前端代码,这使得实现各种页面效果和风格非常困难。
对于后端来说,所有的业务逻辑、页面跳转、央视表现全部混杂在同一个类中,并且一项业务一般只有一个Servlet类与其对应,实在是….太麻烦了。

所以为了解决这些问题(真庆幸晚生了好多年),sun公司借鉴 微软的asp,正式推出了JSP(servlet1.1)

2.3 JSP(纯JSP开发)——也叫model1第一代

经过纯Servlet开发的噩梦之后,Sun公司又推出(或者说是倡导)了JSP技术,全称是Java Server Page,JSP中采用HTML语言直接生成界面,还可以在界面中使用<% %>脚本标识嵌入Java代码,揪其本质也是最终生成一个Servlet类来编译解析。如果要开发具有大量网页内容的网站,可以先使用网页编辑工具编写网页,然后在网页中嵌入处理代码即可。再来一个简单的例子:

<html><head><title>测试</title></head><body>显示的内容是:<% String aa= “hello” ; out.println(aa); %></body>
</html>

注意:此时所有的代码实现都在jsp里实现,包括调用数据库的操作

虽然JSP可以实现网站的快速开发,但依然存在缺点:网站的输入输出、处理、控制全部夹杂在一起,维护不方便,即使只需要修改该页面的一个简单按钮文本,或者一段静态的文本内容,也不得不打开混杂的动态脚本的页面源文件进行修改。当网站中需要进行大量的处理代码的时候,JSP文件将很难维护,并且代码也不容易共享。

前端开发人员需要看大量他看不懂的后端代码;
同样,servlet开发人员也要在复杂的前端代码中找到其能写servlet代码的地方

因为JSP在编写网页方面具有优势,而编写处理代码存在很多问题,所以人们把JSP中的处理代码使用JavaBean来实现。于是出现了JSP+JavaBean的开发模式(javaBean这里负责业务逻辑和实体类模型)。

2.3.1 JSP+JavaBean(Model1第二代)

这里就要首先弄清楚JavaBean到底是啥?JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取(百度)。其实可以理解就是Java类,这里我理解为JavaBean的出现作为和数据库交互的类,Jsp页面里边中写部分Java代码用于转发等操作以及HTML页面的生成代码,而获取数据的方式以及业务逻辑(这里的业务逻辑就是非请求转发部分的代码)则通过JavaBean来实现
javabea的功能:封装数据和封装业务逻辑
整体结构

这种开发模式有一个简单的分层 JSP:表现层、控制层; JavaBean:模型层 利用我们现在熟悉的MVC模型的思想去看,虽然编写代码十分容易,但Jsp混淆了MVC模型中的视图层和控制层, 高度耦合的结果是Jsp代码十分复杂,后期维护依旧困难。由原有的Model1第二代开发模式转变成Model2开发模式,即Servlet+JSP+JavaBean。同时也使得在Web项目中将MVC设计模式实现。

2.3.2 Servlet+JSP+JavaBean(Model2)

Model1第二代虽然在一定程度上解耦了,但JSP依旧即要负责页面控制,又要负责逻辑处理,职责不单一!此时Model2应运而生,使得各个部分各司其职,Model2是基于MVC模式的。Model2的开发模式是:Jsp+Servlet+JavaBean的模式,它和Model1不同的是,增加了Servlet。

在这种开发模式下,JSP页面中就可以不用任何的<%%>语句了,包括<%=%>全部用EL表达式来代替,列表的遍历和条件判断等(Java中的for循环和if语句)也可以通过JSTL来代替。 这样的话视图层相比较之前的开发模式来说要薄得多的多,JSP中不涉及任何的业务逻辑,前端人员修改样式也十分方便。这里可以理解为JSP为MVC设计模式中的V,即视图。

控制层通过Servlet来实现,获取前台传的参数、控制页面跳转,封装对象、向前台传输对象或者参数。并且可以由自己设计,设法用一个Servlet类实现该模块的所有功能的页面跳转。这里可以理解为Servlet为MVC设计模式中的C,即控制器。

但这里要说明的是Model2并不是一个完全标准的MVC设计模式,因为JavaBean还过于臃肿,并不能完全作为M层存在,所以将JavaBean中的封装业务功能再一次进行分割:业务逻辑、数据持久化。

2.4 JavaWeb经典三层框架

三层架构:

表现层(Web层):通俗说就是用户所能看到的直观的界面。其作用就是接收用户提交的请求数据,以及将程序对用户请求所产生的响应数据反馈给用户。目的就是为用户提供可交互的操作界面。所以,表现层就像已经搭好的积木。

业务逻辑层:简单讲就是“具体问题,具体分析”。它根据用户的不同请求而做出不同响应的处理。可以说是对数据层的一种整合方式。所以,就如同每个人会根据自己的喜好搭建不同的积木一样,业务逻辑层代表的就是搭积木的方式。

数据访问层(持久化):它只是提供对数据库操作的多种途径。不同的数据就好比形状各异的积木,而数据访问层就好比取出或放回这些积木的动作。

MVC设计模式:

模型(Model):封装的是数据源和所有基于对这些数据的操作。在一个组件中,Model往往表示组件的状态和操作状态的方法。

视图(View):封装的是对数据源Model的一种显示。一个模型可以由多个视图,而一个视图理论上也可以与不同的模型关联起来。

控制器(Control):封装的是外界作用于模型的操作。通常,这些操作会转发到模型上,并调用模型中相应的一个或者多个方法。一般Controller在Model和View之间起到了沟通的作用,处理用户在View上的输入,并转发给Model。这样Model和View两者之间可以做到松散耦合,甚至可以彼此不知道对方,而由Controller连接起这两个部分。

至此,页面的表现由jsp实现,转发控制由servlet实现,业务逻辑写在业务逻辑层,操作数据库部分写在持久化层,封装数据放在bean层, 分工明确,各司其职。Model1、Model2、三层是在解耦的基础上一步步进化而来,通过解耦我们可以进行进一步的抽象,以应对现实需求的变动。这里要说的就是,从servlet一直到三层架构的转变,其实都是为了实现高内聚,低耦合。一步一步将各个功能分配到不同的地方实现。

2.5 框架阶段

倡导了MVC思想的jsp+javabean+servlet出现,也存在问题:

jsp页面中嵌入了很多java代码,使得结构很乱;
对于大型项目,servlet过多,转向频繁,流程,配置等不易集中管理

因而出现了struts框架

2.5.1 Struts

2001年6月,struts1.0出现,struts针对jsp推出了一套struts标签,从而使得jsp中没有了Java代码,结构清晰,功能强大。针对servlet,它提供了Action类来代替了servlet,这个Action类具有servlet的功能,并且能够进行一些请求过滤和自动转码的功能。

2.5.2 Spring

原本已经开起来很完美了,但是又有一个问题,就是我们在Action调用DAO、Java bean等对象的时候都需要在自身代码中构建它们的对象来使用,这样增加了程序的耦合性,这与我们:“高内聚、松耦合”的思想不符合,那么怎么解决这个问题呢?因而出现了Spring框架。

Spring框架有两大功能:IOC(控制反转)和AOP(面向切面的编程),其中IOC就是说:当一个类中想要调用另外一个类的对象时,不需要再通过new 关键字来创建,而是由Spring框架来负责:创建、分配和管理,从而降低了程序中的耦合性。而AOP可以用来做一些日志的打印和输出,用于提示程序执行过程中的一些具体信息等。

2.5.3 SpringMVC

最后struts和Spring的整合,由于每一个bean都要在Spring中注册,每一个URL都要在struts配置文件中配置。当bean很多和URL对应的请求很多的时候,配置文件无疑会是很庞大的,这个就会使得配置起来很麻烦的费力。那么还有没有更好的办法使得能够结合Spring的功能和struts的功能,但是又可以使配置文件不会批量的增加?因而SpringMVC出现了

SpringMVC通过“基于注解”的方式代替了struts,并且通过Controller类来代替和实现了Action的功能。由于是基于注解的,所以很多的配置信息放在了Controller类中配置,从而降低了.xml文件的配置复杂度。

小计

1,Javabean既可以封装数据同时也可以封装业务逻辑,那它的封装业务逻辑和在servlet写业务逻辑有什么区别吗?
Servlet中的业务逻辑也可以说是业务管理,是直接与前台页面相关联的,一般都是和请求转发有关。而javabean中的业务逻辑主要还是直接或间接与访问数据库有关的代码。
2,JavaBean的发展

3,至此,页面的表现由jsp实现,转发控制由servlet实现,业务逻辑写在业务逻辑层,操作数据库部分写在持久化层,封装数据放在bean层,

javaWeb发展历史相关推荐

  1. java怎么安装_Java桌面应用程序篇:发展历史以及程序的应用

    java桌面应用印象 因为桌面程序运行在宿主机器上, 所以比如你运行java桌面程序,必然要安装java虚拟机, 也就是相当于在操作系统上再加一层抽象. 这与直接调用api的桌面程序效率相比,或多或少 ...

  2. 南岸焊接机器人厂_焊接技术的发展历史,世界焊接发展200年回顾,你了解焊接吗?...

    焊接是通过加热.加压,或两者并用,使两工件产生原子间结合的加工工艺和联接方式.焊接应用广泛,既可用于金属,也可用于非金属. 焊接技术的发展历史 公元前3000多年埃及出现了锻焊技术. 公元前2000多 ...

  3. 一张图看懂图像识别算法发展历史

    一张图看懂图像识别算法发展历史

  4. 阿里云分析性数据库的发展历史

    详细内容请点击: 阿里云分析型数据库使用教程 (分析型数据库(AnalyticDB),是阿里巴巴自主研发的海量数据实时高并发在线分析(Realtime OLAP)云计算服务,使得您可以在毫秒级针对千亿 ...

  5. 人工神经网络发展历史及算法应用综述

    作者:柯悦 简 介: 人工神经网络概念自提起以来,它的发展经历了起起落落,而如今人工神经网络也与各个领域相结合,实现它的价值.人工神经网络主要用来处理分类与回归的问题.决定神经网络发展的三个基本要素主 ...

  6. 一般认为计算机发展历史经历,2018年职称计算机考试考前冲刺练习及答案(1)...

    2018年职称计算机考试考前冲刺练习及答案(1) 1.计算机中所有信息采用的存储方式是:(A ) A)二进制 B)十进制 C)十六进制 D)ASCII码 2.用MIPS来衡量的计传输算机性能指示是( ...

  7. 计算机视觉的发展历史

    "看"是人类与生俱来的能力.刚出生的婴儿只需要几天的时间就能学会模仿父母的表情,人们能从复杂结构的图片中找到关注重点.在昏暗的环境下认出熟人.随着人工智能的发展,机器视觉技术也试图 ...

  8. 物联网技术的发展历史及关键技术

    文章目录 1 物联网技术的发展历史及基本概念 1.1 物联网技术的发展历史 1.2 物联网技术的基本概念 2 物联网的核心技术 2.1 传感器技术 2.2 组网技术 2.3 嵌入式技术 2.4 云计算 ...

  9. AI之HCI:人机交互Human-Computer Interaction的简介、发展历史、案例应用之详细攻略

    AI之HCI:人机交互Human-Computer Interaction的简介.发展历史.案例应用之详细攻略 目录 人机交互Human-Computer Interaction的简介 1.人机交互的 ...

  10. NLP之ASR:语音识别技术(Automatic Speech Recognition)的简介、发展历史、案例应用之详细攻略

    NLP之ASR:语音识别技术(Automatic Speech Recognition)的简介.发展历史.案例应用之详细攻略 目录 语音识别技术(Automatic Speech Recognitio ...

最新文章

  1. 高级特性(4)- 数据库编程
  2. Hadoop1.2.1伪分布模式安装指南
  3. 如何使用计算机模拟函数图像,模拟图像
  4. TCP三次握手在linux内核中的实现
  5. Python基础教程:input()输入与数据类型转换
  6. 【机器学习】PyCaret!又一个神仙的自动机器学习库!
  7. Python 操作 MySQL 数据库
  8. python两个一维数组合并_python:16.合并两个排序的链表
  9. GaussDB(for MySQL) NDP与PQ测试体验
  10. python语法训练_18-04-17回顾: python3语法+刻意训练
  11. 【动态规划】记录每步选择:牛客网:连续子数组的最大和(二)
  12. 免杀神器-virtest定位特征码
  13. Word批量生成软件
  14. Unity VSCode + Emmy Lua 插件断点调试Lua脚本
  15. python经济统计_Python商务与经济统计学-方差分析
  16. 1153. 字符串排序
  17. 如何从零开始成为一名优秀的程序员?---转载、翻译自Quora
  18. 众多的.ts文件、.key文件、.m3u8文件,合并成一个完整的mp4格式的视频
  19. 将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。
  20. js实现购物车加减和价格运算

热门文章

  1. java pdf417_java生成PDF417条码
  2. java 时间计算_Java程序运行时间计算
  3. python身份证验证程序_python验证身份证信息实例代码
  4. 毕设题目:Matlab肌电信号
  5. 【项目一、xxx病虫害检测项目】2、网络结构尝试改进:Resnet50、SE、CBAM、Feature Fusion
  6. Java对接某地联通API接口02---API接口获取验证码
  7. linux装流量宝,流量宝下载_流量宝官方APP手机最新版本下载安装 - 风云下载
  8. 微信支付开发文档说明
  9. SPSS Clementine 安装教程
  10. 不用下载Axure RP Extension for Chrome插件,即可看原型文件