深入理解BS结构应用程序

随着学习的深入,和编程经验的丰富,对BS应用程序有一些认识。

 

  在一些讨论软件技术的QQ群里,或一些社区、BBS中,经常会有一些初学者会犯一些认知性的错误。比如经常会有一些朋友提这样的一些问题:“我怎么在ASP中调用我写的这个JavaScript函数啊?”或者说“我怎么在JavaScript中调用我DAL层读取数据的方法啊?”

 

  对于这些问题,说实话,我也犯过,当时也纠结的不得了。现在想想,其实是对BS结构的程序没有一个整体的概念,或者可以说根本不知道什么叫BS结构的应用程序。因此,学习过程中会走不少弯路,经历不少痛苦。

 

  经过这几年的学习,有一些心得经验,和大家分享一下。

 

  要理解BS这个概念,必需要从BS应用程序的起源说起。

 

  BS应用程序又称Web应用程序。其实最初Web并不是应用程序,它只是一种服务,一种共享信息的服务。

 

  Web是什么,是网,是网络。最早的网络只是提供了一种下载并打开远端页面文件的一种服务,人们可以通过远程计算机中的地址和文件保存的路径来查看该计算机中共享的文件。这些文件通常是一页页的文本内容,在网络中访问它的那个路径称为Uniform / Universal Resource Locator(URL,统一资源定位符)。

 

  后来人们在页面中加入了超链接,使浏览者可以很方便的访问其它相关的文件资源。这样,从感观上我们访问的网页由一页变成了很多页,也就更奠定了“Web Page(网页)”这个名称。

 

  随着Web的发展,网页中加入了图片、动画、声音、视频等多媒体元素,这些东西超出了文本的概念,并且出现了一种标记语言来规范这些页面中的元素,使之更加合理的显示在用户的屏幕上。所以,这种语言就被人们称之为HyperText Mark-up Language(HTML,超文本标记语言),这种文件的扩展名为html或htm(还有其它如shtml的延生品)。而专门解悉这种语言,给用户展示完美的网页内容的程序,就被称之为浏览器。

 

  后来,人们发现,随着页面内容的丰富,有时候很多页面中的结构是完全相同的,只是内容不同而已。这样如果提供很多的网页文件,不仅浪费计算机硬盘空间,也非常不容易维护。所以就有人想出在远端计算机(Web服务器)中动态生成网页的方法来解决这个问题。这样就可以在硬盘中保存一份有共同页面结构的网页,在用户请求查看某个信息的时候,Web服务器根据用户请求的文件地址(URL),解悉并生成一份最终的页面内容,回传给请求者,请求者接收到以后就像普通文件一样获取并打开它。

 

1 //(注:这些动态生成网页的技术,最早的有CGI,后来出现ASP,PHP,JSP,ASPX等等)

 

1 /*
2 (注:在这里,要特别强调的一点,也就是每一个BS结构应用程序开发人员要牢记的是:
用户(请求发送者,或者称为浏览器、客户端)向远程计算机请求,
请求的永远是文件资源(后来出现的Ajax技术可以获取一段文本),
可以是网页文件、图片文件、动画文件、声音文件等等)
3  */

 

  至此,对于用户来说页面内容也非富了(有了多媒体),对于服务器来说页面也可以动态生成了(更易于管理)。但美中不足的是:虽然有了非常酷的页面效果,但对用户交互方面的元素太少。人总想主动的控制一些优秀的东西,而这样的网页除了点击超链接,我们不能对它进行其它更多的操作。

 

  这似乎是点缺憾,但对于充满智慧的劳动人民来说,这并不是什么问题。网页开发人员研究了一种可以供浏览器解释执行的脚本代码(脚本代码种类非常多,最为典型的是JavaScript),这些代码可以做为页面的内容直接写到网页文件中,也可以做为类似图片一样的外部资源被页面引入执行。

  

 

  有了这些页面脚本,我们的Web即刻变得炫丽起来。我们可以像普通的WinForm程序一样,使用鼠标在页面中执行单击、双击、拖放等操作(随着这些操作,衍生出来许多的浏览器事件)。

 

  如此,我们的BS应用程序的整个技术体系就变的完美了。

 

  在整个BS应用程序的发展过程中,上面提到的各个相关技术都充当着一个功能明确的独立模块。这一切都围绕着“使用户能远程获取信息”这一主线。服务器使用动态网页程序生成不同内容的Web页面,并提供相关的图片等页面外部资源;HTML是为了链接外部资源,并标记如何组织页面中的元素;浏览器负责请求服务器获取网页内容以及与之相关的其它外部资源文件,解悉页面结构,并将获取到的内容(文本内容或多媒体内容)组织起来,更加美观的呈现给用户;页面中的脚本程序是做为页面的辅助内容保存在页面中,在适时的时候响应用户的操作,执行一些浏览器内的动作。

 

  下面我们来看一下浏览器对服务器进行一次请求的整个过程演示图:

 

 

 

