2008年12月17日星期三

html的功能---html基础知识

这一讲解还是讲html的基础知识,主要是html的功能,使用html可以创建办结构化的文档,由标题命令分离文档的各个部分并对其进行分类。html有能够格式化、显示文本、显示图像、接受用户输入和发送信息到服务器后台运行等项基础命令,还允许用户创建特殊文本和图像区域,以实现从一个html文件跳转到或超级连接到另一个html文件,从而创建一系列相互链接的网页。
通过超级连接创建的一系列相互页面其实就是一个程序,然而,它不像书中出现其他程序,因为这一系列页面不是智能的他不能决定什么,所有功能都驻留在html程序设计者所选择的标记设置中,链接在单一目录或一组目录中的一系列网页成为web站点
尽管缺乏决策功能,但web站点极其有用,他的作用表现在一下两方面
1、为非程序员创建信息丰富的网站提供了一条捷径。
2、和internet组合在一起,可以使信息全球化。

下一讲html流行的原因。

htm基础l讲解---什么是html

今天我们继续讲解 HTML上次我们说html主要是页面布局,基本上就是记住他的属性,用这些属性来控制页面,对没错,其实很简单就是这些。
什么是html
尽管HTML最初的目的是创建一种文本描述语言,但它却成为了一个标记语言,它像字处理编辑器一样包含各种命令。以十分松散的方式告诉计算机文档中的内容。例如它使用HTML能告诉计算机一个文档中包含段,项目列表,表格或图像。HTML浏览器能将文本和图像显示到屏幕上。html和文字处理器之间的区别是文字处理器使用特定的格式。因为他们是特定的编辑器,所以一个文字处理器通常与其他文字处理器的原始文件不兼容。但是,文字处理器可使用输入输出过滤来转换文件格式。
相反,html是开放的,全球性的标准,用html v3.2的命令创建出文件可以在任和地方,几乎任何操作系统任何浏览器上显示。最新的html v4.0版本可以在目前使用的90%左右的浏览器上运行。
例如下面的html文件

<html>
<head><title></title></head>
<body></body>
</html>

这是一个完整的html文件。"<"和">"之间各个相对独立的正文,通常称为命令,有两种标志类型,开始标志和结束标志,他们通常成对出现。
下一讲是html的功能

2008年12月16日星期二

微软.NET战略和ASP.NET简介

首先需要特别指出的是,ASP.NET不仅仅只是有了一个新界面并且修复了一些缺陷的ASP3.0的升级版本(即不同于ASP2.0升级到ASP3.0的转变)。更为重要的是,ASP.NET吸收了ASP以前版本的最大优点并参照Java、VB语言的开发优势加入了许多新的特色,同时也修正了以前的ASP版本的运行错误。
要了解ASP.NET的真实面目,我们首先就得了解一下微软.NET战略。

1.1.1 微软.NET的历史

随着网络经济的到来,微软公司希望帮助用户,能够在任何时候、任何地方、利用任何工具都可以获得网络上的信息,并享受网络通信所带来的快乐。.NET战略就是为着实现这样的目标而设立的。
微软公开宣布,今后将着重于网络服务和网络资源共享的开发工作,并称,将会为公众提供更加丰富、有用的网络资源与服务。
微软新一代平台的正式名称叫做"新一代Windows服务"(NGWS),现在微软已经给这个平台注册了正式的商标--MicroSoft.Net。在.Net环境中,微软不仅仅是平台和产品的开发者,并且还将作为架构服务提供商、应用程序提供商,开展全方位的Internet服务。在谈及这个平台中使用的新技术,微软透露,它将在.Net环境中提供更多新产品和一揽子的全套服务。

MicroSoft .NET平台的基本思想是:
侧重点从连接到互联网的单一网站或设备上,转移到计算机、设备和服务群组上,使其通力合作,提供更广泛更丰富的解决方案。用户将能够控制信息的传送方式、时间和内容。计算机、设备和服务将能够相辅相成,从而提供丰富的服务,而不是像孤岛那样,由用户提供唯一的集成。企业可以提供一种方式,允许用户将它们的产品和服务无缝地嵌入自己的电子构架中。这种思路将扩展二十世纪八十年代首先由PC赋予的个人权限。

MicroSoft .NET将开创互联网的新局面,基于HTML的显示信息将通过可编程的基于XML的信息得到增强。XML是经"万维网联盟"定义的受到广泛支持的行业标准,Web浏览器标准也是由该组织创建的。微软公司为开发它投入了大量精力,但它并不是MicroSoft的专有技术。XML提供了一种从数据的演示视图分离出实际数据的方式。这是新一代互联网的关键,提供了开启信息的方式,以便对信息进行组织、编程和编辑;可以更有效地将数据分布到不同的数字设备;允许各站点进行合作,提供一组可以相互作用的"Web服务"。

1.1.2 微软.NET的介绍

1.1.2.1 MicroSoft .NET综述
MicroSoft .NET平台包括用于创建和操作新一代服务的.NET基础结构和工具;可以启用大量客户机的.NET User Experience;用于建立新一代高度分布式的数以百万计的.NET积木式组件服务;以及用于启用新一代智能互联网设备的.NET设备软件。
MicroSoft .NET产品和服务-包括Windows.NET,连同建立积木式服务的核心集成套件;MSNTM .NET;个人订购服务;Office.NET;Visual Studio .NET;以及用于.NET的bCentralTM。

.Net环境中的突破性改进在于:

1. 使用统一的Internet标准(如XML)将不同的系统对接;

2. 这是Internet上首个大规模的高度分布式应用服务架构;

3.使用了一个名为"联盟"的管理程序,这个程序能全面管理平台中运行的服务程序,并且为它们提供强大的安全保护后台;

.NET平台包括如下组件:

1.用户数据访问技术。其中包括一个新的基于XML的、以浏览器为组件的混合信息 架构,叫做"通用画板";

2.基于Windows DNA 2000的构建和开发工具;

3.一系列模块化的服务,其中包括认证、信息传递、存储、搜索和软件送递功能;

4.一系列驱动客户设备的软件;


1.1.2.2 Microsoft.NET平台带来的重要意义

我们来看一下MicroSoft .NET对开发人员、IT专业人员、以及企业应用的巨大意义。
对于开发人员MicroSoft .NET的策略是将互联网本身作为构建新一代操作系统的基础,对互联网和操作系统的设计思想进行合理延伸。这样,开发人员必将创建出摆脱设备硬件束缚的应用程序,以便轻松实现互联网连接。MicroSoft .NET无疑是当今计算机技术通向计算时代的一个非常重要的里程碑。

NET的核心组件有:

一组用于创建互联网操作系统的构建块,其中包括Passport.NET(用于用户认证)以及用于文件存储的服务、用户首选项管理、日历管理以及众多的其它任务

构建和管理新一代服务的基本结构和工具,包括Visual Studio.NET、.NET企业服务器、.NET框架和Windows.NET

能够启用新型智能互联网设备的.NET设备软件

.NET用户体验

.NET对最终用户来说非常重要,因为计算机的功能将会得到大幅度提升,同时计算机操作也会变得非常简单。特别地,用户将完全摆脱人为的硬件束缚:用户可以自由冲浪于互联网的多维时空,而不是束缚在便携式电脑的方寸空间--可通过任何桌面系统、任何便携式电脑、任何移动电话或PDA进行访问,并可对其进行跨应用程序的集成。

.NET可使用户轻松进行互联网连接,并轻松完成那些在当今看来十分费时而且费力的事务,它们往往要求用户进行数据重输入并需运行几个小时才能完成。通过将多项安全数据流合并到单一的用户界面(或者甚至是可编程决策引擎),.NET架构将用户从充斥于当今Web的数据竖井的束缚中解脱出来。用户可以自由访问、自由查看、自由使用他们的数据。

.NET对开发人员来说也十分重要,因为它不但会改变开发人员的开发应用程序的方式,而且使得开发人员能创建出全新的各种应用程序。新型开发范例的核心是Web服务这个概念的引入。Web服务是一种通过简单对象访问协议(SOAP),在互联网上展露其功能性的、极为公开的服务。SOAP是一种基于可扩展标记语言(XML)制定的协议。

在过去,开发人员通过集成本地系统服务来构建应用程序。在这种模型下,开发人员可以访问丰富的开发资源并能严格控制应用程序的行为。

如今,开发人员已在很大程度上挣脱了这种模型的束缚,致力于构建具有复杂结构的n层化系统,这种系统能将网络上众多的应用程序一并进行集成,大大提升了应用程序的价值。这样,开发人员便可把精力集中在充分挖掘软件独特的商业价值,而不是构建基本结构上。可喜的局面将应运而生:软件投放市场的时间大大缩短、开发人员的编程效率明显提高,最终把质量上乘的软件呈现给用户。

我们正在进入一个崭新的计算时代--一个由互联网(尤其是Internet核心技术XML)实现的时代。利用XML,能够创建出可供任何人从任何地方使用的、功能非常强大的应用程序。它极大地拓展了应用程序的功能,并实现了软件的动态提供。在这种情况下,软件已不完全指那些从光盘进行安装的程序,而是演变成了一种服务--类似于ID调用程序或按收看次数进行收费的电视--人们可通过通信媒体订购的服务。

n层计算技术具有能够大幅度提高生产力、紧密耦合的特点,而Web概念具有面向消息、松散耦合的特点,我们将二者有机地糅合在一起,实现了上述构想。我们将这种计算风格称为Web服务,它的出现标志着人类已经迈入应用程序开发技术的新纪元。Web服务是一种应用程序,它可以通过编程并使用标准的Internet协议,像超文本传输协议(HTTP)和XML,将功能展示在互联网和企业内部网上。还可将Web服务视作Web上的组件编程。

从理论上讲,开发人员可通过调用Web应用编程接口(API),将Web服务集成到应用程序中。其调用方法与调用本地服务类似,不同的是Web API调用可通过互联网发送给位于远程系统中的某一服务。例如,MicroSoft Passport(Passport)服务使得开发人员能够对应用程序进行认证。通过对Passport服务编程,开发人员可以充分利用Passport的基本结构,通过运行Passport来维护用户数据库,以确保其正常运行、定期备份等等。
.NET正是根据这种Web服务原则而创建的,微软目前正着手提供这个基本结构,以便通过.NET平台的每一部分来实现这种新型的Web服务。而Visual Studio.NET、.NET框架、Windows.NET和.NET企业服务器,正是为进行基于Web服务模型的应用程序开发而度身定做的新一代开发工具和基本结构。.NET构建块服务、新增的.NET设备支持以及即将到来的.NET用户体验,将为人们彻底攻克这一难题划上一个圆满的句号,使人们能够充分利用Web服务模型,如愿以偿地开发出新一代应用程序。

.NET对IT专业人员的重要意义
目前,IT专业人员能够利用与构建.NET平台相同的技术。

.NET Enterprise Servers和Windows 2000操作系统,为创建具有高度可管理性的、能迅速投入市场的应用程序提供了坚实基础。它们利用的是可扩展标记语言(XML),因此随着Web体系结构的革新,在此平台上创建的程序依然很有价值。

.NET平台的核心是,采用有效的、分门别类的方式来构建应用程序,达到其前所未有的规模。该平台上的Web服务模型指的是:企业应用程序的中心业务要素通常由本地管理,而支持它们的服务(如用户认证、文件存储、用户首选项管理、日历、邮件等等)却无须本地管理,可以被无缝订购。为了存储用户文件和邮件,IT专业人员往往在服务器上安装新的独立磁盘冗余阵列(RAID阵列),而有了.NET,他们在这一方面将会花费较少的精力,而更多地致力于怎样为公司增加效益。

该Web服务模型还将动态配置新软件的发布和更新。用户将以极其紧密的连接方式工作,因此更易于管理。而简化的管理又可使IT专业人员更能适应变幻莫测的业务需求。

开发应用程序的.NET Web服务模型将为企业应用程序的创建开辟一条新路。通过企业内外多种服务的联合,很容易把企业内部数据和客户及合作伙伴的相关数据结合在一起,大大简化了应用程序的创建过程。这就为最终用户发掘了空前的功能涵盖性。例如,利用某公司的雇员福利程序,可以从其HR数据库订购信息,通过Web订购福利管理公司的服务、订购工资管理公司的服务。终端用户可以在简单、直观的界面下操作,而这个界面可以显示他们的累积休假时间、个人所得福利以及上次工资额。

.NET对企业的重要意义
MicroSoft .NET平台将从根本上改善计算机和用户之间进行交互的方式,最大限度地发挥电子商务中计算技术的重要作用。首先,让我们来分析一下当前商务计算世界的现状:

人与计算机进行交互的手段极为有限--通常使用键盘和鼠标进行输入,使用监视器监控输出。
用户信息基本上是本地信息;如果从另一台机器进行登录,则无法获取用户的个人首选项设置、数据及应用程序。

用户必须亲自处理信息,而通过设置智能选项代表用户自动进行操作,则无异于是纸上谈兵。
同一用户存放于不同应用程序和站点的数据,很难(或根本不可能)进行自动合并和关联,用户无法统一进行查看。

想在家里或在路上工作的用户,不能方便地访问办公室电脑中的应用程序和数据。这无疑成为一道阻止人们获得更高工作效率的鸿沟。

