1.3.1一致性和个性化 Web设计人员倾向于设计两种相互矛盾的特性。一方面他们希望整个站点具有统一的外观。但与此同时,他们又希望在色彩、字体大小和其他特性上对用户提供定制站点的服务。ASP.NET2.0提供了MasterPage控件,该控件使得一个站点在标题、菜单和链接的布局上保持一致。在这种一致性的范围内,设计人员可以添加一个控件,让用户选择一种用于所有页面的主题风格。
1.3.2导航 每个站点都需要导航工具,通常有三种形式。用户需要菜单。他们还需要看到自己在站点中的当前位置。最后,他们希望能够容易地向上或向下导航一个层次结构。ASP.NET2.0支持一个名为SiteMap的XML文件。ASP.NET2.0的控件可以根据站点地图和当前页面的名称显示菜单和其他导航信息。
1.3.3登录、安全和角色 很多站点都需要登录系统,该系统根据一个列表检查用户的ID和口令,然后决定允许或拒绝用户登录。虽然基本的实现不复杂,但只有很少一部分程序员能够成功地开发一个符合安全要求的登录系统。ASP.NET2.0提供了一些控件,这些控件可以创建和实现一个比我们当中的大多数人手工编程实现要好的登录系统。除了简单的站点准入功能以外,该系统还提供口令提示功能以及一个创建新用户的系统。另外,可以为用户指定角色,这个角色决定了当该用户查看信息的时候可以获得哪些页面和功能。例如,所有用户都可以查看员工电话薄页面,但只有角色为Manager的用户可以查看修改员工信息的页面。
1.3.4连接数据 虽然绝大多数动态Web站点都与数据相连,但只有少数设计人员能够成功地实现用户需要的所有功能。在以旧版的ASP创建的站点中,Microsoft注意到在效率和安全方面存在很多问题。而且,即使是最简单的目标也需要编写数行的代码。ASP.NET2.0通过两组处理数据的控件提供了丰富的数据功能。数据源(DataSource)控件提供连接到数据源的操作。数据绑定(Data-bound)控件获取这些信息并显示为HTML。很多数据源控件都可以连接到几乎所有的数据源,而数据绑定控件则提供用户表格、列表、树和其他表示形式。两组控件相互配合,可以使得用户以按页的方式显示数据,并对数据进行排序和编辑。
1.3.5代码 几乎每个Web站点都需要用户定制的代码,因为ASP或其他Web站点技术不可能预料到所有业务的不同需求。ASP.NET2.0支持20多种不同的语言。不论程序员使用的是何种编程语言,代码在执行之前都会被转换为一种单一的中间语言。ASP.NET2.0控件在服务器上执行,但程序员仍然可以编写在客户端执行的代码(例如Java或其他客户端脚本)。
1.3.6组件化 如果可以互不依赖地创建Web站点的不同部分,那么站点的开发和维护将会变得更简单。传统的ASP依赖于大型的页面,这些页面包含内容、HTML、ASP控件和脚本代码。ASP.NET2.0为把站点分解成多个逻辑部分提供了更加有效的模型和结构。例如,代码通常保存在独立于显示层(文本和HTML标记)的文件中。而且,VisualWebDeveloper提供向导以简化创建提供数据资源的对象。
1.3.7Web服务 企业在它们自己的站点上提供信息和服务。例如,福特公司可以在其全球总部通过www.Ford.com站点向用户提供关于色彩和价格的信息。但是在几年前,我们看到其他站点也需要这样的服务。例如,一个本地的Ford经销商也许希望在www.YourLoacalFordDealer.com站点上提供色彩和价格的列表。Web服务允许客户站点(本地经销商)从提供商站点(福特公司总部)那里获取信息。本地经销商使用Web服务可以显示由福特公司站点提供的实时数据,但仍然让用户位于本地站点。ASP.NET2.0提供一个符合SOAP标准(SimpleObjectAccessProtocol,简单对象访问协议,一种从Web服务请求数据的方式)的完整Web服务解决方案和XML(ExtensibleMarkupLanguage,可扩展标记语言,一种数据格式)。
1.3.8性能和缓存 设计人员在开发机器上编写好一个页面后,将把该页面编译成一种称为MicrosoftIntermediateLanguage(MISL,微软中间语言)的.NET2.0统一语言。然后把它复制到部署机器上。第一次复制时,需要对页面进行更进一步的编译,将其编译成CommonLanguageRuntime(CLR,公共语言运行时),这将针对即将运行该页面的机器硬件对页面进行优化。这个分步编译过程实现了软件的一致性和针对硬件优化的双重目标。两个编译步骤都经受过.NET2.0小组的严格性能分析。对开发新手而言,最大的好处在于这个编译过程是自动完成的。
ASP.NET2.0可以很容易地缓存页面,这样就能更迅速地响应后续的请求。缓存的页面将保存在服务器的RAM中,这样在有请求发生时就可以将页面直接发送出去,而不用让服务器重新编译页面。而且,设计人员可以指定只有页面的一部分可以缓存,人们将这个过程称作碎片缓存(fragmentcaching)。碎片缓存可以加速页面中静态部分的响应速度,同时仍然允许页面中的动态部分根据用户的具体需求产生。如果使用MicrosoftSQLServer7或者更高的版本,还可以选择为页面中与数据相关但很少变化的部分(可能是一个员工列表或零售商列表)使用数据无效缓存(datainvalidationcaching)。数据无效缓存将把页面保存在缓存中直到从SQLServer收到数据已被更改的消息。ASP.NET2.0可以缓存一组数据,直到从SQL收到数据已发生改变的消息。SQLServer将通知.NET数据已发生改变,这将触发ASP.NET2.0重新读取数据。
1.3.9错误和异常处理 任何Web站点,实际上所有的系统,都需要对错误进行响应。ASP.NET2.0提供了一个响应错误的系统。响应可以放置在代码中,也可以重定位到一个错误页面。可以为每个错误提供一个错误页面,也可以只为整个站点提供一个错误页面。.NET2.0Framework还允许在多个层次上对错误进行处理。如果错误发生在读取数据时,则可以在数据源层处理错误。如果没有进行处理,错误将向上传递一个层次并在那里进行处理。未处理的错误将不断地上传,从而允许设计人员选择在最有效的层次上进行处理。
1.3.10部署 在以前,部署为Windows和Linux开发的站点需要一系列的设置步骤,这些步骤主要是在主机上注册和配置站点。ASP.NET2.0小组为XCOPY部署设置了一个目标,其名称来源于一个DOS命令,这个命令将复制一个文件夹和它的所有子文件夹。一个简单的XCOPY命令将把站点从开发机部署到部署主机上。所有的注册操作和机器层的定制都将在第一个请求到达站点时自动发生。
1.3.11部署工具 虽然编译ASP页面的工具不是ASP.NET2.0的一部分,但是Microsoft还是花费了相当多的精力改进这些工具,也就是VisualStudio、VisualWebDeveloper和VisualWebDeveloperExpress。这些IDE(IntegratedDevelopmentEnvironments,集成开发环境)允许通过拖放控件的方式创建页面。大多数常见的操作要么是自动完成,要么由向导引导完成。如果需要输入代码,则IDE将为大多数步骤提供智能提示。本书使用可以免费下载的VWDExpress工具。
很多人都存有这样的疑问,ASP.NET2.0和其他与Web相关的术语(通常是术语的首字母缩写)是怎样相互融合的。现在我们将解释清楚这个问题——ASP.NET2.0在哪些方面和运行在服务器上的其他软件相互融合?它是什么角色,其他技术又是什么角色?ASP.NET2.0是.NET2.0Framework的一部分。.NETFramework是Microsoft的商标,该商标包含一组使用Web服务和XML进行Internet互联的软件标准。很多Microsoft的产品都符合.NET标准,包括各种各样的服务器软件、数据管理系统和桌面应用程序。ASP.NET2.0是.NET2.0的一个子集,这个子集提供创建动态Web站点的软件。该软件以一组类的形式发布,这些类包含各种在Web服务器上执行操作的控件。在页面的日常设计工作中,我们将用到这些服务器端控件。由于ASP.NET2.0是.NET2.0Framework的一个子集,因此本书中我们有时使用ASP.NET2.0的功能,有时使用.NET2.0Framework的功能。各种功能之间是完全无缝的。
作为Microsoft的产品,ASP.NET2.0运行在Windows上。进行开发时,它必须安装在Windows2000或者更新版本(包括XPHome和XPPro)的系统上。进行部署时,常用的OS是WindowsServer2003或其他针对更高负载设计的WindowsOS版本。在Windows中,ASP.NET2.0和InternetInformationServer相互配合从硬盘上读取页面并将其发送给请求者。或者,在用于开发的桌面机器上,可以使用一个轻量级的Web服务器Cassini测试ASP.NET2.0,这个服务器是和VWD这类开发工具一起发布的。
当设计人员使用ASP.NET2.0控件连接数据时,至少会发生两次交互。数据控件使用一种称为ActiveXDataObjects(ADO.NET)的技术,但幸运的是ADO.NET运行在底层。接下来,这些ADO.NET对象将和数据源交互。数据源可以是MicrosoftSQLServer(本书所用的就是这个数据源),或者几乎其他任何包含关系数据库的数据源,例如Oracle或MySQL,以及非关系数据源,例如XML或文本文件。
Microsoft为多个层次的开发人员提供了创建ASP.NET2.0Web站点的工具。覆盖范围最广的产品是VisualStudio2005,这是为专业开发人员提供的工具。一个价格很低,而且只是功能稍弱一点的版本是VisualWebDeveloperExpress。FrontPage仍然可用,但是它的主要功能是编辑静态HTML页面,并且缺少用于简化设计动态的、数据密集的ASP.NET2.0页面的工具集。在Notepad中创建页面长久以来一直是ASP开发人员的首选方法,而且理论上仍然可以继续使用它;然而,对Web站点和Web页面进行必要的管理使得它成为一个不切实际的、费力的、而且更容易导致错误的工具。
理论上已经介绍得够多了;让我们实际考察一下ASP.NET2.0。在学习本书的过程中,您将为一个运气欠佳的足球队创建一个完整的网页,这个球队的名称是WroxUnited。可以在www.worxunited.net找到已完成的示例,本书后面将介绍这个站点以解释ASP.NET2.0提供的功能范围。接着在本书的剩余部分,您将在自己的台式机上开发一个同样的站点。对于这个练习,不需要在机器上安装软件。然而,本书的后续部分需要根据附录B介绍的步骤安装好开发机。
本节介绍由作者创建的站点,其地址是www.wroxunited.net,www.lmwlove.com,您也将创建这个站点。启动浏览器并打开该站点。
●MasterPage和SiteMap(站点地图)(在第2章讨论):单击多个页面以观察页面的顶部和左边的统一布局。这种设计的一致性由一个易于实现的功能完成,该功能的名称是MasterPage。其次,请注意在每个页面右下方的红褐色方框,该方框中的内容指示当前页面和该页面的父页面,以及父页面的父页面,直到主页面。这个功能由ASP.NET2.0的SiteMap和Navigation控件实现。
●服务器端控件(在第3章讨论):浏览Players页面。所有数据都来自两个服务器端控件——一个连接到数据库的数据源控件和一个显示信息的数据绑定控件。ASP.NET2.0页面的大多数行为都封装在服务器端控件中。这包括像左下位置的购物车链接、诸如左上方球队标志的图片,以及左下方登录区的文本框等。
●登录和安全系统(在第4章讨论):在主页上,使用用户名Lou和口令lou@123登录。然后退出。创建身份验证系统可能需要耗费大量的时间和精力,而且即使如此也会经常出现安全漏洞。ASP.NET2.0提供一个基于多个服务器端控件的简单系统,该系统包括登录和口令验证方案,以及通过电子邮件给出口令提示。
●事件(在第6章讨论):浏览Shop页面,单击一个商品并将其添加到购物车中(当然,这不是真正的购物站点,只是演示而已)。在单击AddtoCart按钮时将触发一个事件,该事件由客户代码处理,主要是创建一个订单并将相应的商品添加到订单中。
●数据读取(在第7章讨论):浏览Players页面,该页面中的姓名和加入日期都是从SQLServerExpress数据库中读取的。这个站点上的很多信息都保存在存储数据的文件中,并由ASP.NET2.0服务器端控件读取。返回主页并观察菜单。就连这些菜单选项都是从一个XML文件中读取的,这个文件包含了站点的地图。
●写数据(在第8章讨论):浏览Shop页面,单击轿车滞销品并单击AddtoCart。这个操作向数据库写入了一条数据。将订单写入数据库的行为是由两个ASP.NET2.0服务器端控件完成的。站点的设计人员不需要编写任何客户代码。
●隐藏在控件之后的代码(在第9章讨论):从主页单击页面左下方的ShoppingCart链接。我们已经编写了客户代码,这些代码将在页面加载时检查购物车中是否有商品,并根据商品的内容显示正确的数据:要么是空列表,要么是商品列表。虽然ASP.NET2.0服务器端控件的功能非常强大,但是它们并不能覆盖所有可能的情况。设计人员可以在ASP.NET2.0站点中的很多地方添加客户代码。
●组件(在第10章讨论):浏览Fixtures页面。虽然数据存储在SQLServer数据库中,但是ASP.NET2.0页面并不直接读取数据。有一个组件负责读取数据并将数据发送给ASP.NET2.0页面。这个组件可以在其他Web站点或运行在本地网络上的Windows应用程序中重用。
●角色(在第11章讨论):如果拥有管理权限,则可以登录并看到不同的页面。在本地开发机上安装本站点后,将在第4章实验这个特性。ASP.NET2.0允许以访客以外的身份登录。不同的用户可以拥有不同的角色,不同的角色拥有不同的权限。这个公共站点只允许几位作者以管理员的身份登录,所以现在不需要查看这个功能。
●电子商务(在第13章讨论):通过菜单浏览Shop页面,单击一些商品,将它们加入购物车。现在单击菜单底部的ShoppingCart并查看其中的内容。这个站点最复杂的部分就是购物车。ASP.NET2.0没有提供电子商务的解决方案,但是因为ASP.NET2.0控件包含了非常丰富的行为,所以设计诸如电子商务这样的复杂系统比以前要快捷得多。
●性能(在第14章讨论)
●错误和异常处理(在第15章讨论)
●部署(在第16章讨论):目前我们并不讨论具体的部署。然而,应该记住ASP.NET2.0站点的部署只需几个步骤。首先将数据库复制到数据服务器上,然后将站点的文件夹及其子文件夹从开发机上复制到新的服务器上。
本节概要地介绍了在阅读本书的过程中将要学习创建的内容。大多数要研究的功能都只需编写非常少量的代码就可以实现。具体的行为由一组服务器端控件执行,这些控件是ASP.NET2.0的组件,Microsoft把代码隐藏在这些控件中。只需将这些控件放置到页面上并设置各种属性即可。
在观察过公开发布的完整站点之后,现在可以开始在开发机上创建自己的站点了。如果还没有安装VisualWebDeveloperExpress、SQLExpress、示例数据库和示例站点(参考附录B)的话,现在请安装它们。仔细阅读附录B中的介绍,然后按照步骤开始进行安装。可以在每个小节的后面执行检查以保证安装成功。
本章和第2章将在学习怎样使用VWD和为站点设置一些设计参数的时候,搭建出本站点的基本架构。因为VWD对大多数任务都提供拖放的解决方案,所以您将以最少的输入创建这个站点。如果必须进行输入,则可以从在www.wrox.com下载的文本文件中剪切并复制相应的内容。在下载得到的文件中,所有页面都已完成,但我们坚信,与简单地复制我们给出的参考中的整个页面相比,更好的学习方法是自己创建ASPX页面。
人类与动物的一个基本差别在于使用工具的能力。在编写代码的早期,编程工具都很简陋。今天,我们可以享受到高级软件开发工具带来的益处。工程师几乎已经研究了人类所有的弱点(基本上都与记忆能力和人类大脑与世界的
接口相关)并创造工具弥补这些弱点。这些工具组合到一起形成一种称为IntegratedDevelopmentEnvironment(IDE,集成开发环境)的软件。本书所使用的IDE是VisualWebDeveloperExpress(VWD)。
VWD包含了很多开发工具。首先是一个编辑器,开发人员将在这个编辑器中创建页面。这个编辑器带有IntelliSense功能,这是一个完成命令输入并为开发人员提供恰当选择的工具。另外,有一个包含图标的工具条,可以将这些图标拖放到编辑器中,这个操作将在编辑器中自动添加一个代码块。另一种向页面自动添加代码的方法是使用处理比较复杂的任务时系统提供的向导。另外,VWD包含了一个最小化的FileManager,用于组织ASPX和相关的文件以及文件夹。类似地,可以使用DataExplorer浏览Web站点的数据源。VWD还包含了一组排查问题的工具。最后,VWD发布时附带了一个用于测试的Web服务器,名称为Cassini,下一节将对其进行介绍。阅读其他相关书籍时,可以发现其他用于处理更为复杂情况的工具,包括在开发小组的成员之间管理代码版本的工具。
1.7.1Cassini Cassini是一个VWD附带的轻量级的Web服务器。Cassini和IIS(包含在.NETFramework中)都可以作为ASPX以及相关页面的服务器,所以在部署时不需要对站点进行修改。但两者之间存在诸多差别。
这两个服务器使用不同的安全模式。IIS是一个服务,而Windows中的每个服务都需要一个用户。IIS的特定用户是ASPNET。Cassini作为应用程序运行,使用当前已登录Windows的用户账户。这使得Cassini更易于安装,因为不需要在Windows中创建ASPNET这个特殊的账户。事实上,Cassini在安装VWD时就已透明地安装在开发机上了。
Cassini有3个弱点。首先,它是开发人员在开发机上测试页面的工具,因此只能有一个用户。其次,由于针对用户模式进行了简化,因此Cassini无法支持可靠的安全模式。Cassini只能在一个封闭的环境中运行,或者能够获得防火墙的保护。再次,在Cassini中运行一个页面时,这个页面在VWD中会被锁定。为了对页面解锁,必须关闭浏览器,这在多次修改和测试站点时是非常不方便的。因此,很多开发人员即使是在开发机上也使用IIS,以免在VWD中修改页面之前必须关闭浏览器。这样做的缺点是必须配置开发机以提供IIS、设置正确的权限、建立安全控制、并创建一个虚拟的根目录。附录B中给出了进行这些设置的步骤。若不想设置IIS,仍然可以使用Cassini,只是在修改之间要关闭浏览器。晕私谠际奔洌颐墙渌诘惆诒菊履柯?C:\BegASPNET2\Chapters\begin\Chapter02)下一个名为web.sitemap.reC