当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 动态网页原理/.net面面观

ASP.NET
asp.net GridView控件中模板列CheckBox全选、反选、取消
asp.net GridView 删除时弹出确认对话框(包括内容提示)
asp.net DropDownList 三级联动下拉菜单实现代码
asp DataTable添加列和行的三种方法
Asp.net 页面调用javascript变量的值
asp.net 长文章通过设定的行数分页
asp.net 定时间点执行任务的简易解决办法
asp.net 页面延时五秒,跳转到另外的页面
asp.net 动态输出透明gif图片
asp.net DataList与Repeater用法区别
asp.net Javascript获取CheckBoxList的value
asp.net程序在调式和发布之间图片路径问题的解决方法
asp.net下生成英文字符数字验证码的代码
asp.net 页面版文本框智能提示JSCode (升级版)
ASP.NET URL伪静态重写实现方法
ASP.NET 2.0 中Forms安全认证
asp.net 动态添加多个用户控件
asp.net Repeater显示父子表数据,无闪烁
asp.net 无法获取的内部内容,因为该内容不是文本 的解决方法
asp.net GridView排序简单实现

ASP.NET 中的 动态网页原理/.net面面观


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 72 ::
收藏到网摘: n/a

一、        序言
    不知从什么地方开始才好,所以还是以闲聊作为开场。

首先很高兴得到大家的支持,更高兴可以遇到这么多志同道合的朋友,愿我们可以共同学习,共同进步。正所谓学无先后,达者为师,在讲解的过程之中,如有错漏之处,还请指正。

其次,恭喜你选择WEB应用开发,成为一名WEB应用开发工人,看“工人”一说,我们都不是合格的程序员,勉强算的上一名IT产业工人。

程序员也有等级,工人、工匠与大师。工人就是这条流水线上最原始的代码复制者,不知疲倦的复制与组合代码。工匠已经提升了一个等级,编程是一种艺术,工匠已经可以操纵这种艺术,他们可以让程序更精练,更维美。大师站在顶端,他们是创造者,他们了解每一个细节,可以创造规则。

如果编程学习是一座山,工人就站在山脚,工匠站在山腰,大师站在上顶。我自认为刚到山脚,你呢?让我们一起向成为大师努力吧。

最后给出一点建议,不要以为WEB应用开发很简单,即使是网站开发也不简单。如果只简单的对比WINFROM开发(通俗的理解就是软件开发)与WEB应用开发(通俗的理解就是网站开发),前者需要特别的深度,无论ERP,还是游戏开发都好,都需要对技术很深的掌握。后者需要特别的广度,WEB由各种技术综合而成,如果只是简单的掌握某种编程语言或方法,是肯定不行,只有多种技术相结合才能为用户提供更好的用户体验。

闲话不多说,我们现在就开始。

二、        从HTML说起
1.        HTML的起源
首先从印刷术说起,自从印刷术发明,一些作家就会在手稿上做一些注释以便指导印刷
工人进行排版,尤其以法国大革命时期的巴尔扎克为甚,他的文稿经常圈涂更改写满注释,所以只有特定的印刷工人才会明白他所做的标记,不得以他值得付更多报酬给印刷工人,以免遭遇罢工(以前当当买书,被送了104册儿童版名人传记,就记住了,汗)。这样的注释就称为标记,它是一种特别的约定。SGML(Standard Generalized Markup Language,标准同用标记语言)就是这样的标记语言。
   
    计算机显示与印刷行业的排版有类同之处,都是储存信息,传递信息,排列显示,所以1989年3月,在欧洲粒子物理研究所,即CERN,Tim Berners-Lee提出一项计划,目的是使科学家们能很容易地翻阅同行们的文章。此项计划的后期目标是使科学家们能在服务器上创建新的文档。为了支持此计划,Tim创建了一种新的语言来传输和呈现超文本文档。这种语言就是超文本标注语言HTML(Hyper text Markup Language)。
