随着学习的深入,和编程经验的丰富,对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也是使用该模式与服务器传递信息的。

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

深入理解BS结构应用程序的更多相关文章

  1. 什么是CS和BS结构,两种结构的区别

    什么是CS和BS结构,两种结构的区别 什么是C/S和B/S结构?         C/S又称Client/Server或客户/服务器模式.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系 ...

  2. Java和.Net在做BS结构项目的比较

    渊源: Java的J2EE在1999年形成了其成熟的架构,并且到今天已经有相当成熟的经过检验的企业应用系统.而.Net究其渊源是源自微软以前开发企业应用程序的平台DNA(DistributedNetw ...

  3. Android开发第一讲之目录结构和程序的执行流程

    1.如何在eclipse当中,修改字体 下面的这种办法,可以更改xml的字体 窗口--首选项--常规--外观--颜色和字体--基本--文本字体--编辑Window --> Preferences ...

  4. 网络应用软件结构-----CS与BS结构(网络基本知识小结)

    1.网络的大致结构 2.网络编程 通过直接或间接地使用网络通讯的协议实现计算机与计算机之间的通讯.在TCP/IP协议层主要麦网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的 ...

  5. [Python学习笔记][第八章Python异常处理结构与程序调试]

    1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...

  6. NET5实践:项目创建-结构概述-程序运行-发布部署

    ASP.NET5实践01:项目创建-结构概述-程序运行-发布部署   1.项目创建 ASP.NET5项目模板有三种: 新建项目: 选择模板: 2.结构概述 References对应配置是project ...

  7. 更加清楚理解mvc结构

      更加清楚理解mvc结构 文章来源:刘俊涛的博客 地址:http://www.cnblogs.com/lovebing 欢迎关注,有问题一起学习欢迎留言.评论.

  8. 1.cs与bs结构

    ####CS 与 BS 结构 C/S 结构软件:客户端(Client)服务器(Server)软件,客户端需要单独下载安装之后,才能正常操作的软件 B/S 结构软件:浏览器(Browser)服务器(Se ...

  9. 01_什么是BS结构,什么是CS结构?

    C/S和B/S都是互联网中常见的网络结构模型. 一.什么是C/S模型? C是英文单词"Client"的首字母,即客户端的意思,C/S就是"Client/Server&qu ...

随机推荐

  1. JPA调用函数

    criteriaBuilder.function("udf_get_cc_userright", Integer.class, criteriaBuilder.literal(se ...

  2. Spring/AOP框架, 以及使用注解

    1, 使用代理增加日志, 也是基于最原始的办法 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; ...

  3. leetcdoe 175. Combine Two Tables

    给定两个表,一个是人,一个是地址,要求查询所有人,可以没有地址. select a.FirstName, a.LastName, b.City, b.State from Person as a le ...

  4. ubuntu14.04安装opengl

    OpenGL 是一套由SGI公司发展出来的绘图函式库,它是一组 C 语言的函式,用于 2D 与 3D 图形应用程式的开发上. 不可或缺的就是编译器与基本的函式库,如果系统没有安装的话,依照下面的方式安 ...

  5. oracle基本查询入门(二) 子查询

    一.子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table); 子查询在主查询之前 ...

  6. linux用户和组2

    1.用户相关命令 su 切换用户 root -> 普通用户 不需要密码 普通用户之间 需要密码 普通用户->root 需要密码 newgrp 切换组身份 whoami 查看当前登录名称 i ...

  7. 记录java版本不兼容的坑,(kafka运行报错)

    启动kafka报错 错误原因是: 由较高版本的jdk编译的java class文件 试图在较低版本的jvm上运行的报错 解决办法是: 查看java版本 C:\Users\Administrator&g ...

  8. BZOJ 1211[HNOI2004]树的计数 - prufer数列

    描述 一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, …, dn,编程需要输出满足d(vi) ...

  9. Codeforces 665A. Buses Between Cities 模拟

    A. Buses Between Cities time limit per test: 1 second memory  limit per test: 256 megabytes input: s ...

  10. 淘宝、天猫又开源了一个动态化、高性能的UI框架

    前言 淘宝.天猫一直致力于解决 页面动态化的问题 在2017年的4月发布了v1.0解决方案:Tangram模型 及其对应的 Android库 vlayout,该解决方案在手机淘宝.天猫 Android ...