作者:朱金灿
来源:http://blog.csdn.net/clever101
说实话写这篇文章超出了我的能力范围之外(因为我并没有多少Web开发经验),我所期待的是能起一个抛砖引玉的作用——希望高手来指出我的错误,让我也学到正确的知识。之前我一直在思考这样一个问题:一个网站的前台和后台是如何进行数据传递的呢?即前台如何把用户的输入传递给后台,后台又是如何把处理结果发送回前台,比如你登录google网站,输入一个关键字,google网站如何把你输入的关键字传递给后台,然后后台根据你输入的关键字经过处理后得到搜索结果,又是如何把搜索结果发送回前台从而呈现给用户面前的呢?
今天向一个同事抛出了这个问题,感到大致明白了这一过程。B/S系统其实也是采用传统的分层架构的,分为不同的层次,需要不同的语言来配合开发的。我把网站开发所需要的语言归纳为下表:
层次及开发语言 |
功能 |
备注 |
静态页面层,开发语言语言:html |
描述网页元素,就是你所看到的网页的样子 |
|
脚本逻辑层,开发语言:Javascript或Jscipt等 |
客户端的一些简单的逻辑处理,比如输入验证等 |
|
事务处理层,开发语言:C#、Java和php等 |
服务器端的事务逻辑处理 |
|
后台处理层,开发语言:C/C++等 |
服务器端的后台数据处理 |
不是所有的B/S系统都有这一层 |
一个人从登录网站输入数据到看到处理结果是这样一个流程呢?它大致是这样的:
看完上面的流程图,可能你和一样还有很多疑问:
比如,为什么需要Javascript或Jscipt这一层,直接把用户输入的数据直接提交给服务端处理岂不是更省事吗?这是因为服务器端的计算资源是很宝贵的,比如你输入一个E_mail地址,它的格式是否正确就完全可以在客户端的Javascript这一层进行判断,何须劳烦服务器端呢?这样做是为了减轻网络负担和服务器端的负担。
比如html网页是如何和C#、Java和php编写的代码绑在一起的呢?原来html网页可以指定C#、Java和php的编写的处理代码文件(jsp、php之类的)。
比如C#、Java和php编写的处理程序又是如何把用户数据传递给由C/C++编写的服务器后台处理程序的呢?方式有很多种,假如是Windows服务器的,可以考虑进程内的调用COM组件(这样做的优点是方便传输数据,缺点是安全性不好,比如容易遭受到缓冲区攻击之类的),也可以进程间调用,比如用shell命令直接起一个进程(优点是调用方便,缺点是比如linux服务器的话需要一定的授权)。也可以采用网络通信的方面,比如Java这边起一个socket,C/C++这边起一个socket接受数据进行处理。
比如C/C++编写的服务器后台处理程序又是如何把处理结果送回前台的呢?网站早存在一个空的处理结果页面,C/C++编写的服务器后台处理程序可以把处理结果填充到这个处理结果页面中。至于如何填充的细节还有待研究。