深入理解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也是使用该模式与服务器传递信息的。

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

时间: 2024-11-09 09:02:58

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

BS结构下如何开发跨web浏览器的IC卡读卡器程序

在BS结构的程序中,如何开发出跨web浏览器的IC卡读卡器程序呢? 一般来说在BS结构的程序中使用物理硬件会有很多的限制,通过activex技术解决的ocx控件只能在IE上使用,不能在chrome和firefox中使用.友我科技提供的RFID读写器云服务彻底解决了这个问题,他不仅可以在IE使用,也可以在chrome,firefox等浏览器上使用. 友我科技rfid读写器云服务的优势:1.该系统在单机,局域网,互联网都可以使用,只要客户端安装云服务程序就行.2.客户端同时支持net frame3.

BS结构程序网页打印

JS实现控制打印BS结构程序中简单票据页面 <body style="background-color:white" > <object id="WebBrowser" classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" height="0" width="0"> </object> <span id="

面向处理器结构的程序优化

近两年从同事那里学了不少代码优化方法,在此总结一下. 面向处理器结构的优化可以从以下几个方向入手:缓存命中,指令预测,数据预取,数据对齐,内存拷贝优化,ddr访问延迟,硬件内存管理优化,指令优化,编译器优化等级以及性能描述工具. 缓存未命中是处理器的主要性能瓶颈之一.在FSL的powerpc上,访问一级缓存是3个时钟周期,二级是12个,3级30多个,内存100个以上.一级缓存和内存访问速度差30多倍.我们可以算一下,如果只有一级缓存和内存,100条存取指令,100%命中和95%命中,前者300周

PHP编写网页BS结构计算器

利用PHP和Html + javascript 编写一个简单的网页计算器程序,可以根据这种有趣的开发构架出更加有趣的网页. ?1. [代码]PHP计算器 <html><head><title>caculator</title></head> <body><form name="myform" method="POST"><tr><script language =

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

ASP.NET5实践01:项目创建-结构概述-程序运行-发布部署 1.项目创建 ASP.NET5项目模板有三种: 新建项目: 选择模板: 2.结构概述 References对应配置是project.json中: "frameworks": { "dnx451": { }, "dnxcore50": { } }, ASP.NET5开发时支持多版本的clr共存,但运行时是使用其中一种. dnxcore50是跨平台.模块化的coreclr.它有多种,如

生成pgsql表结构的程序

//前台代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xht

通俗易懂理解JVM结构

通俗易懂理解JVM结构 说明:本篇内容是结合网上各位大牛的关于JVM的文章,通过作者的理解,希望以一种比较易懂的方式,让各位朋友们理解JVM到底是怎么一回事儿,其中部分图片和内容引用来自于网络,如有雷同,请见谅~~ 一.JVM内存区域模型是啥样? 这个是JVM大致的内存分布模型,看起来比较直观: 这个是更精细化的JVM内存模型,区别主要是方法区和堆是公共内存区,其他是私有的: 1.方法区: 也称"永久代" ."非堆", 它用于存储虚拟机加载的类信息.常量.静态变量.

深入理解UIApplication和ios程序启动过程

在深入理解UIApplication前我们先了解ios程序的启动过程: UIApplication类在ios里面为app的管理和协调提供一个集中的点,每一个app有一个UIApplication的实例,当app启动时,系统会调用main函数里面的UIApplicationMain函数,该函数会创建一个UIApplication的实例,设置run loop,启动info.plist里面指定的main.storyboard,加载UIview.

【转】《深入理解计算机系统》C程序中常见的内存操作有关的典型编程错误

原文地址:http://blog.csdn.net/slvher/article/details/9150597 对C/C++程序员来说,内存管理是个不小的挑战,绝对值得慎之又慎,否则让由上万行代码构成的模块跑起来后才出现内存崩溃,是很让人痛苦的.因为崩溃的位置在时间和空间上,通常是在距真正的错误源一段距离之后才表现出来.前几天线上模块因堆内存写越界1个字节引起各种诡异崩溃,定位问题过程中的折腾仍历历在目,今天读到<深入理解计算机系统>第9章-虚拟存储器,发现书中总结了C程序中常见的内存操作有