不能使用其它设备访问专为特定设备设计的数据(这些设备包括PC、寻呼机、移动电话以及PDA等);最多可以定期进行同步。

.NET将保证完全消除当今计算技术中的所有缺陷。.NET定能实现确保用户从任何地点、任何设备都可访问其个人数据和应用程序的宏伟蓝图。除此之外,.NET技术还可实现多个应用程序在逻辑上的松散耦合链接和紧密耦合链接。

用户可以通过手写、语音和图象技术与其个人数据进行交互。这些数据将安全地存放在互联网上,用户通过办公室(或家庭)PC,还可以通过移动电话或寻呼机、PDA、甚至是新发明的寻呼机--移动电话--PDA--PC联合设备访问这些数据。应用程序可进行灵活的功能调整,以适应用户所用设备的功能状况。应用程序可根据用户预定义的选项集和指令集,完全代替用户自动执行相应的操作。

上述功能将协同作用,以便大幅度地提高用户使用计算技术的生产效率。根据设计,.NET使得用户无需在如何与计算机进行交互上劳神,从而全身心地投入到使计算机自动执行任务、实现最终目标的工作中。通过使用XML行业标准,可将用户数据进行跨站点和应用程序的链接,从而轻松实现当前很难实现的操作。比如:对用户在数家不同银行、信用卡公司以及计费代理商那里的数据进行集中处理;这样,用户便可依据处理后的数据支付帐单,将费用明细报告归档。

.NET把雇员、客户和商务应用程序整和成一个协调的、能进行智能交互的整体,而各公司无疑将是这场效率和生产力革命的最大受益者。简言之,.NET承诺为人类创造一个消除任何沟鸿的商务世界。

1.1.2.3 MicroSoft .NET 的基本模块

网络服务一览

通常说来,一个网络服务只是一个作为服务――通过Internet标准此服务能与其它网络服务集成在一起――发行的简单的应用程序。换句话说,它是可通过URL定位的自动将信息返回到需要它的客户端那里的一种资源。网络服务一个重要的特点是客户不需要知道一种服务是怎样实现的。在本节中,我将向你解释网络及网络服务如何把基于组件技术的最好的方面结合在一起的,并且介绍与网络服务通信所需的基本框架。
同组件一样,网络服务提供"黑匣子"函数,它可以被再次作用而不用关心此服务是怎样实现的。网络服务提供被称为契约的精确定义的接口,此接口描绘了所提供的服务。开发人员可以将远程服务、本地服务和定置代码组合在一起而集成应用程序。例如,某公司可以使用如下服务组建一在线商店:微软护照(原文:Passport)服务以验证用户身份,第三方个人化服务以使网页匹配每一个用户的参数,信用卡处理服务,销售税服务,对每个运输公司的包裹跟踪服务,链接公司内部库存管理程序的内部目录服务,以及少量定置代码以使他们的商店能脱颖而出。

然而,网络服务与现在的组件技术不同,它不使用需要在服务器和客户机有明确的、同类型基本构架的具体的对象模型协议,例如DCOM、 RMI或 IIOP 。尽管与具体组件技术紧密结合的实现在一个受控的环境中能很好地被接受,但它们在网络环境中变得不切实际。因为一个集成商业程序的参与者会发生变化,随着时间的推移,技术也在变化,所以在所有参与者间确保一个单一的、统一的体系架构就变得十分困难。网络服务采取了另外一种途径,它使用普便存在的网络协议和数据格式,如HTTP和XML,进行通信。支持这些网络标准的任何系统都支持网络服务。

而且,网络服务契约描述的是以术语报文形式提供的服务,这些服务是由网络服务生成和接受的,而不是描述服务是如何实现的。通过把重点放在报文上,网络服务模板就完全对语言、平台和对象模板一无所知。 用任何一套编程语言、对象模型和平台的完全特性集,都可实现网络服务。网络 服务可在任何平台被用任何语言所实现的应用程序使用。只要用于解释服务容量、报文序列和所期望协议的契约得到认同,那么所实现的网络服务及网络服务用户就可相互不同,而不会影响会话另一端的应用程序。

网络服务模板对最小体系架构的要求很低,以确保网络服务在使用任何技术和编程语言的平台上实现和访问。对网络服务互用性的解决可只依靠网络标准。然而,为了使应用程序更容易使用网络服务,简单地同意通过标准网络协议就可以访问网络服务是不够的。当网络服务和网络服使用者依靠标准的方式表示数据和命令、表示网络服务契约 、算出网络服务所提供的容量时,网络服务才容易使用。

XML是定义一个标准的、可扩展的用于提供命令和典型数据的语言明显的一种选择。虽然为表示命令和典型数据可以定义使用其它技巧(比如编码为一种查询字符串)的规则,但XML被专门设计为描述数据的标准元语言。简单对象存取协议(SOAP)是以一种可扩展的方式使用XML表示数据和命令的工业标准。网络服务可选择用SOAP决定报文的格式。

XML是网络服务契约的一种使能技术。服务契约语言 (SCL)是记录网络服务契约的XML语法。由于SCL是基于XML的,所以对开发者和开发工具来说,容易生成、解释契约。关于SCL细则的草案很快会出台(注意:现在的SOAP Toolkit for Visual Studio 6.0支持称为SDL的SCL的早期版本)。

Disco 规范为服务提供者发布网络 服务契约和相应的机制描述了一个标准方式,这将使开发者或开发工具可找到契约文献。当你读到这里时, Disco规范的草案应出台了。

象SOAP, SCL和Disco这样的标准有助于开发者,因为它们不需要明白和实现所使用的每一个网络服务的访问方式。支持这些标准的更好的、已充分测试的、高性能的体系架构将由开发平台提供,这会大大简化整个开发过程。

MicroSoft .NET Framework
欢迎你阅读《ASP.NET完全入门》,通过对本书的阅读,我们相信你能够对ASP.NET会有更深入的了解。
ASP.NET又叫ASP+,但并不仅仅是ASP的简单升级,而是MicroSoft推出的新一代Active Server Pages脚本语言。ASP.NET是微软发展的新型体系结构.NET的一部分,它的全新技术架构会让每一个人的网络生
MicroSoft .NET框架的目的是使你更容易建立网络应用程序和网络服务。图2 显示了MicroSoft .NET框架的体系。建立在操作系统最上层的服务,是管理运行时代码需求的common language runtime,这些代码可以用任何现代编程语言所写。Runtime提供了许多服务,这些服务有助于简化代码开发和应用程序的开发同时也将提高应用程序的可靠性。.NET Framework包括一套可被开发者用于任何编程语言的类库。在此之上是许多应用程序模板,这些模板特定地为开发网络站点和网络服务提供高级组件和服务。

Common Language Runtime

运行语言(runtime)调入并运行用任何运行感知编程语言所写的代码。以运行为目标的代码被称为受控(managed )代码,受控代码代码只是意味着在内部可执行代码与运行自身间存在已定义好的合作契约。对于象生成对象、调用方法等这样的任务,被委托给了运行语言,这使得在运行语言能为可执行代码增加额外的服务。

运行语言以交叉语言集成、自描述组件、简单配制和版本化及集成安全服务为特点。

微软.NET战略和ASP.NET简介

运行语言使用一种新的能表达大部分现代编程语言语义的通用类型系统,通用类型系统定义了一套标准类型及生成新标准的规则。运行语言知道怎样生成、执行这些类型。编译器和解释器使用运行语言服务定义类型、管理对象、进行方法调用,而不是使用工具或特定于语言的方法。

类型系统的主要设计目的是使多种语言能深度集成。用一种语言所写的代码能继承用另一种语言所写的类的实现,用一种语言所写的代码抛出的异常能被用另一种语言写的代码捕获,象调试和剖析之类的操作会在完全封闭下工作,而不用考虑代码所用的语言。这就意味着编写可重用类库的开发者,不再需要为每一种编程语言或编译器生成一个版本,并且使用类库的开发者不再受到为他们使用的编程语言开发的库的限制。

自描述组件――现在MicroSoft .NET框架上已成为可能――简化了开发和配制,并提高了系统的可靠性。许多由运行语言提供的服务是由元数据及用于补充可执行代码的信息所驱动。因为所有的信息都储存在一起,只有可执行的(代码)才被称为自描述组件。

自描述组件的一个主要优点是,使用它们并不需要其它文件。类的定义不需要单独的头文件;通过检查元数据对类的定义可以从组件自身获得。跨语言或过程边界访问组件并不需要各自的IDL文件、类型文件或proxy/stubs;所必需的信息已存在于元数据之中。为识别开发者请示的服务属性,并不需要展开各自的配制信息。 最主要的是,由于元数据是在编译过程中由源代码生成,并与可执行代码储存在一起,它将永远和可执行部分同步。

除了改善对单个组件的配制,Microsft .NET框架定义了一个应用程序配制模板,以解决定置应用程序安装和DLL版本化(通常被称为"DLL Hell")这一复杂过程的问题,运行语言提供了支持这个模板的服务。
Microsft .NET框架 引入了组合体的概念。一个组合体是一组资源和类型,并包括有关这些资源和类型的元数据,也就是被作为一个单元配制的。元数据被称为组合体的名单,它包含象类型和资源表之类能被组合体外看得见的信息,这个名单也包括有关从属关系之类的信息,例如组合体建立时的版本号。开发人员可以指定版本策略,以指示运行语言是否装入系统上已安装的依赖于组合体的最新版本,装入一指定版本,或在编译时使用的版本。

某软件组件的多个拷贝总可以存在于同样的操作系统上,然而,通常说来,只有其中的一个拷贝能被操作系统注册、调入内存、执行。对系统来说,定位和调入内存的策略是全局性。.NET Framework Common Language Runtime 增加了所必须的体系架构以支持管理组件定位和调入的每个应用程序策略,这通常被称为并行配制。

组合体可以被一个应用程序私有,或被多个应用程序共享。一个组合体的多个版本可以同时配制在同一台机器上。应用程序配制信息定义了到何处去查找组合体,这样runtime就能为同时运行的两个不同的应用程序装入同一组合体的不同版本。这就消除了由组件版本的不兼容性引起的问题,提高了系统整体的稳定性。如果必要,如果必要,管理员可以为配制时刻的组合体增加配制信息,例如一个不同的版本策略,但是编译时提供的原始信息永远不会丢失。

因为组合体是自描述的,所以并不需要在系统上进行显式注册。应用程序的配制简单到只需将文件拷贝到目录中既可(如果为了使应用程序能够运行,必须安装未经组织过的组件的话,情况会稍微复杂一点)。配制信息保存在可被任何文本编辑器编辑的XML文件中。

最后,运行语言也提供完整的、普遍深入的安全服务,以确保未经授权的用户不能访问机器上的资源,并且代码不会执行未经允许的动作。这就提高了系统整体的安全性可靠性。 由于运行语言用于装入代码、生成对象、执行方法调用,所以当受控代码装入内存、执行时,运行语言能进行安全检查,强化安全策略。
Microsft .NET框架不仅规定代码访问安全,还规定基于角色的安全。通过代码访问安全机制,开发人员能为应用程序指定完成工作所必需的权限。例如,代码或许需要写文件或访问环境变量的权力。这类信息和有关代码标志的信息一起存储在配制级上的。当代码装入内存及执行方法调用时,运行语言验证是否能给予代码所要求的权限。如果不能,将记录一条安全冲突信息。给予权限的策略,这被称为信任策略,是由系统管理员建立的,并且是建立在关于代码的证据基础之上,比如:代码是谁发布的,是从什么地方获得的,以及在组合体中找到的代码标志和它要求的权限。开发人员可以指定他们显然不需要的权限,以防止其它人恶意使用他们的代码。如果所需要的权限依赖直到运行时刻才会知道的信息,那么就可写入纲邻性的安全检查。
除了代码访问安全,运行语言还支持基于角色的安全。基于角色的安全建立同代码访问安全一样的权限模板,只是这些权限是建立在用户的身份之上,而不是建立在代码的标志之上。角色表明了用户所属的类,并且可以在开发和配制阶段定义。给予权限的策略被分配到每个预定义的角色。在运行时刻,用户的身份被确定,代码将代表这个身份运行。运行语言决定用户是哪个角色的成员,然后给予基于这个角色的权限。
在查看Microsft .NET框架的可编程模板前,先看一下它所提供的服务。

服务框架
在Common Language Runtime之上是服务框架,此框架提供能被任何现代编程语言调用的类。所有的类都遵循一套命名和设计方针,以大大减小开发人员的学习上的弯路。

框架包括一套开发人员希望在标准语言库中存在的基类库,例如:集合、输入/输出,字符串及数据类。另外,基类库提供访问操作系统服务如图画、网络、线程、全球化和加密的类。服务框架也包括数据访问类库,及开发工具,如调试和剖析服务,能够使用的类。本文章没有详细讨论所有的类,我将重点放在数据访问类上,因为大多数网络服务需要对数据的访问。当然,你可以在MicroSoft .NET Framework SDK中找到关于服务框架类库的附加信息。