HTML是SGML语言的具体应用,比SGML更为简单,它是以对称结构化的笔记为“注释”以告知意义,这样就形成了我们所见到的网页,而排版工人就是计算机。所以我们所见到网页主体就是由HTML标记和他所包含的内容组成,执行者与解释者就是浏览器这个软件程序。

2.        客户端与服务器
    我们这里所说的客户端就是指浏览器,它可以帮助你制作一个请求,并将这个请求发送给另外一台计算机(服务器),服务器里有一个程序就像望夫石,它一直在那里等待,当它发现某个客户端的请求时,他会接受请求,并验证这个请求的合法性,如果合法,他针对以某个程序为基础,对数据进行处理,接着他会将程序中需要返回的信息连同指定的HTML标记一起返回给客户端,客户端收到返回信息后就会解释、排列、显示;

3.        从HTML到XML
随着网络的发展,HTML已经不能满足多数需要,HTML被不断的修改,从1.0版本到现
现在的4.0版本,但是由于HTML将显示格式与数据一起存储与传输,它就无法适应更多的需要,例如手机由于种种局限无法解释HTML中的显示格式,而需要的只有数据,人们于是追本溯源,从新以SGML为基础开发出另一种标记语言即XML 。

    XML并不描述如何显示,它的标记(注释)是用来描述数据信息,包含的是数据,它可以在各设备与各平台中相互传递,因为它是无格式的,当某一程序接收到XML文件时,这个程序会按照被一起传输过来的显示描述文件,对其解释显示,或者根据程序自带描述进行解释显示,或者仅仅将它当作数据接收。可以描述显示的技术有MAXL,XLST,CSS等。

    XML内容远远不止这些,以后还会深入学习;

4.        从HTML到XHTML
管理HTML XML标准的组织(W3C)认为HTML由于其简单化造成它的局限,HTML必然要
向XML过度,但由于XML虽然数据转换能力强大,完全可以替代HTML,但面对成千上万已有的站点,直接采用XML还为时过早。所以制定了一种中间过度型语言即XHTML。

    XHTML是The Extensible HyperText Markup Language可扩展标识语言的缩写。目前推荐遵循的是W3C于2000年1月26日推荐XML1.0,是在HTML4.0的基础上,用XML的规则对其进行扩展得到。

    虽然XHTML看起来比较高层一些,但它可以说是HTML4.0的升级版本,即4.01,我们在ASP.NET开发中要接触到的是XHTML1.1 profisnal 标准,它是在HTML基础上更好的结合CSS,更严格的定义。

5.        看看javascript
javascript是一种脚本语言,就像HTML一样被输出至浏览器中,运行于客户端,而不
是运行于服务器端,它对网站开发起到一些补充作用,可以于浏览器中运行,既在页面浏览者的计算机上(准确的说是浏览器里)执行一些简单操作,例如检查验证、控制浏览器中某单元的显示等。

    微软在IE浏览器中内置一个程序模块-XMLREQUESTHTTP,它可以被javascrit调用,并进行后台处理,而不必改变浏览器中显示,这样就可以利用它与javascript结合隐藏处理与服务器端相互通讯,而不必改变页面显示,实现数据、表单提交,而整体页面不会被提交至服务器,页面不会被刷新,这就是最近热火的AJAX开发技术。

    Javascript 并不难,复杂程度有限,对于简单开发掌握4-10条语句即可,所以不必担心。

6.        关于以上
以上5点我们称为客户端技术,也就是被浏览器接收,解释,执行,显示。虽然客户端
技术还有很多,以上是最为关键,也是我们教程中需要用到的技术。这些技术又被称为静态技术,他们的元素是构成网页显示层面的要素,所以我们接收到的都是这些静态要素,都是可以被浏览器读懂并解释的。而我们接收到的这些静态要素是由服务器传递过来的,服务器通过执行、解释某个程序,并最终讲运行结果与原有动态页面中的HTML,一起制成静态格式文件传递给客户端,客户端接收,解释并显示。