1.  首先浏览器请求服务器

2.  服务器接收到浏览器的请求

3.  服务器解悉浏览器请求的URL,根据URL确定请求的目标资源文件。这个资源文件通常是一个动态页面(如ASP,PHP,JSP,ASPX等文件)的网络地址(MVC结构的程序例外)。Web服务器根据动态页面文件的内容,和URL中的参数,调用相应的资源(数据库或文件)组织数据,生成HTML页面。(注意这里生成的是一个HTML文档,里面可能包含JavaScript代码等,这里在服务器端不管HTML文档里的具体内容)

4.  生成HTML文档以后,服务器响应浏览器的请求,将生成的HTML文档发送给浏览器

5.  浏览器接收请求得来的HTML文档

6.  浏览器对HTML文档进行解悉,并请求相关的资源文件(JS,CSS,多媒体资源,内嵌网页)等。(在这里浏览器解悉完HTML文档以后,就会进行呈现,但同时也会向服务器发送请求来请求其它相关的资源文件)

7.  服务器接到浏览器对资源文件的请求以后,将相应的资源文件响应给浏览器

8.  浏览器接收到请求来的资源文件,整理并呈现到页面中

9.  在进行页面呈现的时候,浏览器会从上到下执行HTML文档,当遇到相应的页面脚本的时候,会对脚本进行分析,并解释执行相应的脚本代码

 

  其实在第6步以后,我们就可以看到一部分页面内容了,不过可能是纯文本内容,没有样式,没有图片或其它资源。待到浏览器请求得到某资源的时候就会进行组织呈现。直到整个页面显示完成。

 

  不过最后我们要重点理解的是,在服务器端,HTML是做为一个文本文件进行处理的,包括HTML中的脚本,都被服务器端程序视之为文本。到浏览器中,呈现HTML时执行JavaScript脚本程序,就纯粹是一个独立的的小程序了,程序的运行边界是浏览器,也就是说它不可能超越浏览器运行。而浏览器和服务器之间交互就只能使用“请求”+“响应”的模式进行,Web开发中的异步交互技术Ajax也是使用该模式与服务器传递信息的。

 

  扯蛋一句:服务器和浏览器理论上是在两台不同的计算机中运行的,所以它们不可能共享内存中的变量或者方法。而且他们根本就不是同一时间运行的,所以也不可能共享这些数据。

 

 

转载于:https://www.cnblogs.com/zourui4271/p/4922952.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS中的Datepart函数使用方法

ArcGIS中系统提供的Datepart()函数 功能:返回一个包含已知日期的指定时间部分 用法:DatePart(interval, date)

mysql 未找到命令_MySQL主从复制配置说明,一文教你搞懂数据库主从复制

一,MySQL主从配置原理1. mysql支持的复制格式基于语句复制(STATEMENT)(优点)基于statement复制的优点很明显,简单的记录执行语句同步到从库执行同样的语句,占用磁盘空间小,网络传输快,并且通过m…

.NET 5.0即将不再提供服务更新,请升级到.NET 6.0

5 月 8 日更新之后,微软将不再为 .NET 5.0 提供服务更新,包括安全修复或技术支持,用户需要将 .NET 版本更新到受支持的版本 (.NET 6.0 ) 才能继续接收更新。.NET 5.0 不是 LTS 版本,因此将在发布 18 个月或下一个版本发布后的 6 个…

关于PHP默认Expires: Thu, 19 Nov 1981...的故事

为何PHP不设置Expires头的时候, 默认输出如下的缓存头呢?: Expires: Thu, 19 Nov 1981 08:52:00 GMT 答案来自stackoverflow : Its an attempt to disable caching. 这是用于尝试禁用浏览器缓存PHP请求的 The date is the birthday of the developer Sascha Schuman…

认识与入门:Markdown

