前言

  为什么要说发展历史呢?了解发展历史,能够更好的拥有全局视野,也能对当前使用的技术有更深的了解。
  我认为web发展历史有两个分水岭,一个是从静态页面转变为动态页面,一个是从传统的动态web开发模式转为前后端分离模式。技术都围绕着这两个分水岭来发展演变。下面就从这两个方面加以说明。

从静态页面到动态页面

静态

  文章(一)中说明了浏览器就是网站的运行环境,浏览器解析网站的代码,然后给用户呈现出代码设计者想要体现的界面。这里的代码可以简单认为是 HTML 这种语言,设计者通过 HTML 来告诉浏览器该页面的结构是什么、内容是什么。所以服务器上存放包含 HTML 语言的文件即可。然后浏览器从服务器端请求到该文件后,即可解析并展现。因为文件内容是确定的,所以只能展示静态页面,就和一幅图片一样。所以每个用户打开网站看到的内容一模一样

动态

  那么如何使网站内容可变化呢?这就引出了动态页面的发展过程。其实分析一下就知道,总共两块可以下手:一是服务器根据不同的情况返回不同的页面;二是浏览器打开的页面根据不同的请求结果修改对应的地方。

从服务器返回不同的页面

  为什么要返回不同的页面呢?因为要想引入用户系统等,必须有数据库的配合,也就是前面几篇文章写过的。不同用户登录上来看到的个人信息肯定是不同的。而且也是大势所趋,动态网站更受用户的欢迎,功能也更加丰富。

CGI

  CGI是一种通用标准,它定义了作为一个中间层所需要实现的功能。这个中间层的作用是:接收服务器的请求,去和数据库/文件系统等进行交互,然后将得到的数据写在页面中并进行返回。所以服务器相当在浏览器与中间层之间进行转发操作。所有具有标准输入输出功能的语言都可以按照 CGI 标准来开发中间层,当时编程语言的发展,可以实现CGI接口的一般有perl,C,shell等。

servlet

  CGI固然能够实现动态页面的需求,但是CGI有许多不足,不安全并且效率低下。而当时基于 JAVA 语言的 servlet 的出现改善了CGI的不足,servlet 工作原理和CGI基本类似,但是更加高性能可靠。

JSP

  但是servlet开发起来太复杂。此时借鉴 ASP 等技术又开发了 JSP 这种技术。JSP 是能够在静态HTML页面中嵌入动态JAVA代码的技术。虽然JSP 能实现的 servlet 也都能实现,但是利用 JSP 编写静态页面更加方便,而不必在程序中输出静态的 HTML 。更加关键的是,JSP 使得静态页面和动态内容分离,也为以后的 MVC 思想做了准备。
  实际上浏览器访问服务器的 .jsp 页面时(页面中包括了HTML代码和JAVA代码),服务器端会首先将 JSP 页面编译成servlet ,由 servlet 把最终生成的页面内容返回给服务器,从而返回到浏览器中。

servlet升级

  直接将java 代码嵌入到 HTML 中容易造成混乱。所以 servlet 升级后倡导 MVC 的思想:将某些java代码封装在JSP标签中,然后JSP页面作为 V (view)层,只负责网站视图的处理;servlet 作为 C (Controller)层来负责一部分业务逻辑和控制;M (model) 作为数据层来负责组织数据。具体 MVC 思想可以自行搜索查阅。

浏览器根据请求结果修改部分页面

  浏览器之所以能够修改部分页面,是因为 Ajax (Asynchronous JavaScript and XML)技术的出现,这种技术能够动态改变局部页面的内容。
  请求结果又有两种情况,一种是返回部分页面的 html 代码,一种是不返回界面代码,而是返回结构化数据。

请求结果是html

  基于 Ajax 技术,服务端可以只返回部分 HTMl ,即可动态刷新页面内容。

请求结果是结构化数据

  随着智能手机的出现,开发一款产品需要APP版本和web版本,那么服务器再返回html页面就不合适了。
  因为 Ajax 的普及,所以 javascript (js)这门语言也用的越来越多,而且 js 天然支持 JSON 这种结构化数据,JSON 也足够轻量方便,所以越来越多的应用变成了服务器响应不再是 html ,客户端和服务器交互都是通过 JSON 这种格式来进行交互。

从传统模式到前后端分离

  我们这里说的传统模式是在动态web开发中的传统模式。即前后端代码一般在同一个工程下面,前端开发界面时还需要把整个工程导入进来,部署麻烦,开发麻烦。
  并且,由于 JSON 格式的流行,前后端之间的交互有很多都采用 JSON ,大家自然而然的想要将前后端分离开来。前后端单独部署,并行开发,互不影响。所以 前后端分离RESTful 风格的API就流行起来。
  前端负责页面的设计、路由、展示等等,后端对外提供(类)RESTful 风格的API,以供前端程序调用。前后端之间采用HTTP协议进行通信,协议的内容格式采用 JSON 这种格式,API的设计风格采用 RESTful 风格。
  简单情况下,前端部署在 nginx 上,后端部署在 tomcat 上,前后端分别开发,互不影响。前端可以利用 mock 工具进行假数据测试,来模拟后端的API响应。而后端采用 postman 这种HTTP客户端来模拟前端的调用。独立开发,独立测试。双方职责更加清晰。

动静分离和前后端分离

  二者不是同一种概念。动静分离指的是将 html, css , js 等这种静态的资源放在 web服务器中 (比如nginx),而将和数据库交互的后端程序放在 web应用服务器 中(比如tomcat)。这样子做的原因是提高后端服务器的性能,同时也提高静态资源的响应能力等。不论是否是前后端分离,都可以照这样子去部署。