三、        数据库(不要结合上面看)
    有一批水果,各种类型都有,想储存起来,怎么放才好?
    杂乱的一堆,如果想从里面把苹果全部找出来,岂不是很耗力?
    如果仓库有一个柜子,柜子上有很多盒子,盒子上都唯一的编号,一个盒子存一种水果,这样找出苹果就方便了,只要找到那个对应编号的盒子就行了。

    信息也是这样,要把他们分门别类的村入数据库中的每个表中,查找起来才有效率。一个数据库可以有多张表,一张表里可以有多个字段,一个字段存储一条信息,这样在数据表中就形成行与列,一行代表一整条新数据,比如某个苹果的大小,重量,颜色都在这行对应的列里(字段),下一行是另一个苹果。

    如果你想给每个苹果特征都记下来,只要把这个苹果的特征对应的记录到一行里对应字段里就可以了,下一行写见的就是另一个苹果,这就是数据库的写入。

    如果你想看到所有苹果的特征,很简单,用程序读出来,然后写进HTML文件里,这就是数据库的读出,需要一条一条的读出吗?不需要,程序是可以自己循环的读的,读完一条他会自动读下一条,一直读到没有(判断没有了的条件),那循环又怎么显示呢,首先你要把HTML标记是一行的标记一起放入循环结构里,这样在向页面输出的数据的时候,就自动把行结构循环了,就是告诉HTML,加一个行,加完再加,一直到不能加了就不加了,那怎么把表了每个字段信息读出来呢,好象你在地里挖土豆,你买了把铁锹,土豆长的成行成排的,每行的的每一个土豆边上放的都是那把铁锹(科幻),从左边起,然后右边,换到下一行就成循环了。呵呵

     还有就是数据库删除了,比如某个苹果烂了,你想把这个苹果的信息删除了,幸好你知道这个苹果编号,只要告诉程序这个苹果编号,然后执行什么样处理就可以删除了。

     最后就是数据库更新了,某个苹果突然变胖了,你得更改记录他的体重,你把这个苹果编号给程序再告诉他体重改成多少斤就可以了。

    幸好我们有数据库软件,只要打开数据库软件,在里面建好数据库,再在数据里建好表,再在网站程序里写上几行代码就可以与数据库软件建立相互通讯了。

    这里我们用MMSQL 2000 SERVER这个软件,不管是用哪个数据库软件,他接受的查询语言都是一样的,都是TSQL97数据库查询语言,不多,几个定义而已,不管是读出,写入,还是删除 更新都好,我们只要在网站页面里把对应语句传输给数据库系统,数据库系统就会自动执行,并那执行的结果返回给我们的程序,这样我们控制这些显示这些数据就得到最终结果了。

    后面会对数据库进行讲解,以及各种方法讲解;

四、        动态网站原理
1.        动态网站一般原理
动态网站一般是由浏览器发送请求给服务器,服务器接收到请求后根据请求进行处理,
最后将处理结果返回给客户端显示。
2.        客户端一般通用请求
不管是在ASP、PHP、ASP.NET、JSP里都存在以下的请求方法:
A.        表单提交
    表单是HTML(我用HTML类称XHTML等,下同)中的一个标记,没有显示意义,相当于一个容器,当这个表单中的某个按钮,发生点击事件后,浏览器首先检测到这个事件,接着它会寻找这个按钮所在的表单中所有可以向服务器传送数据的元素,记录这些数据的标记,数值,然后发送给服务器上指定处理页面,这个指定处理页面是在表单的 action 属性指定
<fron asction=”xxxx.aspx” mothed=”post”></from>
    例如论坛中的发表文章,在文本框输入信息后按提交,浏览器会将这个文本框信息传递给服务器
