从动态网页的本质说起(一)
来源:互联网 发布:中航证券交易软件下载 编辑:程序博客网 时间:2024/05/21 16:20
现在的 Internet 上漫天遍野都是动态网页了,学做网页,也绝对逃不过学习动态网页的制作。不过,我发现一些学习网页编程的朋友们在一些基本的问题上,没有真正明白,至使他们经常在思考问题的时候走错了方向。我想有针对性的,向大家做些解释,也算为动态网页澄清一些事实。
动态网页内部有两个时空
其实我是想说,动态网页内的服务器端和客户端存在于两个时空内——这是最根本的一个问题,有的人可能会觉得我小题大做。可就是因为我发现太多的初学者并不理解这一点,而这一点又是理解其它一切的基础,因此不得不先重点说说。
首先说静态的网页,我们可以简单地理解为 HTML 文件,它包含了要显示在界面上的元素,也包含了一些 JavaScript 脚本程序。当用户输入一个网址的时候,浏览器会向那个网站的服务器发送一个请求(Request),然后服务器将作出响应(Response),将网页内容发送给用户的计算机,浏览器一边下载网页一边将其显示出来,而网页中包含的 JavaScript 也于此时在客户计算机中的浏览器里运行。于是,用户看到了丰富多彩的网页内容。
现在静态的人们觉得不够用了,就出现了动态网页技术。它是在服务器接受请求和作出响应之间做文章。我以比较有代表性的 ASP 为例。一个 ASP 页面,不但包含了正常的 HTML 页面代码,还增加了很多服务器脚本(通常是 VBScript)。它的整个流程要比静态网页复杂一些:
1. 客户端发送请求:用户输入一个网址,客户机向网站服务器发送一个请求
2. 服务器端运行:服务器发现客户端请求的是一个 ASP 页面,于是运行 ASP 中的服务器端脚本,也就是“<%”和“%>”之间的部分。ASP 页面运行的结果是一个静态 HTML 页面
3. 服务器作出响应:服务器再将这个临时生成的静态页面发送到客户端。
4. 客户端下载页面:虽然客户浏览器的地址栏里显示的还是 ASP 文件的地址,但是它得到的却已经是经过服务器运行处理的结果静态页面。
5. 客户端运行脚本:这个静态页面中仍然有可能包括 JavaScript 脚本,它是在客户的浏览器中运行的。
服务器端脚本(在 ASP 中通常指 VBScript)是运行在网站服务器上的,而 HTML 代码和客户端脚本(通常是 JavaScript)是运行在客户计算机上的。一定要清楚这一点:它们是完全独立的!它们互相并不知道对方的意义,对于服务器来说,它只专注于“<%”与“%>”之间的服务器端脚本程序,它只负责运行它们,并把结果放回原地,与其它普通的 HTML 代码和 JavaScript 程序排列在一起,成为它们的一部分。
而对于用户的浏览器来说,它得到的网页中已经早已没有了服务器端的脚本,因为在此之前,那些脚本已经被服务器执行完了。浏览器看到的是一个干干净净的 HTML 页面,它只需要专心地显示这个页面,运行其中的 JavaScript 即可。
所以,服务器端脚本要想和客户端脚本直接交换数据是不行的,它们虽然写在同一个页面里,却是完完全全处于两个时空之中,运行不到一起。
动态网页其实是一个服务器“函数”
这个说法也许陌生一些了,这是我对动态网页的一个认识,如有雷同,纯属巧合。先再来看看动态网页的流程,这个流程我简化了一些,并考虑了它前后的网页关系:
1. 客户正在浏览网页 A,单击链接或者提交按钮,转向动态网页 B。此时,浏览器会将用户填写的一些信息包含在对动态网页 B 的“请求”中一起发送给服务器。
2. 服务器收到请求,分析其中的信息,并运行动态网页 B 的服务器端脚本部分,生成结果 HTML 页。
3. 服务器将结果 HTML 页作为响应发送给客户端。客户端显示这个网页。
我来仔细地分析一下。前一个网页在转向后一个动态网页的时候,会提交一些信息,比如我们常见的这种地址“http://www.abc.com/index.asp?id=
所以,动态网页的整个流程,就像是一个远在服务器端的函数,只不过它的调用方法非常特别罢了。
- 从动态网页的本质说起(一)
- 指针的本质(一) 从CPU的位数说起
- 从Android的aidl调用说起(一)
- 一、一切从指数的扩展说起
- 从linux内核启动说起(一)
- 从 setContentView 开始说起(一)
- 从汇编角度分析C语言的本质(一)
- 从一本书说起
- 从我的第一个Flex应用说起(一)——开篇
- 代码之谜(一) - 有限与无限 (从整数的绝对值说起)
- 【转】代码之谜(一) - 有限与无限 (从整数的绝对值说起)
- 从EMFILE和ENFILE说起,fd limit的问题(一)
- 代码之谜(一)- 有限与无限 从整数的绝对值说起
- View的工作原理(一)——从ViewRoot和DecorView说起
- 【转载】代码之谜(一)- 有限与无限(从整数的绝对值说起)
- 项目评估与计划(一)- 从建筑工程说起
- [Win8]Windows8开发入门(一):从HelloWorld说起
- SpringMVC源码剖析(一)- 从抽象和接口说起
- C# 2.0 新迭代器分析
- C/C++ 程序设计员应聘常见面试试题深入剖析
- 网店系统参考网站
- C# 2.0 局部类型、空属类型、静态类
- 无限子类,无限菜单的算法
- 从动态网页的本质说起(一)
- when you tell me that you love me当你说爱我时(中文版)
- c#操作XML(读XML,写XML,更新,删除节点,与dataset结合等)
- .Net环境下基于Ajax的MVC方案
- WEB页面 中文正确传递和显示
- 在DOS下看字符星球大战
- AutoCad二次开发:ObjectARX技术谈
- SQLite内建语法表
- 如何将图片上传到文件夹