数据访问服务
几乎所有的网络服务都需要查询和更新永久性数据,不论是以简单文件,还是以相关数据库,或是以其它的存储类型存在。为了提供对数据的访问,服务框架包括ActiveX Data Objects+ (ADO.NET)类库。如同名子所暗示地那样,ADO.NET由ADO发展而来。ADO+被设计为基于网络的可扩展的应用程序和服务提供数据访问服务。ADO.NET为连接的指针风格的数据访问,同时也为更适合于把数据返回到客户端应用程序的无连接的数据模板提供高性能的APIs流,就象在以后介绍的那样。

就象其余几个部分一样,ADO.NET定义了那些链接数据仓库、 对数据仓库发送命令及从中获取结果的类。这些类由受控数据提供者(managed data provider)实现。ADO+中链接和命令对象看上去和ADO中的是一样的,并且一个名为DataReader的新类提供了通过高性能API流获取结果的能力。DataReader在功能上同前向、只读的ADO记录集(Recordset)是等同的,但是DataReader被设计用来最小化内存中生成的对象的数量,以提高性能,避免垃圾积累。在.NET Framework中包含了针对MicroSoft SQL Server?的受控数据提供者以及可通过OLE DB访问的任何数据仓库。

ADO.NET的一个主要创新是引入了数据集(Dataset)。一个数据集是内存中提供数据关系图的高速缓冲区。数据集对数据源一无所知,它们可以由程序或通过从数据仓库中调入数据而被生成、填充。不论数据从何处获取,数据集都是通过使用同样的程序模板而被操作的,并且它使用相同的潜在的数据缓冲区。使用.NET平台的开发人员能够用数据集代替传统ADO中无连接的记录集。

受控数据提供者为数据仓库和数据集公开一名为DataSetCommand 的接口对象。DataSetCommand 使用ADO.NET链接和命令以从数据仓库中填充数据集,并把在数据集中发生的变化解析到数据仓库中。

就象DataReaders 显示了对于相关数据的有效的流访问一样,XmlReaders 显示了对XML数据的流访问。开发人员使用DataNavigator 可以滚动和编辑内存中的XML文档。DataNavigator在功能上和W3C Document Object Model (DOM)是一样的,但它更有效,并提供了能很好映射关系数据表的对象模板。DataNavigator 支持Xpath语法以对数据流进行导航。ADO.NET为那些希望继续使用DOM作为XML对象模板而不是使用更有效的DataNavigator模板的开发人员提供了一个XMLDocument类。

由于所有的数据都可被看作XML,所以开发人员可以为任何数据使用转换和确认服务。ADO.NET定义了一个消费DataNavigator、生成一个新的XmlReader的通用转换体系。.NET Framework提供了一个支持W3C XSL Transformations (XSLT)细则的特殊转换组件。ADO.NET同时提供了一使用XML简图确认XmlReader的确认引擎。ADO.NET支持通过DTDs, XSD或 XDR定义的简图。

表单应用模板

从概念上讲,在服务框架的最上面是两个应用程序模板:Windows应用程序模板和网络应用程序模板。尽管我把重点放在把微软.NET 框架用作开发网络服务和网络应用程序的一种途径上,但框架也可用于开发较传统的基于Windows的应用程序(当然,这些应用程序也能使用网络服务)。

编写Windows客户应用程序的开发人员可使用Win表单应用程序模板以利用Windows丰富的用户接口特点,包括现在的ActiveX控件和Windows 2000的新特点,如透明的、分层的、浮动窗口。可以选择传统的Windows或网络外观。得知它和现在的基于Windows表单包的相似性以后,开发人员会发现Win表单可编程模板和对设计阶段的支持非常直观。

Win 表单利用了Microsft .NET框架 runtime以减少基于Windows的客户应用程序的开销。只要应用程序和组件是用Win所写或被Win表单应用程序使用,那么它们就能被框架安全模板在客户机上安全地执行。如果以这种方式使用或执行,那么某人从Internet下载下来的生猛游戏就不会对配制信息和数据产生破坏,否则会自动地给用户地址薄里的每一个人发送电子邮件。

Microsft .NET框架 装配模板简化了应用程序的配制和版本化 。应用程序可被配制为使用它们在编译和测试所用的共享组件,而不是使用恰好在客户机器上安装的随便什么版本的组件,这就提高了应用程序的可靠性,减少了应用程序所支持调用的主要因素:用户接口控件和其它共享组件版本的不兼容性。

网络应用程序模板

建立在Microsft .NET框架 上网络应用程序共享一个通用应用程序模板。在这个模型中,网络应用程序是一套起源于基URL 的URLs。因此它包含用于生成在浏览器中观看的网页的网络应用程序和网络服务。在本节中,我将详细介绍称为Active Server Pages+ (ASP.NET)的网络应用程序可编程模板

如同你从名字猜到的那样,ASP.NET是由活动服务器页面发展而来。ASP.NET利用common language runtime 和服务框架网络应用程序提供了一个可靠的、自动化的、可扩展的主机环境。ASP.NET也受益于common language runtime 集成模板,简化了应用程序的配制。另外,它提供简化应用程序开发的服务(如状态管理服务)以及高水平的编程模板(如ASP.NET Web Forms和ASP.NET Web Services)。

ASP.NET的核心是HTTP运行语言,一个高性能的用于处理基于低级结构的HTTP请求的运行语言,而基于的结构与MicroSoft Internet Information Services (IIS)所提供的ISAPI结构相似。如同你在图5所看到的,HTTP 运行语言是在象服务器上的IIS或客户机上的IE之类的unmanaged 主机过程中运行的受控代码。HTTP runtime负责处理引入的所有HTTP请求,并对每个请求应用程序的URL进行解析,然后把请求分配到应用程序以进行进一步的处理。HTTP 运行语言是多线程的,并异步处理请求,因此劣质的应用程序代码阻碍不了它对新请求的处理。而且HTTP 运行语言假定失败必会发生,因此它被控制为尽最大力量自动地从访问冲突、内存泄漏、死锁等事故中恢复过来。除非是硬件故障,运行语言的目标是100%的可靠性。

ASP.NET使用基于构件的Microsft .NET框架配制模板,因此它获得了如XCOPY配制、构件并行配制、基于XML配制等优点。ASP.NET另一个主要优点是,它支持应用程序的实时更新。管理员不必关掉网络服务器或者甚至不用停止应用程序的运行就可以更新应用文件。应用程序文件永远不会被加锁,因此甚至在程序运行时文件就可以被覆盖。当文件更新后,系统会温和地转换到新的版本。系统检测文件变化,并用新的应用程序代码建立一个新的应用程序实例,然后将引入的请求路由到应用程序。当所有被现存的应用程序实例处理的未完成的请求处理完后,该实例就被销毁了。

在应用程序中,HTTP请求是通过HTTP模块的一个管道路由的,最终到达请求处理程序。HTTP模块和请求处理程序是一些实现特殊接口的受控类,而这些接口是由ASP.NET定义的。这种管道结构使得为应用程序增加服务非常方便:只需补充一个HTTP模块。例如,安全,状态管理及跟踪都被实现为HTTP模块。高级可编程模块,如网络服务和网络表单,通常被实现为请求处理程序。一个应用程序能链接与多个请求处理程序--每个处理程序一个URL,但是所有的HTTP请求都通过同样的管道路由。

网络基本上是一个无状态模型,并且在HTTP请求间没有联系,这使得编写网络应用程序很困难,因为应用程序通常需要维护跨多个请求的状态。ASP.NET增强了由ASP引入的状态管理服务,以便为网络应用程序提供三种类型的状态:应用程序、会话、用户。就象在ASP中一样,应用程序状态特定于一个应用程序实例,并且不会持久。会话状态是特定于一个用户与应用程序间的会话的。与ASP会话状态不同,ASP.NET会话状态储存在一个独立的过程中,并且可把它配制成可以储存到一个独立的机器上。这使得会话状态当应用程序在网络群(Web farm)扩展时非常有用。用户状态类似于会话状态,但通常它不会超时,并且是永久性的。因此,用户状态对储存用户参数和其它个性化的信息是有用的。所有状态管理服务都被实现为HTTP模块,因此它们容易增加到应用程序管道中,或从中删除。如果除了由ASP.NET提供的服务外,还需要额外的状态管理服务,那么可由第三方的模块提供。

ASP.NET同样提供高速缓冲服务,以改善性能。输出缓冲可完全节省网页翻译,段缓冲储存部分的网页。由于提供了相应的类,所以只要需要,应用程序、HTTP模块以及请求处理程序可以在高速缓存中储存任意数量的对象。

下面快速浏览一下建立在ASP.NET可编程模块之上的两个高级可编程模块:ASP.NET 网络 表单和 ASP.NET 网络 服务。

ASP.NET 网络表单

网络表单把基于Visual Basic?的表单的高生产性的优点带到了网络应用程序的开发中来。网络表单支持传统的将HTML内容与角本代码混合的ASP语法,但是它提出了一种将应用程序代码和用户接口内容分离的更加结构化的方法。引入的网络表单控件用于为封装通用用户接口元素提供了一种机制。这些新的特点使得开发工具在支持VB小应用程序的同时,也支持设计时模块,使得WUSIWYG工具支持网页布局。

网络表单控件负责生成用户接口,典型情况是在HTML表单中。ASP.NET是提供了一套映射传统的HTML用户接口小部件(包括列表框,文本框和按钮)的网络表单控件和一套附加的更加复杂的网络控件(如日历和广告转板)。这些控件的一个重要特点是,它们可以被编写以适应客户端的能力;同一网页把大范围的客户端平台和表单因素作为目标。换句话说,网络表单控件能"嗅"到正在查找表单的客户,然后返回合适的用户经验――可能是适合低级浏览器的HTML3.2或是适于IE5.0的动态HTML。

考虑到网络是一种无状态的联接模型,网络应用程序开发人员所面临的一个很复杂的问题是,他们要对用户与基于网络的接口的交互作用作出反应。网络利用ASP.NET的体系架构提供了一套丰富的服务,以帮助开发人员建立交互式网页。这些服务的净作用是使基于组件的、事件驱动的可编程模块,对开发人员来说,非常象客户端的表单程序设计。用户与网页交互作用的状态管理的复杂性被ASP.NET 网络 表单和网络表单控件隐藏起来了。对开发人员来说,提供的丰富数据绑定服务使得显示通过数据访问服务得到的数据变得非常容易。

代码与内容的分离使ASP.NET网页能动态地编译到受控类中,用以提高性能。每个引入的HTTP请求都被传递到一个新的网页实例,因此开发人员不需要关心代码中的线程安全性。

ASP.NET 网络 服务

ASP.NET 网络 服务体系架构为用ASP.NET建立网络 服务提供了一高级可编程模板。虽然建立网络服务并不需要使用网络 服务平台,但是它提供许多的优点将简化开发过程,并且它使用的编程模型对用ASP或VB工作的开发人员来说是很熟悉的。使用这个可编程模型,开发人员不需要理解HTTP、SOAP或其它任何网络服务规范。

开发人员用ASP.NET生成一个扩展名为.asmx的文件,并把此文件配制为网络应用程序的一部分,就建立起了一个网络 服务。ASMX文件或者包含对在其它地方定义的受控类的引用,或者包含这个类的定义。这个类是由ASP.NET提供的WebService类所派生。公有的类方法在标记上WebMethod属性后,就会成为网络服务方法,把HTTP请求发送到ASMX文件中的URL后,这些方法就会被调用。你不必手工为你的网络服务建立一个契约。当被调用者请求时,ASP.NET检查类的元数据,以自动生成SCL文件。

客户可通过SOAP,HTTP GET 和HTTP POST提交请求。对方法和参数进行编码的约定是:对HTTP GET,将被编码为查询字符串;对HTTP POST,将被编码为表单数据。HTTP GET 和HTTP POST 的机制不如SOAP有力,但是它们使得客户在访问网络服务时不必支持SOAP。

ASP.NET 网络服务模型假定了一个无状态服务结构。无状态结构通常比有状态结构更具可扩展性。每次收到一个服务请求后,就生成一个新对象,请求被转化为一个方法调用,当方法调用返回时对象被销毁。如果这些服务需要跨请求维护状态,那么它们将使用ASP.NET状态管理服务。基于ASP.NET的网络服务在网络应用程序模型中运行,因此它们得到了该模型的所有安全、配制和其它优点。

ASP.NET 网络服务还提供了一个为在SCL文件中描述的网络服务生成分类的受控代理工具。代理生成器把SCL文件中描述的消息映射成受控类中的方法。代理对应用程序代码隐藏了所有的网络和引导设备,因此使用网络服务看起来就象使用其它受控代码一样。代理将优先使用SOAP链接网络服务,但是它同样支持HTTP GET和 HTTP POST机制。因此HTTP GET和 HTTP POST同样也能被使用。

网络服务为在Internet上绑定应用程序提供了一个利用现存体系架构和应用程序的简单的、灵活的、基于许多标准的模型。网络应用程序很容易与当地开发的服务或已存在的服务集成在一起,而不用考虑开发平台、开发语言或使用的对象模型,以用于实现任何组成的服务或应用程序。

Microsft .NET框架在现有开发人员技巧之上,提供了一个应用程序模板和关键技术,用于简化安全、可靠、可扩展、高可用性的网络服务的建立、部署和不断的发展。