mothed代表表单提交方法   
B.        地址定位
    地址定位一般是不传递参数,或者将参数作为地址的一部分传递给服务器端。
    比如一个产品页 http://www.xx.com/product.asp?&id=10
    告诉服务器找到product.asp并接收参数id=10,这样程序就会处理这个页面,并根据参数读出数据写进HTML文件中再传递给客户端。

3.        ASP处理过程
IIS 信息服务程序程序某个进程会时刻运行监听,当它发现客户端请求时它会接受请
求,验证请求的合法性,将接受的请求参数给定一个内存区域存储值,接着将会根据指定的处理页面,读取这个页面并传递给ASP解释程序,ASP解释程序寻找ASP标记,找到后对应意义接着启动C语言解释程序,C语言解释程序根据ASP代码对应处理请求,最终通过数据库读取,数值运算等处理或者最终处理结果,并将这些处理结果转换为静态元素置入页面文件中生成最终HTML格式文件存入缓存,并通知IIS 信息服务程。

     PHP与ASP共属于脚本语言,他们的处理过程基本相同,都是依靠C语言程序解释脚本语言定义,并执行物理运算,生成最终结果返回给客户端。

4.        ASP.NET处理过程
    ASP.NET的处理过程不同于脚本语言的过程,它与JSP处理过程基本相同。
    当服务器端监听程序检测到请求时,它会验证请求,并启动执行对应的ASP.NET源程序,这个源程序是由另外一种语言编写而成,即IL语言,属于一种接近机器语言的中间语言,即不管你用什么语言编写的ASP.NET程序,它最终得到的都是IL语言程序,IL语言可以直接操纵物理,执行运算,并将最终结果生成并输出。