总结

  而我们现在采用的就是基本的前后端分离模式,前端采用 Vue 技术栈开发,后端采用 Spring 技术栈开发。了解了什么是web开发,以及web开发的历史后,相信你心中已经有了深刻的影响。下面就进入真正的后端开发系列–从框架说起

推荐阅读

  可自行搜索 前后端分离动静分离JSON 等文中提到的技术点

java后端开发(二):web开发历史解读相关推荐

  1. 在外包公司从 Java 后端干到安卓开发,你醒醒吧,阿里大师推荐的这份 Java 开发必读书单

    先是工作内容的问题. 当初他应聘的岗位是后端开发,可现实却是他既要写后端,也要写客户端.本着做的多做的广可以学到更多的原则,他并不是非常在意这个问题,边做边学,渐渐地也上了手. 其次是工作量的问题. ...

  2. .NET、JAVA和PHP在Web开发的优缺点

    .NET.JAVA和PHP在Web开发的优缺点 现在做Web开发,用哪个平台哪种语言其实本质上没有太大的区别,因为Web开发框架已经非常成熟,只要符合需求,能按时交付产品就ok了. 要选择哪个平台,是 ...

  3. java ug二次开发_使用Java进行UG二次开发:简单的例子(上) | 学步园

    最近因为要进行TeamCenter二次开发(胖客户端定制),所有要开始研究Java了.因此突发奇想为什么不能使用Java进行二次开发呢?现在对UG进行的开发以C/C++应用为主.大多数使用的是原来的U ...

  4. Arcobjects for java:Arcgis二次开发入门,开发一个基本地图组件

    一.目的 因学习需要,使用Java进行Arcgis二次开发.当前对arcgis进行二次开发使用的语言基本是C#,使用Java对Arcgis进行二次开发的很少.于是使用java在idea上进行Arcgi ...

  5. 基于Java的Arcgis二次开发所需材料

    使用ArcObjects for Java进行Arcgis10.2二次开发,可能需要的材料: 1.32位的Jdk 我使用的是jdk1.8.0_131_32 可以去官网下载,我把自己用的上传了,有需要可 ...

  6. 全栈开发和web开发_全栈开发人员:这是什么,以及如何成为一个完整的开发人员...

    全栈开发和web开发 一个全职的开发人员是各行各业的杰作,也是一个备受追捧的求职者. 标题暗示着知识的广度,这对于人手不足的初创公司和管理复杂应用程序的大公司而言都是无价的. 但是, 术语" ...

  7. 全栈开发和web开发_成为全栈开发人员

    全栈开发和web开发 This popular article has been updated in June 2017 to include modern technologies. 该热门文章已 ...

  8. WebGIS开发和Web开发的区别

    很多对GIS开发有一定了解的朋友应该知道,WebGIS开发是GIS开发岗位招聘中需求最高的. 学习GIS开发,第一步都是先学习Web开发基础(HTML5/CSS/JS),那WebGIS开发和Web开发 ...

  9. 网站开发流程-WEB开发的流程

    网站开发流程-WEB开发的流程 web开发流程概括 1.)项目的角色划分 如果不包括前期和后期的市场推广及销售人员,开发团队一般可以划分为项目负责人.程序员.美工三个角色. 项目负责人习惯称为项目经理 ...

  10. 软件开发,web开发和应用程序开发的区别?

    软件开发: 软件开发是开发软件产品的过程,涉及分析用户的需求,然后设计.测试和开发软件以满足用户的这些需求或要求.软件是使用特定的编程语言开发的,这反过来又提高了业务质量.  Web开发: Web开发 ...

最新文章

  1. NC45实现二叉树先序、中序和后序遍历
  2. CodeForces - 55D Beautiful numbers
  3. php读取文件和读取redis,PHP结合redis实现大文件去重
  4. php云点播源码,乐视云直播 点播服务端api
  5. 文件方式实现完整的英文词频统计实例(9.27)
  6. 手机出货量暴跌!00后4年没换手机:除了贵、穷还有别的原因...
  7. java 判断ip和port是否存活_java判断IP和端口号是否可以访问
  8. C++之父谈C++:一天之内你就能学会出色使用C++
  9. python怎么存为动图_Python将视频或者动态图gif逐帧保存为图片的方法
  10. RIP实现等开销负载均衡的配置
  11. error: stray '\357' in program
  12. OpenCV与机器视觉
  13. Redis内存回收机制(Redis 过期策略、淘汰策略)
  14. win7没有权限使用计算机的,Win7提示你可能没有权限使用网络资源|未授予用户在此计算机解决方法...
  15. Python 以正弦信号绘制信号
  16. 微软报表工具服务器版本,Report Builder 3.0
  17. Linux系统安装,教你安装一个属于自己的Linux系统
  18. Unity3D面经以及我个人对游戏研发学习路径的一些理解
  19. 本地计算机出现多个网络连接,电脑网络连接出现感叹号?教你一招解决
  20. Linux定时器描述符(timerfd)shiy

热门文章

  1. jspstudy启动mysql失败_linux系统mysql服务启动失败
  2. 118_网络编程_对IP、网络ID、主机ID、子网掩码、点分十进制的理解
  3. python 调用海康linux下psdatacall_demo,实现获视频取码流并返回到python,以及上传信息到人脸库的方法
  4. 搭建直播系统并实现h5播放rtmp
  5. yjk计算书_用户手册
  6. 普通话-汉语拼音字母表
  7. 深度学习(花书)+动手学深度学习(李沐)学习资料整理
  8. 易语言列表框防止项目重复加入列表框
  9. Java常用框架有哪些?
  10. .Net Core Nopi 工具的使用