通过上面的介绍,我们能够感觉到MicroSoft .NET对于我们今后的程序设计将产生巨大的影响。

1.1.3 ASP.NET历史

我们在讲述ASP.NET历史之前,让我们来回顾一下ASP。

ASP的第一个版本是0.9测试版。它给WEB开发带来一阵暴风,它能够将代码直接嵌入HTML,使得设计WEB页面变得更简单,更强大,并且通过内置的组件能够实现强大功能,最明显的就是ActiveX Data Objects (ADO),它使得建立一个动态页面如小孩子玩游戏一样简单。

最终出场的是Active Server Page 1.0,它做为IIS的附属产品免费发送。并且不久就在Windows平台上广泛使用。ASP与ADO的结合使用开发者很容易地在一个数据库中建立和打开一个记录集。这不无疑是它如此快就被大众接受的因素,因为你现在能使用这些脚本建立和打开一个记录集,处理和输出任何数据,以任何顺序,几乎只要你能想到的,它就能完成。

1998年,微软公司又发布了ASP 2.0 。ASP 1.0和ASP 2.0主要区别是外部的组件需要实例化。有了ASP 2.0 和IIS 4.0,我们就有可能建立ASP应用了,而且每个组件就有了自已单独的内存空间。内置的MicroSoft Transaction Server(MTS)也使用制做组件便得简单。

微软公司接着开发了Windows 2000操作系统。 这个Windows版本给我们带上了IIS 5.0 以及 ASP 3.0。此次并不是简单对ASP进行补充,核心的不同实际上是把很多的事情交给了COM来做。在windows 2000中,微软结合了MTS与COM核心环境做出了COM+,这就让主机有了一种新的方法来使用组件,同样给主机带来了更多的稳定性,成了一个可以升级的效率高的工作平台。IIS 5.0在表面上似乎没有改什么,但是在接口上动的手术比较大。在内部,它使用COM+ 组件服务来对组件提供一个更好的执行的环境。

有了这些,微软公司推出了ASP.NET,ASP.NET又叫ASP.NET,他不是ASP的简单升级,而是MicroSoft推出的新一代Active Server Pages。ASP.NET是微软发展的新的体系结.NET的一部分,其中全新的技术架构会让每个人的编程生活变得更的简单

ASP.NET 简介

ASP.NET 是统一的 Web 应用程序平台,它提供了为建立和部署企业级 Web 应用程序所必需的服务。ASP.NET 为能够面向任何浏览器或设备的更安全的、更强的可升级性、更稳定的应用程序提供了新的编程模型和基础结构。

ASP.NET 是 Microsoft .NET Framework 的一部分,是一种可以在高度分布的 Internet 环境中简化应用程序开发的计算环境。.NET Framework 包含公共语言运行库,它提供了各种核心服务,如内存管理、线程管理和代码安全。它也包含 .NET Framework 类库,这是一个开发人员用于创建应用程序的综合的、面向对象的类型集合。

ASP.NET 提供了下面的优点:

可管理性: ASP.NET 使用基于文本的、分级的配置系统,简化了将设置应用于服务器环境和 Web 应用程序的工作。因为配置信息是存储为纯文本的,因此可以在没有本地管理工具的帮助下应用新的设置。配置文件的任何变化都可以自动检测到并应用于应用程序。详细信息,请参阅 ASP.NET 配置。
安全: ASP.NET 为 Web 应用程序提供了默认的授权和身份验证方案。开发人员可以根据应用程序的需要很容易地添加、删除或替换这些方案。详细信息,请参阅 ASP.NET 安全。
易于部署: 通过简单地将必要的文件复制到服务器上,ASP.NET 应用程序即可以部署到该服务器上。不需要重新启动服务器,甚至在部署或替换运行的已编译代码时也不需要重新启动。详细信息,请参阅 ASP.NET 部署。
增强的性能: ASP.NET 是运行在服务器上的已编译代码。与传统的 Active Server Pages (ASP) 不同,ASP.NET 能利用早期绑定、实时 (JIT) 编译、本机优化和全新的缓存服务来提高性能。详细信息,请参阅 ASP.NET 性能监视。
灵活的输出缓存: 根据应用程序的需要,ASP.NET 可以缓存页数据、页的一部分或整个页。缓存的项目可以依赖于缓存中的文件或其他项目,或者可以根据过期策略进行刷新。
国际化: ASP.NET 在内部使用 Unicode 以表示请求和响应数据。可以为每台计算机、每个目录和每页配置国际化设置。
移动设备支持: ASP.NET 支持任何设备上的任何浏览器。开发人员使用与用于传统的桌面浏览器相同的编程技术来处理新的移动设备。
扩展性和可用性: ASP.NET 被设计成可扩展的、具有特别专有的功能来提高群集的、多处理器环境的性能。此外,Internet 信息服务 (IIS) 和 ASP.NET 运行时密切监视和管理进程,以便在一个进程出现异常时,可在该位置创建新的进程使应用程序继续处理请求。详细信息,请参阅 ASP.NET 进程隔离。
跟踪和调试: ASP.NET 提供了跟踪服务,该服务可在应用程序级别和页面级别调试过程中启用。可以选择查看页面的信息,或者使用应用程序级别的跟踪查看工具查看信息。在开发和应用程序处于生产状态时,ASP.NET 支持使用 .NET Framework 调试工具进行本地和远程调试。当应用程序处于生产状态时,跟踪语句能够留在产品代码中而不会影响性能。
与 .NET Framework 集成: 因为 ASP.NET 是 .NET Framework 的一部分,整个平台的功能和灵活性对 Web 应用程序都是可用的。也可从 Web 上流畅地访问 .NET 类库以及消息和数据访问解决方案。ASP.NET 是独立于语言之外的,所以开发人员能选择最适于应用程序的语言。另外,公共语言运行库的互用性还保存了基于 COM 开发的现有投资。
与现有 ASP 应用程序的兼容性: ASP 和 ASP.NET 可并行运行在 IIS Web 服务器上而互不冲突;不会发生因安装 ASP.NET 而导致现有 ASP 应用程序崩溃的可能。ASP.NET 仅处理具有 .aspx 文件扩展名的文件。具有 .asp 文件扩展名的文件继续由 ASP 引擎来处理。然而,应该注意的是会话状态和应用程序状态并不在 ASP 和 ASP.NET 页面之间共享。
ASP.NET 启用了分布式应用程序的两个功能:Web 窗体和 XML Web 服务。相同的配置和调试基本结构支持这两种功能。

Web 窗体技术使您建立强大的基于窗体的网页。Web 窗体页面使用可重复使用的内建组件或自定义组件以简化页面中的代码。
使用 ASP.NET 创建的 XML Web 服务可使您远程访问服务器。使用 XML Web 服务,商家可以提供其数据或商业规则的可编程接口,之后可以由客户端和服务器端应用程序获得和操作。通过在客户端/服务器和服务器/服务器方案中的防火墙范围内使用标准(如 XML 消息处理和 HTTP),XML Web 服务可启用数据交换。以任何语言编写的且运行在任何操作系统上的程序都能调用 XML Web 服务。

ASP 简介

静态的站点内容


目前Internet 上的许多站点,仍然提供“静态”(static)的主页内容。所谓“静态”,指的就是站点的主页内容是“固定不变”的。
当浏览器通过Internet 的HTTP (Hypertext Transport Protocol)协议,向站点服务器(Web Server)要求提供主页的内容时,站点服务器收到要求后,就传送愿已设计好的静态的HTML 的文件数据给浏览器。
一个“静态”的站点,若要更新主页的内容,必须手动的来更新其HTML的文件数据。


动态的站点内容


当在浏览器上填好表格(form)的输入数据,以提供HTTP要求时,可以在站点服务器中执行的应用程序,而不只是一个HTML 文件。站点服务器收到要求执行的应用程序,分析表格(form)的输入数据,将执行的结果以HTML的格式传送给浏览器。

ACTIVE SERVER PAGES

Active server pags (动态服务器主页,简称ASP),内含于Internet Information
Server(IIS)当中,提供一个服务器端(server-side)的scripting环境,让你产生和执行动态,交互式,高效率的站点服务器的应用程序。
你不必担心浏览器是否能执行你设计出来的Active Server Pages,你的站点服务器会自动将Active Server Pages 的程序码,解释为标准HTML格式的主页内容,在送到用户端的浏览器上显示出来。用户端只要使用常规可执行HTML码的浏览器,即可浏览Active Server Pages所设计的主页内容。

Active Server Pages 的特点是:

一:无须Compile编译:容易产生,无须Compile 编译或Link 链接即可执行。
二:使用常规文本编辑器,如Windows的记事本,即可设计。
三:与浏览器无关(Browser Independence):用户端只要使用常规的可执行HTML玛的浏览器,即可浏览Active Server Pages 所设计的主页内容,
Script 语言(Vbscript ,Jscript)是在站点服务器(Server端)执行,用户不需要执行这些Script语言。
四:面向对象(Object_Orient).
五: 可通过ActiveX Server components(ActiveX服务器组件)来扩充功能。
ActiveX Server component,可使用Visual Basic,Java,Visual C++,COBOL等语言来实现。
六:Active Server Pages与任何AcTiveX scripting 语言兼容。除了可使用VBscript 或JScript语言来设计,并可通过Plug-in的方式,使用由third party所提供的其他譬如REXX,perl,Tcl 等scripting语言。script引擎是处理script的COM(Component Object Model)对象。
七:Active server Pages的源程序代码,不会传到用户的浏览器,因此可以保护辛辛苦苦写出来的源程序不会外泻。传到用户浏览器的是Active Server Pages执行的结果的常规HTML码。
八:使用server端script产生client端script,你可以使用ASP程序码,在站点服务器执行script语言(VBscript 或 Jscript),来产生或更改在client端执行的script语言。

Active Server Pages 简介(2)


ASP对象
Active Server Pages提供五个内置的“对象”(object),你可以直接调用:
一:Request:取得用户信息。
二:Response:传送信息给用户。
三:Server:提供访问服务器的方法(methods)和属性(properties)的功能。
四:Applicatin:一个应用程序,可以在多个主页之间保留和使用一些共同的信息。
五:Session:一个用户,可以在多个主页之间保留和使用一些共同的信息。
在多个主页之间共享信息
ASP开发的应用程序,可以在多个主页之间保留和使用一些共同的信息,ASP提供两种适用范围,如下:
一:Application:Application 的所有信息,在一个应用程序,多个主页之间,
可以让所有的用户共同使用。
二:Session:Session的所有信息,仅适用于一个用户。


Active Server Pages 简介(3)

.asp文件
Active Server Pages(ASP)制作成.ASP扩展名的文件,一个.asp文件是一个
文本文件,包括:
1.HTML标记(tags)
2.VBscript 或Jscript语言的程序码
3.ASP语法
ASP语法
ASP并不是一个script语言,而是提供一个可以集成script语言(VBscript 或 Jscript)到HTML主页的环境。
HTML标记(tags)使用“<...>”将HTML程序码包含起来,以与常规的文本区分开来;而ASP使用“<%...%>”将ASP的script程序码包含起来。
范例:asp1.asp
显示现在的日期时间
譬如站点服务器asp1.asp文件:

现在是:<%=now%>

再用户端显示:
现在是:1998/5/17 皮棉3:11:20

让我们再看一个例子。
范例:asp2.asp
重复循环
这个ASP例子,在用户端浏览器,浏览执行的结果如下,显示五个重复的句子,字体越来越大。
站点服务器asp2.asp文件的ASP源代码如下:

<%for i = 1 to 5 %>

color=#0000ff>快速掌握Internet技术


<%next%>

Active Server Pages的源代码,不会传到用户的浏览器,可以保护你写的源程序不会外漏。因此,在用户端观看到的是常规的HTML码,你的站点服务器会自动将Active Server pages的 程序代码,解释为标准的HTML格式的主页内容,如下:

快速掌握Internet技术


快速掌握Internet技术


快速掌握Internet技术


快速掌握Internet技术


快速掌握Internet技术



传送字符串到用户端的浏览器
Response.write方法,是最常用的传送字符串到浏览器的方法。语法如下:
Response.write 字符串
以下的例子向用户打招呼:
<%
Response.write "欢迎光临"
%>
也可以用如下方法:
<%...%>
欢迎光临
<%...%>

链接到指定的URL地址
使用Response.redirect方法,可以连接到指定的URL地址。语法如下:
Response.redirect URL
譬如,自动连接到首页:
<%
Response.Redirect "homepage.asp"
%>
须注意一点,若此.asp主页的内容已传送给用户,在使用Response.redirect
,将发生错误!



Active Server Pages 简介(4)


ASP Script语法
使用VBscript或Jscript的ASP语法
ASP与任何ActiveX SCripting语言兼容。除了可使用VBscript或Jscript语言来设计,还可以通过plug-in的方式,使用由third party所提供的其他譬如REXX ,Perl, Tcl等scripting语言
"加以设定,譬如ASP程序码使用Jscript语言:



<%call 函数1%>




设定某一主页的script语言使用"<%@ language = ...%>"加以设定,语法如下:
<% @ language = VBscript %>
注意:@和LANGUAGE之间一定要有空格。
一个主页使用多种语言
  你可以在一个主页当中使用VBscript和jscript语言。方法如下:
  一:使用多个""加以设定。
  二:使用多个"#include"的语法。
   