五、        DONET面面观
    1.DONET是什么
   Microsoft  .NET 是 Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft .NET 平台提供创建 XML Web services 并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体验。
   
   从上面那段话里我们可以知道DONET不是一种开发语言,也不是一种开发环境,他是一种平台,它由多种内容组成,为用户提供跨平台的开发与部署服务。

   首先我们看DONET的核心.net framework,目前.net framework的最高版本是3.0,集成于VISTA操作系统中,为VISTA及各类应用程序提供核心驱动。目前我们一般使用的版本是2.0。

   .net framework 的核心是其运行库的执行环境,称为公共运行库(CLR),从它的发展历史来看,微软首先给出的是COM+技术(Component Object Model,组件对象模块。一种微软所制定的软件技术;让对象的功能可以被其它软件所叫用,可以让组件重复使用、容易更新及维护),简单的说微软将众多计算机功能独立的写成一个一个函数,以便第三方应用程序使用,第三方应用程序只要调用微软给出COM组件就可以轻松的实现一些功能,而无须编写大量的代码进行底层物理操作,例如一个邮件发送程序,我们无须知道邮件是如何发送,如何传递,我们只要调用一个组件,并将内容传递给他,组件就会我们发送。

   可以这样想象,还是以邮件发送为例,我与你都使用的是windows操作系统,都想编写一段程序进行邮件发送,如果没有其他方法,我们只能一一编写程序,从底层物理访问到传输协议的使用,如果我想在写第二个邮件发送程序,而又和第一个有所不同,只得重复的编写某些相同的代码,这就造成了效率低下,既然某些内容相同,为什么不把他们独立出来,只做不同的内容呢,COM+就提供了这种可重用功能,他将某些处理过程封装起来继成在操作系统中,当你需要时调用这些函数就可以实现功能。

    COM有他的好处也有他的坏处,由于他的开放性导致组件越来越多,同一类组件版本异同等原因给程序员造成DLL地狱,可以想象在上万的组件中程序员无所适从,一些错误的引用就会造成程序的崩溃,后来微软开始他的.NET战略,为了实现跨平台及多平台互通,他首先将WIN32 API整理重写缩减,由最初的近8万个API到最终的3000多个API,全部存放于一个体系中,即.NET FRAMEWORK,分别存放于14个类别中,最终的大小只有十多M,这就为跨平台提供了先决条件,你无须安装WINDOWS操作系统,只需在你的智能设备里安装。NET FRAMEWORK就可以拥有WINDOWS系统中所有的编程功能,

    然后微软学习JAVA的做法,他将.net framework的函数编译成一种中间语言,既IL,这种中间语言是以数字作为编码,而不是以文本作为编码,这样就更接近机器语言,更容易被机器理解,这时.net 就可以像JAVA一样带着他的API四处纵横,这样还不够,单单的函数库还不足以支撑整个应用,还需要一种编程语言来操纵这些函数,微软一直很有战略眼光,他考虑了更多用户的编程习惯,从JAVA(微软的J++其实是JAVA变种,为此还和SUN闹了场官司),到C++,再到VB再到DAPHI,再到JAVASCRIPT,为DAPHI创造了DAPHI2000,改造了VB成为VB.NET使之由基于对象编程语言变成完全面向对象,并创新了一种编程语言即C#,C#是综合C/C++/JAVA的优点进而改进的一种编程语言,所以你在他身上能找到C C++ JAVA的影子,C#/C++/JAVA又被称为基于C的编程语言,所以我们在ASP.NET编程中我们选择C#

    但这么多编程语言为何能编写同一种类型的程序呢?.net framework函数库既然是以IL中间语言编写,那为什么C++,DAPHI又能使用这些函数呢,其实微软玩了花招,语句还是C++的语句,还是DAPHI的语句,但最终已不是C++,不是DAPHI了,他将这些语言最终编译生成的还是IL语言,所以你用C++只不过是一种格式,一种代码习惯而已,本质早已变了,这就是微软的高明之处了,只要你会那几门语言中的任一门,都可以编写.NET程序,但最终它就是.NET程序。

    所以我们了解.net 中两个基本的东西了:类库(函数库,其实函数与类不同,只是为了方便理解才这么叫)与编程语言,编程语言操纵类库中的函数以实现功能

    其实不管是网站也好,还是软件也好,他们都是操纵函数进行运算,然后给出结果,只是给出结果的方式不同,网站是通过网络,软件是通过本地化界面,他们只在某些方式上有些不同,所以有了类库,有了编程语言,再有一个方法就可以实现各种应用了。

    所以.NET即可以是WINDOS应用开发,也可以是WEB应用,还可以是MOBILE应用,不会受平台及方面的限制

    在WINDOS应用中,它会给出窗体的方法,并将程序最终编译成EXE,在WEB应用中给出的是WEB的方法,编译生成的是页面文件,与源文件,再结合IIS的ISAPI扩展功能就可以发布出来了,所以不管是哪种开发方式都好,他们都是使用的同一种编程语言,共用很多函数,某些函数是某一种应用的特有的,他们最终生成的都是IL中间语言。

    微软将VB的开发方式带进了。NET,即简单化开发,可以由工具箱中拖拽某个控件并设定属性进行简单化开发。

    控件是是什么,控件是微软既已设定的的输出和容器模式,控件的后面是程序,通过封装输出与容纳以及处理方法来简化开发.

    所以我们将ASP.NET要用到的技术进行分解
    控件为我们提供事件与容器,编程语言为我们进行处理,类库为我们提供功能的实现;
   
    其他暂不介绍,以后在说。

    2.关于几种网站开发方式的讨论
A.传统开发方式
传统的网站开发方式正如大家所了解的,它是基于浏览器的,基于WEB标准的,应用的是HTML ,XHTML,DHTML等传统页面技术,遵循HTTP协议,客户端于服务器端没有过多的交互。
B.异步开发方式
遵循AJAX异步技术的开始方式,基于浏览器,基于WEB标准,应用的是HTML ,XHTML,DHTML传统页面技术,异步交互数据。
C.富客户端开发方式 RIA UI
例如FLASH的FLEX技术,.NET的Expression技术,这应是未来的主流,这种技术是将界面与业务及数据逻辑层分离,将页面状态大量前移至客户端,WEB服务器端重新组织资源,形成WEB SERVICE集合。

