动态网页的本质是?
动态网页的本质是?
现在的 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=
所以,动态网页的整个流程,就像是一个远在服务器端的函数,只不过它的调用方法非常特别罢了。