#INCLUDE包含其他文件
   你可以在ASP程序码中插入另外一个"被包括"的文件,执行到此时,先执行"被包括"文件,再继续执行下去。语法如下:
   
其中virtual代表虚拟的文件地址,FILE代表绝对的文件地址,如下:
   

被包括的#include文件,也可在包含其他的"被包括"文件。
   不能使用ASP程序码来设定"被包括"的#INCLUDE文件。如下的#INCLUDE文件将无法正确的执行:
   <%name=(test & ".inc"%>


#INCLUDE 不能置于<%...%>当中。如下的#INCLUDE文件将无法正确的执行:
   <%
for i=1 to n
...

next
%>

将#include置于<%...%>外即可。如下的#include文件可正确的执行:
   <%
for i=1 to n
...
%>

<%next%>



Active Server Pages 简介(5)

表格的处理
表格(form)
将输入的数据传送到服务器的方法,是使用HTML标记
...
的表格,在用户端浏览器输入数据,点击"submit"按钮后,将输入的数据传送到服务器加以处理。表格的语法如下:
  


·action:处理输入的数据的站点服务器程序的url地址。
  ·method:输入的数据传送到服务器的方式,如下:
     get:将输入的数据加在action设定的url地址后面,传送到服务器
     post:按照http post传输数据的方式,将输入的数据传送到服务器
  ·name:设定form的名称
  ·onreset:点击"reset"的按钮时执行所设定的子程序event
·onsubmit:点击"submit"的按钮是执行的子程序event
·target:指定输入数据结果所显示的窗口名称
ASP取得表格(form)输入数据的方法
  由表格的method可知,用户浏览器可以用如下的两种方法传送数据
  1:get:用户端将数据加到url后,格式为"?字段1=输入数据1&字段2=输入数据2&...",再将它送到服务器.譬如ACTION设为http://www.abc.com,字段Name的输入数据为jack,字段age的输入数据为15,则使用的get方法,传给站点服务器的数据为http://www.abc.com?Name=jack&age=15.
2:post:用户端利用http信息数据字段将数据传送到服务器.  


二:post: 用户端利用HTTP信息数据字段传送到服务器。
ASP取得表格(form)输入数据的方法,是使用Active Server Pages一个内置的"对象"(object)---request,依据get,post方法而异:
get :使用"输入数据=Request.querystring("字段名"),将附加于url后的
数据取出,以取得此字段的输入数据。
post:使用"输入数据=Request.form("字段名"),读取HTTP信息数据字段,以取得字段的输入数据。
Request.querystring范例
范例:aspform.asp
使用Request.querystring("字段名"),将附加于url后的数据取出,譬如:

按此处,通过request.querystring取得name,age


Name:<%=request.querystring("name")%>
\
Age:<%=Request.querystring("age")%>
Request.querystring取出字段name的输入数据为Jack,字段Age的输入数据为15,
在用户端使用浏览器,浏览执行的结果如下:
按此处,通过request..querystring取得name,age
Name:jack
Age:15
Get范例
请看个例子。
范例:aspform.asp
这个例子的表格(form)使用Get方法,在用户端使用浏览器,浏览执行的结果如下,输入表格点击"写完了"按钮后,将显示处理的结果。
站点服务器aspform.asp文件的程序码如下,点击"submit"按钮后,执行站点服务器的asp1b.asp:


姓名:


特性:




asp1b.asp文件的ASP程序代码如下,由于表格(form)使用get方式,ASP程序码
使用"输入数据=request.querystring("字段名"),将附加于URL后的数据取出,
以取得此段的输入数据:

<%=request.querystring("input1")%>你好,你的特性是<%=
request.querystring("input2")%>

Request.form
Request.form读取HTTP信息数据的字段,以取得使用POST方式的表格form输入数据。语法如下:
request.form(name)[(index)|.count]
· name:字段名。
· index:当同一字段输入多个值时,指针值index指定要读取同一字段的那一个值。
范围由1到request.form(name).count
· count:由request.form(name).count可知name字段输入几个值。若无此name字段,
则count=0。
譬如以下的例子,其中input1为字段名,request.form("input1").count
得知input1字段输入几个值:
<%
for I = 1 to request.form("input1").count
response.write request.form("input1")(I)&"
"
next
%>
若input1有两个输入值,譬如为value1和value2,则以上的例子,在浏览器上将
显示:
     value1
value2
同一字段输入多个值时,若未采用指针值index指定要读取哪一个值时,将得到多个值,各个值中间以逗点分隔。
你可以使用"for each item in request.form("字段名"),重复取得此字段输入的所有多个输入值,以上的例子也可由以下的程序得到相同的结果:
<%
for each item in request.form("input1")
response.write item & "
"
next
%>
你可以使用"for each x in request.form",重复取得所有字段的输入值,譬如:
<%for ecah x in request.form%>
<%request.form(<%=x%>) = <% = request.form(x) %>
%>
<% next %>
若字段input1有两个输入值,譬如为value1和value2,则以上的例子,在浏览器上将
显示:
 inut1=value1
input2=value2



Active Server Pages 简介(6)

POST范例
让我们看一个POST的例子。
范例:aspform.asp
站点服务器aspform.asp文件的ASP程序代码如下:

姓名:

特性:




写完后点击“写完了"按钮时,所执行的asp1a.asp文件的ASP程序代码如下:
<% =request.form("input1")%>你好,你的特性是<%=request.form("input2")%>
若传给asp1a.asp的值,可能为:
input1=jack&input2=小肚微凸+漂亮
则在用户端使用浏览器,浏览执行的结果如下,输入表格点击"写完了"按钮后,将显示处理的结果。
   jack,您好,您的特性是小肚微凸,漂亮
若你设定name字段名,则站点服务器将解析此字段的输入值。若你需要未经解析的输入值,只须使用"request.form",不含name字段名。譬如asp1a.asp的ASP程序代码如下:
   <% = request.form %>
若输入的与上面的例子相同,于用户端使用浏览器,浏览未经解析的输入值如下:
   input1=jack&input2=%A4p%A8%7B%B7L%A5Y&input2=%BA%7D%ABG
Request.querystring
Request.querystring,读取HTTP信息数据字段位,以取得使用GET方式的表格form
输入的数据。
输入的字段和数据将接在
所设定的URL地址后面,
先加一个"?",字段和数据之间用"&"分隔之,譬如:
URL地址?input1 = value1&input2=value2
Request.querystring将解析出输入的数据value1,value2.
语法如下:
request.querystring(name)[(index)|.count]
· name:字段名.
· index:当同一字段输入多个值时,指针值index指定要读取同一字段的那个值。
范围由1到request.querystring(name).count.
· count:由request.querystring(name).count可得知name字段输入几个值。
若无此name字段,则count=0.
Request.querystring解析在servervariables的Query_string变量。
同一字段输入多个值时,若未采用指针值index指定要读取哪个值,则将得到多个值,各个值中间以逗点分隔。



Active Server Pages 简介(7)

站点数据库访问法

站点数据库的解决方案
如何让用户从浏览器画面中,通过internet或intranet,查询站点数据库的数据,甚至输入,更新和删除站点服务器的数据库信息呢?
访问数据库的解决方案有如下几种:
1:CGI(Commom Gateway Interface):传统方式。
2:IDC(Internet Database connector,Internet数据库连接器)
与IIS(Internet Information Server):简易的站点数据库访问解决方案。
3:ADC(Advanced Data Connector,先进的数据库连接器):在用户端的
浏览器上执行数据查询动作的频繁的数据查询解决方案。
4:ADO(ActiveX Data Object ,Activex数据对象)与ASP(Active Server Pages):
完整的站点数据库访问解决方案。

Active Data Object与ASP
ActiveX Data Object
问数据库,可采用ASP内置的一个Activex Server component---Database
Access component(数据访问组件),使用ActiveX Data Object
(ActiveX数据对象,简称ADO)的技术,让你可以与Active Server pages(简称ASP)
结合,以提供访问数据库的功能。\
ActiveX Data Object ( 数据库访问组件,简称ADO)是什麽东西呢?Active Data Object的技术,让你可以与Active Server Pages结合,以建立提供数据库信息的主页内容,在主页画面执行Structured Query Language(结构化查询语言,简称SQL) 命令,让用户在浏览器画面中输入,更新和删除站点服务器的数据库信息。
ADO使用RecordSets对象,作为数据的主要接口。
ADO可使用Vbscript,JavaScript语言来控制数据库的访问,与查询结果的输出显示画面。
ADO可连接多种的数据库,包括SQL Server,Oracle,Informix等支持ODBC的数据库。

ADO执行环境
在服务器端所需要的ADO执行环境如下:
1:windows NT server.
2:安装Internet Information Server(IIS)3.0(含)以上版本.
在用户端所需要的ADO执行环境,只需要一般的浏览器即可.



Active Server Pages 简介(8)

数据库数据来源设定
若要访问NT站点的数据库,须于"控制台"中的"odbc"建立数据库名称(用户数据来源名称),数据库所用的驱动程序和数据库文件等.
新建数据库来源的步骤
执行"设定"的"控制台"中的"odbc",选择"用户数据来源名称",点击"添加"按钮,选定数据库所用的驱动程序,如为Access数据库,选定"Microsoft Access Driver",点击"完成"按钮.
在odbc设定中,在"数据来源名称"输入数据库名称,以便以后在程序中调用称呼,点击"选定按钮,选择数据库文件,然后点击"确定"按钮即可.
ADO数据库设计要领
只要几个步骤,就可以应用 Active Data Object (ActiveX 数据对象,简称ADO)的技术,在站点服务器执行访问查询数据库的动作.
第一步:
ADO数据库设计要领的第一步,就是使用"Server.createobject"建立连接的对象,并使用"Open"打开待访问查询的数据库,如下
set conn = server.createobject("adodb.connection")
conn.open "数据库名称"
数据库名称即为在"ODBC"设定的"数据来源名称".
第二步
第二步设定SQL命令,使用"Execute"命令,即可开始执行访问查询数据库的动作.如下:
其中conn为第一步所设定的名称:
set rs = conn.execute(SQ)命令
第三步
第三步,使用如下recordsets对象的命令,显示查询的结果,其中rs为第二步所定义的名称:
.rs.fields.count:recourds的字段数.
.rs(i).name:第i(指针)个字段名,i由0算起到rs.fields.count-1.
.rs(i):读取第i(指针)个字段的记录,i由0算起到rs.fields.count-1.
.rs("字段名"):读取指定的字段的记录.
.rs.eof:是(true)否(false)已指定最末笔.
.rs.movenext:将指针移到下一笔.
.rs.moveprev:将指针移到上一笔.
.rs.movefirst:将指针移到第一笔.
.rs.movelast:将指针移到最末笔.
.rs.getrows:将查询结果存于数组当中,如v = rs.getgows(100),再读取数组v(col,row)的值即为查询的记录.
.rs.properties.count:得到ADO的Connection 或Resultset的属性总数.
.rs.properties(item).name:得到ADO的Connection 或 resultset的属性名称
.rs.properties(item):得到ADO的Connection 或Resultset的属性值.
最后,在显示后使用如下的命令,关闭数据库:
rs.close
conn.close
譬如,将查询结果显示于一个表格的程序码如下:



<%for i=0 to rs.fields.count-1 %>

<%next%>

<%do while not rs.eof%>

<%for i=0 to rs.fields.count-1%>

<%next%>

<%
rs.movetext
loop
rs.close
conn.close
%>
<%=rs(i).name%>
<%=rs(i)%>



Active Server Pages 简介(9)

查询数据
若要查询数据库的数据,则使用select的sql命令.
select的基本语法如下:
select 字段名#1,字段名#2,...
from 数据表名#1,数据表名#2,...
where 条件表达式
order by 字段名#1,字段名#2,...
.select:所接的字段明为待查询的字段,各字段名之间以逗号隔开.
.from:所接的数据表名称为待查询的数据库数据表名称,各数据表名之间以逗号隔开.
.where:所接的条件表达式为设定的查询条件表达式.
.order by:所接的字段名为排序的字段,将查询的数据加以排序.
指定多个字段时,先以字段名#1排序,若数据相同在按字段#2排序,...,各字段之间以逗号隔开.
更改数据库数据
若要更改数据库的记录,既在数据库中增加,更新,删除记录等,则可使用insert, update, delete的sql命令.

asp+ajax无刷新技术的讲解---asp+ajax无刷新

关键字:asp+ajax无刷新
图片摘自淘一宝网购
先在非常流行一种web技术,叫无刷新技术,这门技术其实不是新技术,web开发技术知识综合应用,只是给人一种体验,比如Google公司已经用到这种技术,说是无刷新,其实是假的,它只是在局部刷新,速度快给人你一种视觉冲击。
要想会asp+ajax技术,首先必须会HTNL DIV CSS JAVASCRIPT XML ASP CSS,这几种技术的综合,只有全部精通了,才能写出完美的ajax程序。下面我要介绍HTML技术,这种技术是做页面的布局的,也就是他不是程序语言,他是一种现实标记,其中属性,我们只要背过,就可以写出完美的web页面,首先也个页面的开始必须要以<开始,又必须以>做结尾,<>中间是标记的属性, 比如:网购这个网站页面就是用的html

这是开头是必须的,结尾也必须相互对应,好了这次我们先讲到这里,下次我们继续将htmlasp+ajax无刷新技术的讲解
其中图片摘自淘一宝网购源码

2008年12月15日星期一

vb.net语言的入门与提高--vb.net入门

vb.net语言的入门与提高--vb.net入门,学习一门语言一定要买一两本书籍把它吃透,才能真正会编程,学vb.net第一个要学的就是hello xxx,呵呵大家还记得吗?下面的代码就是。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Label1.Text = "Hello," + TextBox1.Text + "。"
End Sub

asp程序的简单验证------asp源码----简单验证

凡是做网站都会用到数据库,用到数据库就会做一些简单的验证程序asp语言验证是简单的,几行代码就可以把所需要的功能实现,比如要做一个网站注册页面,注册的名字不能重复,电话必须是数字的,这就需要一些验证了,尤其一些网购网站很多都需要验证。下面一些代码是摘自淘一宝手机数码网站的源码,用来向大家展示。


简单验证



简单验证




请输入一个 1 到 10 之间的数字:






注意以上示例直接检测输入值是否是一个数字:使用 IsNumeric 函数确定文本框中的字符串是否是一个数字。虽然 VBScript 能够自动转换字符串和数字,但检测用户输入值的数据子类型,并且在必要时使用转换函数始终是一个好的习惯。在用文本框的 Value 属性进行加法运算时,应将它显式地转换为数字,这是因为加号 (+) 操作符不但可进行加法操作,而且可进行字符串连接操作。例如,如果 Text1 中包含“1”,Text2 中包含“2”,您将会看到以下结果:
A = Text1.Value + Text2.Value ' A 为“12”
A = CDbl(Text1.Value) + Text2.Value ' A 为 3
asp程序的验证就是这么简单,希望大家能举一反三,这只是一个简单的验证,在做一些大项目会有许多的验证,都是有一些小细节积累而成的。

一些网购网站其实他们的程序也都是一样的,没有什么神秘,本文源码摘自淘一宝网购

2008年12月13日星期六

asp如何连接ACESS数据库方法----asp链接数据库-----asp代码

源码摘自淘一宝手机数码网站

写程序,当然要用到数据库,在编程这个行业中80%写的程序都会用的数据库,用网站来说,对于中小网站用的数据库类型最多的是ACCESS类型数据库,做网站的编程语言在中国最普遍的是asp语言,因为他简单易学,十天只能基本上可以做好一个网站,功能俱全,写网站当然第一步就是如何连接数据库了,下面是介绍asp如何连接ACCESS数据库的方法
第一、建好ACCESS数据库。
第二、用dw建立一个asp程序的页面
第三、写asp连接ACCESS数据库的代码,代码如下。

set conn=server.createobject("ADODB.CONNECTION")
conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath(dbname)
第四、然后保存在同一个目录下面。
第五、启动iis运行网站。

就拿一个已经做好的网站来说吧,淘一宝手机数码,该网站后台数据库就是ACCESS数据库类型,其中源码也是摘自淘一宝网站

源码摘自淘一宝手机数码网站

asp程序根据IP地址自动判断转向分站的asp代码

为了让广大客户端更快速的访问网站,一般一个大型网站会有很多分站,让客户端访问相应的分站,让客户有更好的体验,这就要用到根据客户端IP地址转向不同的分站。这里面要用到IP数据库,可到网上去下载。IP数据库在此主要用途是根据得到的IP,找到此IP所在的地址。
Function getIpvalue(clientIP)'得到客户端的IP转换成长整型,返回值getIpvalue
On Error Resume Next
Dim strIp, array_Ip
strIp=0
array_Ip = Split(clientIP,".")
If UBound(array_Ip)<>3 Then
getIpvalue=0
Exit Function
End If
For i=0 To 3
strIp=strIp+(CInt(array_Ip(i))*(256^(3-i)))
Next
getIpvalue=strIp
If Err Then getIpvalue=0
End Function
clientIP=request.ServerVariables("REMOTE_HOST")
IpValue=getIpvalue(clientIP)
strSql="select top 1 City from [Ipaddress] where "&IpValue&"
between Ip1 and Ip2"
Set RsIp=conn.execute(strSql)
If RsIp.bof and RsIp.eof then
UrlCity="未知"
Else
UrlCity=RsIp.Fields.Item("City").Value
End If
if instr(UrlCity,"广州")<>0 then
response.Redirect("http://code.knowsky.com")
end if
if instr(UrlCity,"深圳")<>0 then
response.Redirect("http://moban.knowsky.com")
end if
if instr(UrlCity,"上海")<>0 then
response.Redirect("http://font.knowsky.com")
end if

asp保留两位小数

<%=Formatnumber(-6665.8999,3,-1,-1,0)%>
(6665.900)
一个例子用到了函数Formatnumber()的所有参数:
第一个参数(-6665.8999)指定了要进行格式化的数字。
第二个参数(3)指定了小数点后显示的位数。
第三个参数(-1)指定了是否显示前导的零。
第四个参数(-1)指定是否对负数使用括号。
最后一个参数(0)指定是否显示分隔符
摘自淘一宝

2008年12月12日星期五

如何建立三层体系结构的ASP应用程序 - [ASP资料三层体系]

摘自淘一宝
浅谈如何建立三层体系结构的ASP应用程序   随着互连网应用的深入和发展,三层体系结构的应用模式也得到更多人的青睐。本文介绍了三层结构应用程序的概念和优点,并结合一个实例介绍了如何建立三层结构的ASP应用程序。   一、两层结构的ASP应用有何缺点   ASP有一个天生的缺点,就是ASP代码和HTML代码是混在一起的,ASP程序员既需要考虑与数据库打交道,需要关心如何与HTML配合,有时还需要用ASP直接生成HTML代码。其结果是,当程序逻辑足够复杂时,.asp源文件非常长;而且,无论客户提出用户界面的改变,还是商业逻辑的改变(比如,在考试系统中,"合格"的标准可能从达到60分就算合格,改为进入前100名才算合格),都需要对.asp文件进行改动,而商业逻辑的改变,很可能需要改动很多文件。   二、三层结构的概念   在传统的C/S应用中,也存在着上述同样的问题,多层结构的应用正是在C/S 结构的基础上产生的,并且也扩展到了B/S应用开发领域。 即将应用划分为三层(可以有更多层,但三层最常见): 用户界面层,商业逻辑层,数据库层。   用户界面层负责处理用户的输入和向用户的输出,但并不负责解释其含义(出于效率的考虑,它可能在向上传输用户输入前进行合法性验证),这一层通常用前端工具(VB,VC,ASP等)开发。   商业逻辑层是上下两层的纽带,它建立实际的数据库连接,根据用户的请求生成SQL语句检索或更新数据库,并把结果返回给客户端,这一层通常以动态链接库的形式存在并注册到服务器的注册簿(Registry)中,它与客户端通讯的接口符合某一特定的组件标准(如COM,CORBA),可以用任何支持这种标准的工具开发。   数据库层负责实际的数据存储和检索。 有了这样的结构,上面的问题迎刃而解:还是以考试系统中的合格标准为例,在客户端所有需要显示合格人员名单的地方,调用这样一个函数GetQualifiedList,至于这个函数如何编写,如何与数据库打交道,以至访问的是何种数据库都与其无关(你一定有过这样的经历,在一种数据库系统上运行得很好的SQL语句,有时换到另一种数据库系统上必须加以修改); 在中间层DLL中实现这个GetQualifiedList函数,如果用户对"合格"的定义变了,只需要修改这个函数就可以了,只要此函数的入口参数和返回内容不变,在客户端不需作任何改动。在这里,我们看到了面向对象编程的特性之一封装性的优点,而这一点在开发大型应用时尤其有用--我们可以把开发人员分成两组,一组负责开发界面层,另一组负责开发商业逻辑层,双方只要按照事先商定的函数接口,并行地开发就可以,而不必向从前那样,后面的工作必须等前面的工作完成后才能开始。当然,这样的开发模式需要很好的项目协调和文档作支持。   你也许会问,如果我把这些函数些在一个单独的文件中,再在需要调用的地方把它包含进来,不是同样能达到目的吗? 第一,这种方法效率不高,无论你把这些函数分散到多少个文件中,当你需要调用其中一个时,总会包含进一些实际上并不需要的函数,这无疑加重了服务器的负担,对服务器性能要求较高的Web应用尤其如此。 而DLL只在需要时才调入内存且只调入需要的函数,并且多个应用程序实例可以共享同一个DLL实例;第二,设想一个员工,有20个属性(工号,姓名,年龄,性别......),现在给定某工号,要求返回此员工所有信息。此时如果单纯用函数,只能定义20个全局变量,在函数中改变这些变量值,或者定义一个有20个传参(by reference)参数的函数。显然,第一种方法很麻烦而一旦增加一个属性后一种方法就需要更改函数接口。而在一个对象里,既包含成员方法(即函数和过程),也包括成员属性。如果我们采用对象的方法,则在函数中只需要改变对象的属性,在函数外可以直接引用改变了的对象属性值。 这种方法有些类似第一种方法,但1.属性值无需在函数外逐一说明;2.这些属性值只属于对象,与对象无关的代码不会无意地改变属性值;3.一旦对象被释放,这些值会被一起释放。  三、如何开发三层结构的ASP应用程序   ASP具有良好的扩充性,我们访问数据库时,采用的时ADO对象,访问文件时,采用的是文件系统对象(FSO),其实这时程序已经是三层结构的应用程序了,只不过由于是利用内置的对象而为意识到罢了。这些对象都遵循COM/ActiveX接口,因此我们自己开发的对象也要遵循这个接口。下面,我们就以上文提到的"合格"标准为例,演示如何创建自己的三层结构的ASP应用。   1、在数据库系统中建立如下数据库表:     Employee: EMPLID char (5) not null,              Name  char (10) not null,              Gender char (1) not null,              Score   int not null   此表存储员工信息和考试成绩,为简单起见,这里只包含工号,姓名和性别三项,并且只有一门考试,EMPLID为主键。   2、建立动态链接库   启动VB(这里以VB为例,你可以用你喜欢的任何支持ActiveX接口的开发工具开发),新建一工程,工程类型为ActiveX DLL。在工程中新建一个类
摘自淘一宝

2008年12月11日星期四

第四章 - 使用脚本语言

脚本语言是介于 HTML 和 Java、C++ 和 Visual Basic 之类的编程语言之间的语言。HTML 通常用于格式化文本和链接网页。编程语言通常用于向计算机发送一系列复杂指令。脚本语言也可用来向计算机发送指令,但它们的语法和规则没有可编译的编程语言那样严格和复杂。脚本语言主要用于格式化文本和使用以编程语言编写的已编译好的组件。

Active Server Pages 使 Web 开发商用多种脚本语言编写完整的过程成为可能。事实上,在单个 .asp 文件内部就可以使用多种脚本语言。另外,由于脚本是在服务器端读取和处理的,所以请求 .asp 文件的客户端浏览器并不需要支持脚本。

您可以使用任意一种其相应的脚本引擎已安装在 Web 服务器上的脚本语言。脚本引擎是处理用某种语言书写的命令的程序。Active Server Pages 带有两个脚本引擎:Microsoft Visual Basic Scripting Edition (VBScript) 和 Microsoft JScript。您也可以安装和使用其他的脚本语言引擎,例如 REXX 和 Perl。

如果您已经是 Visual Basic 程序员,就可以马上使用 VBScript,它是 Visual Basic 的子集。如果您是 Java、C 或 C++ 程序员,您会发现 JScript 语法对您来说是熟悉的,虽然 JScript 与 Java 或 C 并没有联系。

如果您熟悉其他脚本语言,例如 REXX 或 Perl,您可获取和安装相应的脚本引擎,这样就可以使用您熟悉的脚本语言了。Active Server Pages 是 ActiveX 脚本的宿主。要使用一种语言,必须安装脚本引擎,该引擎必须遵循 ActiveX 脚本标准并作为一个 COM (组件对象模型)对象驻留在 Web 服务器上。

设置主脚本语言

ASP 主脚本语言 是用来处理在分界符 <% 和 %> 内部的命令的语言。默认时,主脚本语言是 VBScript。您可以将任何一种具有脚本引擎的脚本语言作为主脚本语言。您可以逐页设置主脚本语言,也可以在 ASP 应用程序中设置所有页的主脚本语言。

为某页设置语言

要设置单个页的主脚本语言,可将 <%@ LANGUAGE %> 指令添加到 .asp 文件的开头。该指令的语法是:

<%@ LANGUAGE=ScriptingLanguage %>

其中 ScriptingLanguage 就是您所设置的页的主脚本语言。如果对某页进行了设置,那么该页将忽略在应用程序中对所有页的全局设置。

请遵循使用 ASP 指令的指导。详细信息,请参阅 创建 ASP 页。

注意 要将不支持Object.Method 语法的语言作为主脚本语言使用,必须先创建 LanguageEngines 注册表键。详细信息,请参阅 注册表。

为应用程序设置语言

在应用程序中,如要为所有页设置主脚本语言,可在 Internet 服务管理器的“App 选项”选项卡上设置“默认的 ASP 语言”属性。详细信息,请参阅配置 ASP 应用程序。

在服务器上使用 VBScript 和 JScript

在服务端通过 ASP 使用 VBScript 时,两个 VBScript 特征将失效。由于 Active Server Pages 脚本是在服务器端执行的,表示用户接口的元素的 VBScript 语句 InputBox 和 MsgBox 将不被支持。另外,在服务器端的脚本中,请不要使用 VBScript 函数 CreateObject 和 GetObject。而要使用 Server.CreateObject,这样 ASP 就可以跟踪对象实例了。用 CreateObject 或 GetObject 创建的对象不能访问 ASP 内建对象,也不能参与事务处理。该规则的一个例外是如果您使用的是 Admin 对象和 Java monikers。详细信息,请参阅 IIS Admin 对象 和 创建 Java 类的实例。

关于所有 VBScript 和 JScript 的操作符、函数、语句、对象、属性及方法的列表及详细说明,请参阅 VBScript 语言参考 和 JScript 语言参考。

包含注释

由于 ASP 脚本是在服务器端处理的,所以即使客户端的浏览器不支持脚本语言,也不必通过包含进 HTML 注释标记来隐藏脚本,但客户端的脚本则通常需要这样处理。在内容送到浏览器之前,所有 ASP 命令都已被处理好了。您可用 HTML 注释将注释加进 HTML 页。注释将返回给浏览器,若用户浏览 HTML 源文件,就可以看见。

VBScript 注释

VBScript 支持撇号型注释。与 HTML 注释不同,当处理脚本时,它们将被删除,而不是被送到浏览器。

<%

'This line and the following two are comments.

'The PrintTable function prints all

'the elements in an array.

Call PrintTable(myarray())

%>

输出表达式不能包括注释。例如,下面的第一行将正常运行,而第二行则不能,因为它是以 <%= 开头的。

<% i = i +1 'this increments i. This script will work. %>

<%= name 'this prints the variable name. This script will fail. %>

JScript 注释

JScript 支持 // 注释符。每一个注释行中都必须使用该注释符。

第三章 - 创建ASP页

Active Server Pages(ASP)文件是以 .asp 为扩展名的文本文件,这个文本文件可以包括下列部分的任意组合:

文本

HTML 标记

ASP 脚本命令

创建 .asp 文件非常容易。如果要在 HTML 文件中添加脚本,只需将该文件的扩展名 .htm 或 .html 替换为 .asp 就可以了。要使 .asp 文件可用于 Web 用户,请将这个新文件保存在 Web 站点上的目录中(请确定启用了该目录的脚本和执行权限)。使用浏览器查看该文件时,可以看到 ASP 处理并返回了 HTML 页。现在可以在 .asp 文件中添加脚本命令了。

注意 因为 .asp 文件需要额外的处理,请不要将所有的 HTML 页都转换为 ASP 页。应该只将包含脚本命令的文件转换为 .asp 文件。.asp 和 .htm 文件可以放置在相同的目录中。

使用任何的文本编辑器都可以创建 .asp 文件。使用那些带有 ASP 增强支持的编辑器将更能提高效率,如 Microsoft? Visual InterDev? 。如果您从未使用过 HTML,请考虑先使用 Microsoft FrontPage 。使用 FrontPage 创建文档和格式化文本就象使用文字处理工具一样简单。接下来还可以使用 Insert Script 命令在 FrontPage 创建的 HTML 页中加入简单的 ASP 命令。

加入 Script 命令

脚本是一系列的命令和指令。与 HTML 标签不同,script 命令指示 Web 服务器执行操作,而 HTML 标签只是简单地格式化文本或读取图形、视频及音频文件。Script 命令可以在变量中存储用户名,在返回到浏览器的页中显示用户名或将用户名存储在数据库中。

脚本命令通过定界符与文本区别开来。定界符是字符或一串字符,它标志单元开始或结束。HTML 使用定界符棗小于号(<)和大于号(>)括入 HTML 标签。

ASP 使用定界符 <% 和 %> 括入脚本命令。您可以在定界符中括入任何命令,只要这些命令对正在使用的脚本语言有效。下面的例子展示了包含脚本命令的简单的 HTML 页:





This page was last refreshed on <%= Now %>.





VBScript 函数 Now 返回当前的日期和时间。Web 服务器处理该页时,会使用当前的日期和时间替换 <%= Now %> 并且将该页返回到浏览器:

This page was last refreshed on 8/1/97 2:20:00 PM.

定界符括入的命令被称为主脚本命令。这些命令被主脚本语言处理。在脚本定界符中使用的任何命令都必须对主脚本语言有效。默认情况下,主脚本语言是 VBScript。要设置另一种语言。请参阅 使用脚本语言。

如果您已经熟悉了客户端脚本编写(编写在浏览器上运行的脚本),请注意不要用 HTML "
response.end
end if

if instr(lcase(userid),"admin")>0 or instr(userid,"管理员")>0 or instr(userid,"游客")>0 then
response.write ""
response.end
end if

if buyoktxtcheck(userid)<>userId then
response.write ""
response.end
end if
set rs = conn.execute ("SELECT * FROM buser where UserId= '" & UserId & "'")
if not (rs.Bof or rs.eof) then
set rs=nothing

response.write ""
response.end
else
call buyok_check_path()
sqlinfo = "select * from buser"
set rs=Server.Createobject("ADODB.RecordSet")
rs.Open sqlinfo,conn,1,3
rs.AddNew
rs("UserId")=UserId
rs("UserPassword")=UserPassword
rs("Username")=Username
rs("UserQQ")=UserQQ
rs("UserICQ")=UserICQ
rs("UserMSN")=UserMSN
rs("Sex")=Sex
rs("Birthday")=Birthday
rs("HomePhone")=HomePhone
rs("CompPhone")=CompPhone
rs("UserMail")=UserMail
rs("Country")=Country
rs("Province")=Province
rs("City")=City
rs("Address")=Address
rs("ZipCode")=ZipCode
rs("Memo")=Memo
rs("tjr")=tjr
rs("IP")=Request.serverVariables("REMOTE_ADDR")
rs.Update
rs.close
set rs = nothing

response.cookies("buyok")("userid")=userid

'登陆完成

淘一宝网,(www.googlc.net.cn),数码,热门话题,精品推荐,新品上市,热门评测,,手机数码,淘一宝,手机数码频道-提供热门手机数码新品精品,asp程序开发.
response.write ""
response.write ""
end if
%>
此代码摘自手机数码专卖淘一宝

asp程序的基础知识

网站。的语言有很多,不过我最擅长的就是asp和asp.net了,因为是微软的产品,我酷爱微软,脚本简单易学。基本上10天就可以学会asp
最近我做了一个网站,名字叫淘一宝,网站风格干净利索,没有点多余的渲染,让人看了,心情舒服,是一个电子购物网站。是用纯asp程序写的淘一宝
下面介绍做程序员的基本要求。
1、认真对待每一个小程序,把它吃透,并扩展功能。
2、本人必须有兴趣,没有兴趣是学不了编程的。
3、自己动手写每一行代码,哪怕只是一个小程序。
4、编程编程再编程。

淘一宝购物网站,asp程序

2008年12月6日星期六

asp脚本上传程序

'----------------------------------------------------------------------
'添加以下属性:
'InceptFileType 允许上传的文件类型,以英文逗号“,”分隔。
'添加以下方法:
'FileWidth 图片宽度
'FileHeight 图片高度
'----------------------------------------------------------------------
'***********************************************************************

Dim oUpFileStream

Class UpFile_Class
Public Form,File,Version,Err
Private CHK_FileType,CHK_MaxSize

Private Sub Class_Initialize
Version = "无惧上传类 Version V1.0"
Err = -1
CHK_FileType = ""
CHK_MaxSize = -1
Set Form = Server.CreateObject ("Scripting.Dictionary")
Set File = Server.CreateObject ("Scripting.Dictionary")
Set oUpFileStream = Server.CreateObject ("Adodb.Stream")
Form.CompareMode = 1
File.CompareMode = 1
oUpFileStream.Type = 1
oUpFileStream.Mode = 3
oUpFileStream.Open
End Sub

Private Sub Class_Terminate
'清除变量及对像
Form.RemoveAll
Set Form = Nothing
File.RemoveAll
Set File = Nothing
oUpFileStream.Close
Set oUpFileStream = Nothing
End Sub

Public Property Get InceptFileType
InceptFileType = CHK_FileType
End Property
Public Property Let InceptFileType(Byval vType)
CHK_FileType = vType
End Property

Public Property Get MaxSize
MaxSize = CHK_MaxSize
End Property
Public Property Let MaxSize(vSize)
If IsNumeric(vSize) Then CHK_MaxSize = Int(vSize)
End Property

Public Sub GetDate()
'定义变量
Dim RequestBinDate,sSpace,bCrLf,sInfo,iInfoEnd,tStream,iStart,oFileInfo
Dim sFormValue,sFileName,sFormName,RequestSize
Dim iFindStart,iFindEnd,iFormStart,iFormEnd,FileBlag
'代码开始
RequestSize = Int(Request.TotalBytes)
If RequestSize < 1 Then
Err = 1
Exit Sub
End If
Set tStream = Server.CreateObject ("Adodb.Stream")
oUpFileStream.Write Request.BinaryRead (RequestSize)
oUpFileStream.Position = 0
RequestBinDate = oUpFileStream.Read
iFormEnd = oUpFileStream.Size

bCrLf = ChrB (13) & ChrB (10)
'取得每个项目之间的分隔符
sSpace = MidB (RequestBinDate,1, InStrB (1,RequestBinDate,bCrLf)-1)
iStart = LenB (sSpace)
iFormStart = iStart+2
'分解项目
Do
iInfoEnd = InStrB (iFormStart,RequestBinDate,bCrLf & bCrLf)+3
tStream.Type = 1
tStream.Mode = 3
tStream.Open
oUpFileStream.Position = iFormStart
oUpFileStream.CopyTo tStream,iInfoEnd-iFormStart
tStream.Position = 0
tStream.Type = 2
tStream.CharSet = "gb2312"
sInfo = tStream.ReadText
'取得表单项目名称
iFormStart = InStrB (iInfoEnd,RequestBinDate,sSpace)-1
iFindStart = InStr(22,sInfo,"name=""",1)+6
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFormName = Mid(sinfo,iFindStart,iFindEnd-iFindStart)
'如果是文件
If InStr(45,sInfo,"filename=""",1) > 0 Then
Set oFileInfo = new FileInfo_Class
'取得文件属性
iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFileName = Mid(sinfo,iFindStart,iFindEnd-iFindStart)
oFileInfo.FileName = Mid(sFileName,InStrRev(sFileName, "\")+1)
oFileInfo.FilePath = Left(sFileName,InStrRev(sFileName, "\"))
oFileInfo.FileExt = Lcase(Mid(sFileName,InStrRev(sFileName, ".")+1))
iFindStart = InStr (iFindEnd,sInfo,"Content-Type: ",1)+14
iFindEnd = InStr (iFindStart,sInfo,vbCr)
oFileInfo.FileType = Ucase(Mid(sinfo,iFindStart,iFindEnd-iFindStart))
oFileInfo.FileStart = iInfoEnd
oFileInfo.FileSize = iFormStart -iInfoEnd -2
oFileInfo.FormName = sFormName
If Instr(oFileInfo.FileType,"IMAGE/") Or Instr(oFileInfo.FileType,"FLASH") Then
FileBlag = GetImageSize
oFileInfo.FileExt = FileBlag(0)
oFileInfo.FileWidth = FileBlag(1)
oFileInfo.FileHeight = FileBlag(2)
FileBlag = Empty
End If
If CHK_MaxSize > 0 Then
If oFileInfo.FileSize > CHK_MaxSize Then
Err = 2
Exit Sub
End If
End If
If CheckErr(oFileInfo.FileExt) = False Then Exit Sub
File.Add sFormName,oFileInfo
Else
'如果是表单项目
tStream.Close
tStream.Type = 1
tStream.Mode = 3
tStream.Open
oUpFileStream.Position = iInfoEnd
oUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-2
tStream.Position = 0
tStream.Type = 2
tStream.CharSet = "gb2312"
sFormValue = tStream.ReadText
If Form.Exists (sFormName) Then _
Form (sFormName) = Form (sFormName) & ", " & sFormValue _
Else _
Form.Add sFormName,sFormValue
End If
tStream.Close
iFormStart = iFormStart+iStart+2
'如果到文件尾了就退出
Loop Until (iFormStart+2) = iFormEnd
RequestBinDate = ""
Set tStream = Nothing
End Sub

'====================================================================
'验证上传类型
'====================================================================
Private Function CheckErr(Byval ChkExt)
CheckErr=False
If CHK_FileType = "" Then CheckErr=True : Exit Function
Dim ChkStr
ChkStr = ","&Lcase(CHK_FileType)&","
If Instr(ChkStr,","&ChkExt&",")>0 Then _
CheckErr=True _
Else _
Err = 3
End Function
'====================================================================
'图像宽高类型读取
'====================================================================
Private Function Bin2Str(Byval Bin)
Dim i, Str, Sclow
For i = 1 To LenB(Bin)
Sclow = MidB(Bin,i,1)
If ASCB(Sclow)<128 Then
Str = Str & Chr(ASCB(Sclow))
Else
i = i+1
If i <= LenB(Bin) Then Str = Str & Chr(ASCW(MidB(Bin,i,1)&Sclow))
End If
Next
Bin2Str = Str
End Function

Private Function Num2Str(Byval num,Byval Base,Byval Lens)
Dim ImageSize
ImageSize = ""
While(num>=Base)
ImageSize = (num mod Base) & ImageSize
num = (num - num mod Base)/Base
Wend
Num2Str = Right(String(Lens,"0") & num & ImageSize,Lens)
End Function

Private Function Str2Num(Byval str,Byval Base)
Dim ImageSize,i
ImageSize = 0
For i=1 To Len(str)
ImageSize = ImageSize *Base + Cint(Mid(str,i,1))
Next
Str2Num = ImageSize
End Function

Private Function BinVal(Byval bin)
Dim ImageSize,i
ImageSize = 0
For i = lenb(bin) To 1 Step -1
ImageSize = ImageSize *256 + ASCB(Midb(bin,i,1))
Next
BinVal = ImageSize
End Function

Private Function BinVal2(Byval bin)
Dim ImageSize,i
ImageSize = 0
For i = 1 To Lenb(bin)
ImageSize = ImageSize *256 + ASCB(Midb(bin,i,1))
Next
BinVal2 = ImageSize
End Function

Private Function GetImageSize()
Dim ImageSize(2),bFlag
bFlag = oUpFileStream.Read(3)

Select Case Hex(BinVal(bFlag))
Case "4E5089":
oUpFileStream.Read(15)
ImageSize(0) = "png"
ImageSize(1) = BinVal2(oUpFileStream.Read(2))
oUpFileStream.Read(2)
ImageSize(2) = BinVal2(oUpFileStream.Read(2))
Case "464947":
oUpFileStream.Read(3)
ImageSize(0) = "gif"
ImageSize(1) = BinVal(oUpFileStream.Read(2))
ImageSize(2) = BinVal(oUpFileStream.Read(2))
Case "535746":
Dim BinData,sConv,nBits
oUpFileStream.Read(5)
BinData = oUpFileStream.Read(1)
sConv = Num2Str(ASCB(BinData),2 ,8)
nBits = Str2Num(Left(sConv,5),2)
sConv = Mid(sConv,6)
While(Len(sConv)191 and p1<196 Then Exit Do Else oUpFileStream.Read(BinVal2(oUpFileStream.Read(2))-2)
Do:p1 = BinVal(oUpFileStream.Read(1)):Loop While p1<255 And Not oUpFileStream.EOS
Loop While True
oUpFileStream.Read(3)
ImageSize(0) = "jpg"
ImageSize(2) = BinVal2(oUpFileStream.Read(2))
ImageSize(1) = BinVal2(oUpFileStream.Read(2))
Case Else:
If Left(Bin2Str(bFlag),2) = "BM" Then
oUpFileStream.Read(15)
ImageSize(0) = "bmp"
ImageSize(1) = BinVal(oUpFileStream.Read(4))
ImageSize(2) = BinVal(oUpFileStream.Read(4))
Else
ImageSize(0) = "(UNKNOWN)"
End If
End Select
GetImagesize = ImageSize
End Function
End Class

'文件属性类
Class FileInfo_Class
Public FormName,FileName,FilePath,FileSize,FileType,FileStart,FileExt,FileWidth,FileHeight
Private Sub Class_Initialize
FileWidth=0
FileHeight=0
End Sub
'保存文件方法
Public Sub SaveToFile (Byval Path)
Dim Ext,oFileStream
Ext = LCase(Mid(Path, InStrRev(Path, ".") + 1))
If Ext <> FileExt Then Exit Sub
On Error Resume Next
Set oFileStream = CreateObject ("Adodb.Stream")
oFileStream.Type = 1
oFileStream.Mode = 3
oFileStream.Open
oUpFileStream.Position = FileStart
oUpFileStream.CopyTo oFileStream,FileSize
oFileStream.SaveToFile Path,2
oFileStream.Close
Set oFileStream = Nothing
End Sub
'取得文件数据
Public Function FileData
oUpFileStream.Position = FileStart
FileData = oUpFileStream.Read (FileSize)
End Function
End Class
%>

asp+ajax无刷新注册小程序asp+ajax

asp程序一个asp注册实例

set rs=server.CreateObject("adodb.recordset")
dim sql_chick
sql_chick="select * from Tabcustomer where Email='" & request.Form("Email_name") & "' and f0=0"
rs.open sql_chick,conn,1,3
if not rs.eof or not rs.bof then


response.end
rs=nothing

else
set rs=server.CreateObject("adodb.recordset")
'dim sql_chick
sql_chick="select * from Tabcustojmer where Email='" & request.Form("Email_name") & "' and f0=1"
rs.open sql_chick,conn,1,3
if not rs.eof or not rs.bof then
'New add customer

rs.update
rs("Email")=Replace(request.Form("Email_name"),"'","''")
rs("Pwd")=md5(request.Form("pwd"))
rs("Fname")=request.Form("F_name")
rs("Lname")=request.Form("L_name")
rs("StreetAddress")=request.Form("street_address")
rs("CompanyName")=request.Form("company_name")
rs("Postcode")=request.Form("post_code")
rs("City")=request.Form("city_name")
rs("Continent")=request.Form("Continent_name")
rs("CountryID")=request.Form("country_name")
rs("Tele")=request.Form("Telephone_num")
rs("Fax")=request.Form("Fax_num")
rs("f0")=0

rs("Question")=replace(request.Form("Question"),"'","")
rs("Answer")=request.Form("Answer")
rs("IPaddress")=Request.ServerVariables("REMOTE_ADDR")

rs.update

response.end
rs=nothing
else

rs.addnew
rs("Email")=Replace(request.Form("Email_name"),"'","''")
rs("Pwd")=md5(request.Form("pwd"))
rs("Fname")=request.Form("F_name")
rs("Lname")=request.Form("L_name")
rs("StreetAddress")=request.Form("street_address")
rs("CompanyName")=request.Form("company_name")
rs("Postcode")=request.Form("post_code")
rs("City")=request.Form("city_name")
rs("Continent")=request.Form("Continent_name")
rs("CountryID")=request.Form("country_name")
rs("Tele")=request.Form("Telephone_num")
rs("Fax")=request.Form("Fax_num")
rs("Question")=replace(request.Form("Question"),"'","")
rs("Answer")=request.Form("Answer")
rs("Regtime")=now
rs("IPaddress")=Request.ServerVariables("REMOTE_ADDR")
rs.update

set rs=nothing
end if


end if
end if
%>

asp版本操作数据库平台程序,asp随意查看数据库数据

返回查询
"
Response.Write""
Response.Write"自定义查看表子段数据"
Response.Write""
Response.Write""
Response.Write""
Response.Write""
Response.Write""
'循环出数据表
Do Until Rs.EOF
Response.Write"" & Rs(2) & ""
Rs.MoveNext
Loop
Response.Write""
Response.Write""
Response.Write""
Response.Write""
'查询出表字段结构,选择好字段,点击查询
Dim QuestMode,QuestTabName,Field_Rs
QuestMode=Request.QueryString("mode")
If QuestMode=1 Then
QuestTabName=Request.QueryString("tabname")
Sql="Select * From " & QuestTabName & ""
Set Field_Rs=Server.CreateObject("Adodb.RecordSet")
Field_Rs.Open Sql,conn,1,3
'循环出各个字段名字来
For i=0 To Field_Rs.Fields.count-1

Response.Write " " & Field_Rs.Fields(i).Name
Next
End If
Response.Write""
Response.Write"请填写id号"
Response.Write""
Response.Write""
Response.Write""
Response.Write""
Response.Write""
Response.Write""
Response.Write""
If QuestMode=2 Then
Response.Write""

Response.Write""

id=replace(request("FieldName")," ","")
id=split(id,",")
for i=0 to UBound(id)
Response.Write""
Response.Write id(i)
Response.Write""
next
'显示出数据
Dim shujubiao,tabid,data_sql,data_rs
tabid=Request.Form("tabid")
shujubiao=Request.Form("tabnames")
data_sql="Select "
for i=0 to UBound(id)
data_sql=data_sql + id(i) & ","
next
data_sql=data_sql +"id From " & shujubiao & " where id=" & tabid
Set data_rs=Server.CreateObject("Adodb.RecordSet")
data_rs.Open data_sql,conn,1,3

If Not data_rs.EOF Then
Response.Write""
for i=0 to UBound(id)
Response.Write""
Response.Write data_rs.Fields(id(i))
Response.Write""
next
Response.Write""
Else
Response.Write""
Response.Write""
Response.Write"无数据"
Response.Write""
Response.Write""
End If
End If
Response.Write""
Response.Write""
%>

2008年12月5日星期五

戏说程序员

一個好的程序員是不會只和一家大公司的技術綁在一起的﹐也不會只知道一種Language。 這裡有很多.NET程序員﹐我就拿.NET程序員來舉個例子。.NET是微軟的技術﹐這是與“不只和一家大公司的技術綁在一起“的原則相違背了﹐但只要你能有意識地去發覺Programming的真諦﹐你仍然可以從禁錮中投得一些光亮﹐從而一窺“九陰真經“。 我們看看﹐有什麼東西是.NET程序員可以掌握並且可倚仗十年而不管微軟存在與否的技術呢? 1. XML。不是.NET裡那些XML API﹐而是對XML﹐XML Schema, XML DTD, DOM, SAX, XPath, XQuery﹐甚至是XSLT ...的掌握﹔ 2. SQL。不是說您對SQL Server有多熟悉﹐要熟悉的是SQL語法﹐高級SQL應用﹐和PL/SQL﹔ 3. OOP。通過學習C#﹐你對OOP的優點和缺點透徹掌握﹐以及近代OOP新出現的概念﹐比如Interface﹑Property ...﹔ 4. 開發流程。通過對Visio﹐Power Point﹐SQL Server或VS.NET等軟件的使用﹐了解一個軟件開發的大致流程。不是知道幾個名詞﹐而是要有親身經歷過n次的感性認識﹔ 5. 軟件測試。通過使用NUnit之類的工具﹐掌握一般軟件測試的方法﹐了解軟件測試的必要性﹐和何時需要何種軟件測試。(其實這一點應該屬于第4點﹐但軟件測試在中國很不被重視﹐即使有也往往是拿來應付人的﹐所以我把它單獨列出以示強調)﹔ 6. Security。不管是.NET還是J2EE都需要處理Security的問題。Security是個無底洞﹐但所使用的原理和技術很有連貫性﹐十年之前的東西現在仍然普遍在用。比起其它技術來說它相對穩定﹐值得投入﹔ 7. Web Services。不是怎麼用VS.NET來用Web Services﹐而是要知道為什麼要用Web Services﹐Web Services的三大Protocol --- WSDL, SOAP, 和UDDI。通過Web Servies了解SOA(Servie Oriented Architecture)以及Business Logic Layer的職責和位置﹔ 8. 設計模式。這是這幾點裡最難學會的﹐也是最需要年數積累的。看完一本<<設計模式>>就說自己懂了﹐根本就是在胡說八道。設計模式猶如“九陽真經“﹐一開始即使能夠死記也不得其要領﹐只能靠日後多年實踐﹐才能逐漸明白其“九陽真經“的奧妙。一旦練成﹐終身收益。是程序員邁向系統架構師過程中的必修技。 一個有智慧的.NET程序員﹐即使在被微軟操控的情況下﹐也應該有意識的去琢磨琢磨以上的幾點。學習本質﹐破除樊籬。 .NET程序員和開源社區程序員之不同﹐猶如“劍宗“和“氣宗“之不同。練“劍宗“者﹐入門快速﹐由表即裡﹐前兩至三年成就高于練“氣宗“者。習“氣宗“者﹐追求本質﹐由裡即表﹐入門艱辛﹐但五年後其功力強出前者。本來一個由裡即表﹐一個由表即裡﹐一正一反﹐何以有此差距? 原因在人的惰性﹐所謂“由儉入奢易﹐由奢入儉難“﹐易在前與易在後便產生功力的差異。 但事事因人而異﹐事在人為。.NET程序員們當自知其強﹐也當自明其短﹐奮發圖強﹐還是大有一番出息的。這裡我送.NET程序員六個字 --- 學其本﹐舍其華

wholesale retail company from china

achinaseller.com is a professional wholesale retail company, having our own factory with 5 years of wholesale retail experience. Achinaseller.com is also cooperating closely with many factories, so the price that we offer to the consumer is directly from the Chinese Factory. Without leaving your home, you could order your own products at achinaseller.com at the lowest price.
We service over 100,000 registered buyers, delivering to virtually every country in the world. Our warehouse and office are staffed by a young team of Chinese and Western staff.
Happy AchinaSeller buyers include frequent wholesale importers, famous ecommerce websites, eBay powersellers, retail shops and startup home import businesses. On a daily basis, we serve corporate buyers, drop-ship experts, home business Moms, and small bussiness wholesaler