具体的解释是这种开发方式脱离传统的HTML,XHTML,DHTML等页面技术,客户端与服务器端以XML做为通讯方式,大量页面UI信息(MAXL,MXML)加载到客户端承载保存,服务器端实现真正WEB SERVICE集合;

按照FLEX的做法是将在浏览器里做一个缓存容器,异步加载执行,实现更丰富的功能体验,微软在很久之前就公布将IE6.0作为IE的最后版本(IE7.0是因为他的计划推迟,网络产生变化,不得以变更)可能就是基于这个考虑
C.        胖客户端
富客户端只能说是功能体验较多,胖客户端就是肥了,胖客户端已经完全脱离浏览器,
脱离了传统页面方式,是B/S与C/S开发的的综合,如果上一种可以称为BC/S的话,后一种就是CB/S,C在前。
    具体的开发方式就是自定义客户端让用户的下载以实现更丰富的功能,以WEB的方式进行通讯,如果无法理解,不妨想下网络游戏,将全屏改成非全屏,将游戏界面改成现在的网络界面,其实这还不足以说明。现在你明白了WEB应用开发≠网站开发了吗?

    现在处于一个技术变革的时代,如果你不能确定以后你时候会转行,一定会继续做程序员,你就要把把你的身家性命押宝你对新一代(也可以说是这一代)WEB技术和体系的理解上,从中选择一种,不要追逐WEB2.0这样概念,真正的革新已经开始。

    3.小论C/S开发方式
    有句话是这么说来着的,一切都是为了WEB,IT成就WEB,WEB吞噬IT。
    B/S越来越热火,但不代表C/S就要趋与平淡,在基础领域C/S无可替代,甚至C语言这么多年依然坚挺,曾经十分厌恶C,憎恨潭浩强误人子弟,现在回过头来C语言是如此的帅,自由透明。还有C++
    为什么不论VB,VB已经无药可救了,微软老大发话一年内VISTA时常占有60%,谁敢再碰VB,那么多面向对象编程语言,为什么还要选VB,VB.NET不过只保留了型。升级可以,没问题?纯属做梦。
    为什么不论JAVA,JAVA不错,但搞JAVA的人都搞企业级开发去了,偶尔来点J2ME,嵌入开发大佬,离C/S太远了。
    DAPHI,DAPHI在嵌入与自动化控制方面市场占有强悍啊(尤其是大连这种重工企业多的地方),不知道为什么。
    看看.NET的各种语言,C/S还是等普及了VISTA再说。

    基础领域就C与C++在挺着,其他走的越来越靠近B/S。
    B/S与C/S界限的模糊是普通应用领域的必然趋势,所以不要说做网站没前途啊,是还没发现前途。

    4.小论VISTA的影响
    VISTA推迟两年多才发布,要是04年6月发布估计网络就不是现在这个样子了,起码我们现在早进入64位计算时代,大把大把的程序员要失业先。我们的上网行为方式估计也不是现在这个样子。
    现在发布VISTA有什么影响,首先对最近还在买32位时代的电脑的人说,等死吧。其次,对主板不支持64位的人说,你们没希望了。
    然后对VB程序员说,你们已经被时代抛弃,对还在依赖COM+的程序员及MFC程序员说,还好,但是努力转。对ASP开发者说,前途不会再光明。对PHP 开发者说,再看一两年,看看还有没有希望,说不定。对PHYthon开发者说,祝贺你,你已经跟着微软老大混了。对RUBY开发者说,提前祝贺你,你即将跟着微软老大混。对C与C++开发者说, 王道还是!对JAVA开发者说,咱不管,也管不着。

  完毕!
  顺便补充VISTA 6版中5版基于64位,VISTA的核心是.net framework3.0,另外它以前的叫法叫做WINFX,看起来是不是很像WIN32啊,像就对了。还有WWF,WCF,WPF可是些新词汇哦!