原文:http://www.jianshu.com/p/22ba695a7ce3 Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用。看到这里请不要被「标记」、「语言」所迷惑,Markdown 的语法十分简单…

Android之图片边显示模糊原因

1、问题原因 今天迁移代码的时候,发现有些图片是.9.png格式,但是代码上又没这个9,我一开始以为这个9是这个图片名字里面的,不知道有.9.png格式的图片,后面百度了下,才发现有这种类型的图片格式&#xff0c…

ArcGIS中实现将圆16等分

步骤一:生成圆(多边形图层) (1)创建一个点图层(图名Center),如果需要精确定位该点,建议通过输入坐标点的方式来创建,这一步比较简单,不再详述; (2)利用Buffer命令创建缓冲区(图名Circle_2km),因为要处理的对象是点图层,其缓冲区就是

游戏开发Camera之Cinematic Camera-深度

人的视觉系统是二维的,它通过生理和心理的暗示来感知图像的深度,在现实世界中视觉系统会自动用深度线索depth cue来确定对象之间的距离游戏画面也是二维的,用x,y轴来定义,画面深度用z轴来定义,可以通过创造…

500w 的引用类型和值类型到底有多大差异?

大家在写代码的时候,相信有很多朋友对 struct 认知不是很足,导致能用 class 的地方绝对不用struct,但大家有没有发现,最近的几个 C# 版本中,底层框架中有很多 class 的替代品,比如说:Task 和 Va…

list对象排序

在数据库中查出来的列表list中,往往需要对不同的字段重新排序,一般的做法都是使用排序的字段,重新到数据库中查询。如果不到数据库查询,直接在第一次查出来的list中排序,无疑会提高系统的性能。 只要把第一次查出来的结…

【转】HTML5移动端最新兼容问题解决方案

1、安卓浏览器看背景图片,有些设备会模糊。 用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢?经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网页&a…

一天不编程,脑子比猪笨

一天不编程,脑子比猪笨;一周不编程,爪爪变猪蹄。

hibernate注解方式来处理映射关系

在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方…

linux之vim复制多行、光标跳转到指定行、插入当前光标上和下行

1、复制多行 number yy 2、光标跳转到指定行 :line 3、插入当前光标到上行 O 4、插入当前光标到下行 o

提的最多的数据库“索引”,先来简单了解一下

前言现在的项目对于数据库操作基本上都是使用封装好的ORM框架,这样开发效率相对来说有所提高。但由于框架的封装,会自动生成SQL语句,这让一些小伙伴对SQL产生了一种陌生感(基本不写SQL),导致排查业务执行缓慢问题时比较盲目&#…

【个人阅读】软件工程M1/M2阶段总结

这次作业是好久以前布置的,由于学期末课程设计任务比较重,我在完善M2阶段的代码的同时又忙于数据库的实现和编译器的实现,一度感觉忙得透不过气来。。。。到这些都基本完成的时候,会看自己以前的阅读心得,觉得经过了M1…

Excel实用函数大全(名称、功能、说明、用法、举例)

我们在使用Excel制作表格整理数据的时候,常常要用到它的函数功能来自动统计处理表格中的数据。这里整理了Excel中使用频率最高的函数的功能、使用方法,以及这些函数在实际应用中的实例剖析,并配有详细的介绍。 1、ABS函数    函数名称:ABS    主要功能:求出相应数字…

DB2 SQL 递归实现多行合并

最终效果 原始数据: 转换脚本: WITH post_a AS ( SELECT DISTINCT T.EMP_NO,S.CODE_ FROM inscndb.DTFMA000_EMP_POST T ,VIEW_BI_POST S WHERE T.POST||-||POST2 S.POST ), post_b AS (SELECT emp_no,code_,ROW_NUMBER() OVER(PARTITION BY EMP_NO ORD…

C++之greater和less

1、greater、 less 他在头文件<functional>里面, greater和less都重载了操作符 定义如下: // TEMPLATE STRUCT greater template<class _Ty> struct greater : public binary_function<_Ty, _Ty, bool> { // functor for operator>bool operator()(cons…

mysql逻辑结构设计_数据库设计:逻辑结构设计

概念结构设计所得的E-R模型是对用户需求的一种抽象的表达形式&#xff0c;它独立于任何一种具体的数据模型&#xff0c;因而也不能为任何一个具体的DBMS所支持。为了能够建立起最终的物理系统&#xff0c;还需要将概念结构进一步转化为某一DBMS所支持的数据模型&#xff0c;然后…