NET框架程序设计(下)ppt.ppt

上传人:za****8 文档编号:16081908 上传时间:2020-09-17 格式:PPT 页数:198 大小:1.85MB
返回 下载 相关 举报
NET框架程序设计(下)ppt.ppt_第1页
第1页 / 共198页
NET框架程序设计(下)ppt.ppt_第2页
第2页 / 共198页
NET框架程序设计(下)ppt.ppt_第3页
第3页 / 共198页
点击查看更多>>
资源描述
.NET框架程序设计(下),第7章 数据流和文件,7.1 流 7.2 Reader和Writer 7.3 基本文件I/O 7.4 小结,7.1 流,7.1.1 基本的流操作 7.1.2 .NET Framework 提供的Stream类,基本的流操作,流有三种基本操作: 1、可以从流读取 读取是从流到数据结构(如字节数组)的数据传输。 2、可以向流写入 写入是从数据结构到流的数据传输。 3、流可以支持查找 查找是在流内对当前位置进行的查询和修改。 查找功能取决于流所表示的后备存储的类型。 基于后台数据源和存储库,不同的流可能只支持上述的某些功能, 应用CanRead、CanWrite和CanSeek属性来了解该流能支持哪些功能。 Read和Write方法支持读/写字节数据。 查找功能的流使用Seek和SetLength方法以及Position和Length属性,.NET Framework 提供的Stream类,System.IO命名空间包含了BufferedStream、MemoryStream和FileStream类,它们都是从System.IO.Stream类继承来的。 CryptoStream类定义了将数据流链接到加密转换的流。,.NET Framework 提供的Stream类System.IO.Stream类,BufferedStream类 MemoryStream类 MemoryStream类提供了一种流的创建方法,这种流可以使用内存作为后备存储,而不是磁盘或网络连接。 MemoryStream类创建的流是来自字节数组的。 FileStream类 FileStream类用来读/写文件。在默认情况下,FileStream类用同步方式打开文件,但是该类也提供了一个可以用异步方式打开文件的构造函数。,BufferedStream类用来对其他流的缓冲区进行读写操作。,.NET Framework 提供的Stream类CryptoStream类,CryptoStream类定义了将数据流链接到加密转换的流。 公共语言运行库使用面向流的设计进行加密。这个设计的核心是CryptoStream。 CryptoStream的任何加密对象可以和Stream的任何对象组成一条链,所以一个对象的流式输出可以作为另一个对象的输入,不需要单独存储中间结果(第一个对象的输出)。,7.2 Reader和Writer,7.2.1 二进制数据的读写 7.2.2 文本数据的读写,常用的Reader和Writer类,二进制数据的读写,将类型为Integer的数据写入一个新的名为ls.txt的空文件流中,并从中读取数据 。 BinaryWriter类把整数从0到10写入ls.txt。 BinaryReader类读取文件并在页面上显示。,BinaryWriter w=new BinaryWriter(fs); for(int i=0;i11;i+) w.Write(i); w.Close(); fs.Close();,BinaryReader r=new BinaryReader(fs); for (int i=0;i11;i+) Response.Write(r.ReadInt32(); r.Close(); fs.Close();,文本数据的读写,相关代码:,protected void Page_Load(object sender, System.EventArgs e) /通过调用file.createtext创建了一个StreamWriter对象 StreamWriter sw; sw=File.CreateText(file_name); sw.WriteLine(第一行数据); sw.Close(); /通过调用file.opentext创建了一个streamreader对象 StreamReader sr; sr=new StreamReader(file_name,System.Text.Encoding.GetEncoding(GB2312); string input; /每一个input就是一行,将每一行作为一个字符串返回 while(input=sr.ReadLine()!=null) Response.Write(input); Response.Write(); ,7.3 基本文件I/O,7.3.1 FileStream类 7.3.2 File和FileInfo类 7.3.3 Directory和DirectoryInfo类 7.3.4 独立存储,FileStream类,FileStream类用于读/写文件。在FileStream的一些构造函数中,FileMode、FileAccess和FileShare类型被作为参数使用。 FileMode参数控制是否对文件执行覆盖、创建、打开等操作,或执行这些操作的组合。 FileAccess枚举为文件的读、写或读/写访问定义了常量。此枚举的FlagsAttribute属性允许按位组合其成员值。在File、FileInfo和FileStream的许多构造函数中都指定了FileAccess参数。 FileShare枚举包含一些常量,用于控制其他FileStream对同一文件所具有的访问类型。此枚举的FlagsAttribute属性允许按位组合其成员值,FileMode参数类使用的常量表,SeekOrigin类的属性表,File和FileInfo类,File和FileInfo类都是实用类,主要包含用于创建、复制、删除、移动和打开文件的方法。 File类的所有方法都是静态的,因此不用创建这个类的实例就可以调用这些方法。 File类的静态方法对所有的方法都执行安全检查 FileInfo类只包含实例方法。安全检查不是必需的。,File和FileInfo类例子,1.创建一个名为ls.txt的文件并返回一个FileStream对象,可使用下面的代码: 2.创建一个名为ls.txt的文件并返回一个StreamWriter对象,可使用下面的代码: 3.打开一个名为ls.txt的文件并返回一个StreamReader对象,可使用下面的代码:,FileStream aStreamFile.Create(“ls.txt”);,StreamWriter sw=File.CreateText(“ls.txt”);,StreamReader sr=File.OpenText(“ls.txt”);,Directory和DirectoryInfo类,Directory和DirectoryInfo类提供用于创建、移动以及遍历目录和子目录的常用方法。 Directory类的所有方法都是静态的,因此不用创建这个类的实例就可以调用这些方法,并对所有的方法执行安全检查。 DirectoryInfo类只包含实例方法,安全检查不是必需的。,Directory和DirectoryInfo类例子,使用DirectoryInfo类来创建一个目录内的列表 : 如果想要另一个目录如C:下的文件列表,记住要使用反斜线()这个转移字符,如 “C:” 或 ”C:,using System.IO; static void Main(string args) DirectoryInfo dr = new DirectoryInfo(.);/路径信息 foreach (FileInfo f in dr.GetFiles(*.*) string full_name = f.FullName; long length = f.Length; Console.WriteLine(fullName+0, full_name); Console.WriteLine(length 0, length); ,独立存储,在System.IO根下找到的基本文件I/O功能提供了访问、存储和操作存储在层次结构的文件系统中的数据的能力,其中的文件可以通过使用唯一的路径来引用。 独立存储是一种数据存储机制,它在代码和保存的数据之间定义了标准化的关联方式,从而提供隔离和安全性。,独立存储(续),隔离 独立存储提供了管理下载的方法,以最大程度地减小存储冲突。 部分受信任代码的安全风险 对部分受信任代码访问计算机文件系统的能力做限制是很重要的。 与文件访问相关的安全风险有时用访问控制列表(ACLs,Access Control Lists)来表述,ACL限制了用户对文件的访问权限。 通过独立存储实现安全 代码不再需要使用唯一的路径来指定文件系统中的安全位置,就可以保护数据以防止未授权的访问,也不必通过硬编码来指定应用程序的存储区域的位置。 可以使部分受信任的应用程序以由计算机安全策略控制的方式存储数据。安全策略很少向这种代码授予使用标准I/O机制访问文件系统的权限。 命名空间System.IO.IsolatedStorage包含了IsolatedStorageFile和IsolatedStorageFileStream类,应用程序可以使用这些类来访问独立存储区的文件和目录。,7.4 小结,本章主要介绍了管理文件系统的相关类,包括使用Steam对象从后备存储读/写字节;使用BinaryReader和BinaryWriter对象以二进制值形式来读写基本类型;使用StreamReader和StreamWriter对象在流中读/写字符;使用StringReader和StringWriter对象在字符串中读/写字符;使用Directory和DirectoryInfo对象在目录和子目录中进行创建、移动和遍历 。,23,第八章 构建Web应用ASP.NET,8.1 ASP.NET应用程序的基本要素 8.2 ASP.NET状态管理 8.3 ASP.NET性能优化 8.4 ASP.NET安全性 8.5 小结,8.1 ASP.NET应用程序的基本要素,8.1.1网站结构 8.1.2ASP.NET生命周期 8.1.3ASP.NET服务器控件,网站结构,Internet网络就是将多个计算机连接起来能够相互传送数据、文件的计算机群。网站就是互联网上的一块固定面向全世界发布消息的地方,由域名(也就是网站地址)和网站空间构成;网站遵循万维网(World Wide Web,WWW)协议,是放在某一个计算机上能够让其他计算机随时访问的网页集合。每个网页包含文字、图片、声音等资料,在其他计算机访问的时候能够呈现在访问者计算机上。 ASP.NET应用程序也称为Web应用程序,即B/S结构体系下的应用软件系统,如OA办公系统、电子商务网站、面向公众的网站等。,网站结构,主要的Web浏览器有以下两种:Internet Explorer(IE)浏览器;Mozilla Firefox是使用效率最高的浏览器,许多在IE浏览器中的安全问题都可以解决。而对于Web服务器,Internet信息服务(Internet Information Services,IIS)是微软公司主推的Web服务器。,ASP.NET网站类型,1)文件系统网站 VS2005使用户可以将网站的文件放在本地硬盘上的一个文件夹中,或放在局域网上的一个共享位置,这样的网站称为文件系统网站。使用这种文件系统网站意味着用户无须将网站作为IIS应用程序来创建,就可以对其进行开发或测试。 使用该类型网站的优点是:用户不希望或者无法在自己的计算机上安装IIS;文件夹中已有一组Web文件,用户希望将这些文件作为项目打开;在教室设置中,学生可将文件存储在中心服务器上特定的文件夹中;在工作组设置中,工作组成员可访问中心服务器上的公共网站。,ASP.NET网站类型,使用该类型网站的缺点是:不能使用基于HTTP的身份验证、应用程序池和ISAPI筛选器等IIS功能测试文件系统网站。 对于文件系统网站,要运行测试网页,其实是通过一个附加工具(ASP.NET Development Server)来完成的,它专门用于构建在本地主机方案(从Web服务器所在的计算机中浏览)中提供或运行的ASP.NET网页。换句话说,ASP.NET Development Server会根据本地计算机上的浏览器请求提供网页,但不会为其他计算机提供网页;此外,它也不会提供应用程序范围外的文件。ASP.NET Development Server提供了在向运行IIS的成品服务器发布网页之前在本地测试网页的有效方式,但它只接受本地计算机上通过身份验证的请求,这就要求服务器可以支持NTLM(NT LAN Manager)验证机制或基本身份验证。,ASP.NET网站类型,2)本地IIS网站 一个本地IIS网站就是本地计算机上的一个IIS Web应用程序,VS2005通过使用HTTP协议可与该网站通信。 使用该类型网站的优点是:可以用IIS测试网站,可以模拟网站在正式服务器中如何运行。相对于使用文件系统网站,这更具有优势,因为路径将按照其在正式服务器上的方式解析。 使用该类型网站的缺点是:必须装有IIS;必须具有管理员权限才能创建或调试IIS网站;一次只有一个计算机用户可以调试IIS网站;默认情况下,为本地IIS网站启用了远程访问。,ASP.NET网站类型,3)远程IIS网站 当要通过使用在远程计算机上运行的IIS创建网站时,可使用远程网站。远程计算机必须配置有FrontPage服务器扩展且在网站级别上启用它。 使用该类型网站的优点是:可以在部署有网站的服务器上测试该网站;多个开发人员可以同时使用同一远程网站。 使用该类型网站的缺点是:远程计算机上的IIS版本必须是5.0或以上;对于调试远程网站的配置可能很复杂;一次只有一个开发人员可以调试远程网站,且当开发人员单步调试代码时,其他所有请求将被挂起。,ASP.NET网站类型,4)文件传输协议(FTP)网站 当网站已位于配置为FTP服务器的远程计算机上时,可使用FTP部署的网站。 使用该类型网站的优点是:可以在部署有FTP网站的服务器上测试该网站。 使用该类型网站的缺点是:没有FTP部署的网站文件的本地副本,除非自行复制这些文件;不能自己创建FTP部署的网站,只能打开一个这样的网站。,默认页,默认页是在用户定位到网站时没有指定特定页的情况下为用户提供的页,这将使用户更容易定位到网站。当创建Web应用的时候,默认创建一个名为Default.aspx的页,并将其保存在根目录中。,应用程序文件夹,ASP.NET识别用户可以用于特定类型的内容的某些文件夹名称,以下列出了保留的文件夹名称以及文件夹中通常包含的文件类型。 App_Browsers:包含ASP.NET用户标识个别浏览器并确定其功能的浏览器定义(.browser)文件。 App_Code:包含希望作为应用程序一部分进行编译的实用工具类和业务对象(如.cs文件)的源代码或子文件夹。在应用程序中将自动引用App_Code文件夹中的代码。在动态编译的应用程序中,当对应用程序发出首次请求时,ASP.NET将编译App_Code文件夹中的代码,以后如果检测到任何更改则重新编译该文件夹中的项。,应用程序文件夹,App_Data:包含应用程序数据文件,包括MDF文件、XML文件和其他数据存储文件。ASP.NET 2.0使用App_Data文件夹来存储应用程序的本地数据库,该数据库可用于维护成员资格和角色信息。 App_GlobalResources:包含编译到具有全局范围的程序集中的资源(.resx和.resources文件)。App_GlobalResources文件夹中的资源是强类型的,可以通过编程方式进行访问。 App_LocalResources:包含与应用程序中的特定页、用户控件或母版页相关联的资源(.resx和.resources文件)。 App_Themes:包含用于定义ASP.NET网页和控件外观的文件集合(.skin和.css文件以及图像文件和一般资源)。,应用程序文件夹,App_WebReferences:包含用于定义在应用程序中使用的Web引用的引用协定文件(.wsdl文件)、架构(.xsd文件)和发现文档文件(.disco和.discomap文件)。 Bin:包含要在应用程序中引用的控件、组件或其他代码的已编译程序集(.dll文件)。在应用程序中将自动引用Bin文件夹中的代码所表示的任何类。 默认创建Web应用并不会产生以上所有文件夹,根据需要手动添加。,网站路径,使用网站中的资源时,通常必须指定资源的路径。例如,可以使用 URL 路径引用页面中的图像文件或网站中其他位置处页面的 URL。同样,Web 应用程序中的代码可以使用基于服务器的文件物理文件路径对文件进行读写操作。 ASP.NET 提供以下两种用于引用资源并确定应用程序中的页面或其他资源路径的方法。,网站路径,1)指定资源的路径 许多情况下,页面中的元素或控件必须引用外部资源(如文件),ASP.NET允许通过各种方法引用外部资源,所选方法取决于使用客户端元素还是服务器控件。 (1)客户端元素。客户端元素以原样传递给浏览器,可以使用完全限定(绝对)URL 路径,也可以使用各种类型的相对路径。根据当前页面路径解析的相对路径: 。解析为当前页面路径对等的相对路径:。 (2)服务器控件。在引用资源的 ASP.NET 服务器控件中,可以使用绝对路径或相对路径,这一点与客户端元素一样。如果使用相对路径,则对于页面、用户控件或包含该控件主题的路径进行解析。,网站路径,服务器控件中的绝对和相对路径引用具有以下缺点:绝对路径在应用程序之间是不可移植的,如果移动绝对路径指向的应用程序,则链接将会中断;如果将资源或页面移动到不同的文件夹,可能很难维护采用客户端元素样式的相对路径。 为克服这些缺点,ASP.NET 启用了Web应用程序根目录运算符(),在服务器控件中指定路径时,可以使用该运算符。ASP.NET 会将运算符解析为当前应用程序的根目录。 注意:运算符只能为服务器控件识别,并且位于服务器代码中。不能将运算符用于客户端元素。,网站路径,2)确定当前网站的物理文件路径 在应用程序中,可能需要确定服务器上的文件或其他资源的路径。例如,如果应用程序以编程方式对文本文件进行读写操作,则必须为用于读取和写入的方法提供该文件的完整物理路径。将物理文件路径(如 C:WebsiteMyApplication)强硬编码到应用程序中并不是很好的做法,因为如果移动或部署应用程序,则路径会发生更改。但是,ASP.NET 为用户提供了以编程方式获取应用程序中的任何物理文件路径的方法,然后,可以使用根文件路径创建所需资源的完整路径。用于确定文件路径的两种最常用的ASP.NET方法是返回路径信息的HttpRequest对象的属性,以及MapPath方法。,应用程序生命周期,在应用程序的生命周期期间,应用程序会引发可处理的事件并调用可重写的特定方法。若要处理应用程序事件方法,可以在应用程序根目录中创建一个名为Global.asax的文件。 Global.asax 文件(也叫做 ASP.NET 应用程序文件)是一个可选的文件,该文件包含响应 ASP.NET 或 HTTP 模块引发的应用程序级别事件的代码。Global.asax 文件驻留在 ASP.NET 应用程序的根目录中。在运行时,ASP.NET 分析 Global.asax 文件并将其编译到一个动态生成的 .NET Framework 类,该类是从HttpApplication 基类派生的;配置 Global.asax 文件,以便自动拒绝对该文件的任何直接 URL 请求,外部用户不能下载或查看其中编写的代码。Global.asax 文件是可选的,如果没有定义该文件,则 ASP.NET 页框架假定没有定义任何应用程序或会话事件处理程序。,生命周期事件,在应用程序生命周期期间使用的一些常见事件和方法如下。 (1)Application_Start:请求ASP.NET应用程序中第一个资源时调用,在应用程序的生命周期期间仅调用一次Application_Start方法。可以使用此方法执行启动任务,如将数据加载到缓存中以及初始化静态值。在应用程序启动期间应仅设置静态数据,由于实例数据仅可由创建的HttpApplication类的第一个实例使用,所以勿设置任何实例数据。 (2)Application_Error:当ASP.NET应用程序中捕获到未处理的异常时调用,用于处理应用级的异常处理代码。 (3)Application_BeginRequest:当HttpApplication实例接收到一个请求时调用。 (4)Application_EndRequest:当处理一个请求完毕后调用,用于应用程序清理资源。,生命周期事件,(5)Session_Start:当新建立一个会话时调用。 (6)Session_End:当会话过期时调用。 (7)Application_End:在卸载应用程序之前对每个应用程序生命周期调用一次。,生命周期事件,这些事件在每个网站的运行过程中会在不同时间点被触发。例如,有两个人先后访问一个电子商务网站,首先用户1访问该网站,那么事件Application_Start将被触发,然后Session_Start与Application_BeginRequest事件也被触发,Session_Start在每次开启一个会话时被触发,而Application_BeginRequest是在每次从客户端浏览器发出请求时触发,服务器端处理完请求后触发Application_EndRequest事件,在用户1选购物品的过程中将不断地触发Application_BeginRequest和Application_EndRequest事件,当用户1购买好商品并下完订单后,关闭浏览器离开,在一定时间内服务器将触发Session_End事件,即用户1的会话终结。然后用户2又开始访问该网站,这将触发Session_Start与Application_BeginRequest事件(由于Application_Start事件在一个应用程序生命周期内只被触发一次,因此它将不被触发),后面过程和用户1一致。最后,如果由于服务器故障或重启,则触发Application_End事件。,ASP.NET 页生命周期概述,当请求ASP.NET页时,便触发一系列Page事件。这些事件总是按照一定的顺序发生,这就是Page事件生命周期。这些事件包括初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及进行呈现。 一般来说,从客户端浏览器开始请求一个ASP.NET网页,至服务器经过处理并输出内容到浏览器的过程需要经历几个阶段,在不同的阶段均要完成特定的处理。ASP.NET页生命周期的各阶段如下。,ASP.NET 页生命周期概述,(1)页请求:发生在页生命周期开始之前,用户请求页时,ASP.NET将确定是否需要分析和编译页,或者是否可以在不运行页的情况下发送页的缓存版本以进行响应。 (2)开始:在开始阶段,将设置页属性,如Request和Response。在此阶段,页还将确定请求是回发请求还是新请求,并设置IsPostBack属性。此外,在开始阶段,还将设置页的UICulture属性。 (3)页初始化:在这个期间,可以使用页中的控件,并设置每个控件的UniqueID属性。此外,任何主题都将应用于页。如果请求是回发请求,则回发数据并不加载,并且控件属性值也不还原为视图状态中的值。 (4)加载:加载期间,如果当前请求是回发请求,这将使用从视图状态和控件状态恢复的信息加载控件属性。,ASP.NET 页生命周期概述,(5)验证:在验证期间,将调用所有验证程序控件的Validate方法,此方法将设置各个验证程序控件和页的IsValid属性。 (6)回发事件处理:如果请求是回发请求,则调用所有事件处理程序。 (7)呈现:在呈现期间,视图状态将被保存到页,然后页将调用每个控件,以将其呈现的输出提供给页的Response属性的OutputStream。 (8)卸载:完全呈现页、将页发送至客户端并准备丢弃时,将调用卸载。此时,卸载页属性并执行清理。,ASP.NET 页生命周期概述,在上述每个阶段中,页将引发可运行用户自己的代码进行处理的事件。对于控件事件,通过以声明方式使用属性或以使用代码的方式,均可将事件处理程序绑定到事件。同时,页还支持自动事件连接,即ASP.NET将寻找具有特定名称的方法,并在引发特定事件时自动运行这些方法。ASP.NET将Page指令的AutoEventWireup属性设置为True时,页事件会自动绑定至使用Page_event命名约定的方法。,ASP.NET 页生命周期概述,常用的页生命周期中的事件如下: (1)Page_Init:在Web窗体的视图状态载入服务器控件并对其初始化。 (2)Page_Load:在Page对象上载入服务器控件。由于此时视图状态信息是可以使用的,因此可以用代码来改变控件的设置或者在页面上显示文本。 (3)Page_PreRender:应用程序将要呈现Page对象。 (4)Page_UnLoad:页面从内存中卸载。 (5)Page_Error:发生未处理的异常。 (6)Page_AbortTransaction:事务处理被终止。 (7)Page_CommitTransaction:事务处理被接受。 (8)Page_DataBinding:把页面上的服务器控件和数据源绑定在一起。 (9)Page_Disposed:Page对象从内存中释放掉,这是Page对象生命周期中最后一个要处理的事件。,HTML服务器控件,默认情况下,服务器无法使用Web窗体页上的HTML元素,这些HTML元素被视为传递给浏览器的不透明文本。但是,添加runat=server属性可以将HTML元素转换为HTML服务器控件,把它们公开为能够用服务器端代码编写的元素。,Web服务器控件,ASP.NET Web服务器控件是ASP.NET网页上的对象,在向浏览器请求页和呈现标记时将运行这些对象。Web服务器控件与HTML服务器控件相比,它的设计侧重点不同,并不一对一地映射到HTML服务器控件,其中有很多一部分类似于HTML元素,但还包括一些特殊用途的控件等。 ASP.NET中大致将Web服务器控件分为6大类:标准控件、数据控件、数据源控件、验证控件、导航控件和登录控件。,Web服务器控件,1)标准控件 AdRotator:该控件将循环显示定义的一系列可单击的横幅广告。 BulletedList:创建一个无序或有序(带编号)的项列表,它们分别呈现为HTML的ul或ol元素。 Button:ASP.NET网页中使用户可以发送命令的按钮。默认情况下,按钮将页提交给服务器,并使页与引发的事件一起被处理。Web服务器控件包括3种类型的按钮:命令按钮(Button控件)、超链接样式按钮(LinkButton控件)和图形按钮(ImageButton控件),这三种按钮提供类似的功能,只是具有不同的外观。 Calendar:在ASP.NET网页中显示一个单月份日历,用户可使用该日历查看和选择日期。 CheckBox和CheckBoxList:为用户提供了一种在“是否”选项间进行切换的方法。前者是单个的复选框控件,后者则作为复选框列表项集合的父控件,常用于与数据库或配置文件中的系列数据绑定使用。,Web服务器控件,DropDownList:可以从单项选择下拉列表框中进行选择。DropDownList控件与ListBox服务器控件类似,不同之处在于它不只在框中显示选定项,同时还显示下三角按钮,当单击此按钮时,将显示项的列表。 FileUpload:通过该控件为用户提供一种从本地计算机向服务器上传文件的方法。 HiddenField:该控件可以将信息保留在ASP.NET网页中,但不会显示给用户。 HyperLink:该控件提供了一种使用服务器代码在网页上创建和操作链接的方法。 Image:该控件可以在Web窗体页上显示图像,并使用服务器代码管理这些图像。 ImageMap:该控件可以创建包含用户可以单击的各区域的图像,这些区域称为作用点。每个作用点都可以是一个单独的超链接,或者可以引发回发事件。,Web服务器控件,Label:该控件为用户提供了一种以编程方式显示ASP.NET网页中文本的方法。 ListBox:该控件允许用户从预定义的列表中选择一项或多项。 Literal:该控件无需添加任何HTML元素即可将静态文本呈现在网页上,可以通过服务器代码以编程方式静态控制文本。 MultiView和View:MultiView控件可用作View空间组的容器。每个View控件也可以包含子控件,如按钮、文本框等。应用程序可以根据条件或传入的查询字符串参数,以编程方式向客户端显示特定的View控件,从而实现多视图。 Panel:该控件在页面内为其他控件提供一个容器。当把多个控件放入一个Panel控件后,就可将它们作为一个单元进行控制,如隐藏或显示它们,以及使用Panel控件为一组控件创建独特的外观。 PlaceHolder:该控件使用户能够将空容器控件放置到页上,然后在运行时动态地将子元素添加到该容器中。 RadioButton和RadioButtonList:允许用户从预定义的列表中选择一项,它们两者的关系与CheckBox和CheckBoxList之间的关系类似。 Substitution:该控件指定输出缓存的网页上不进行缓存的部分,使用它可以在输出缓存的网页上指定希望用动态内容替换控件的部分。,数据控件,GridView:该控件用于显示表中的数据,通过使用它,可以显示、编辑、删除、排序和翻阅多种不同的数据源中的表格数据。 DetailsView:该控件用于显示表中数据源的单个记录,其中每个数据行标识记录中的一个字段。该控件通常与GridView控件组合使用,构成主/从关系。 FormView:该控件用于显示表中数据源的单个记录,使用FormView控件时,由用户指定模板以显示和编辑绑定值。模板中包含用于创建窗体的格式、控件和绑定表达式。该控件通常与GridView控件一起使用,构成主/从关系。 Repeater:该控件是一个数据绑定容器控件,它生成各个项的列表。使用模板定义网页上各个项的布局。当该页运行时,该控件为数据源中的每个项重复此布局。 DataList:该控件使用自定义的格式显示各行数据库信息。在所创建的模板中定义数据显示布局,可以为项、交替项、选定项和编辑项创建模板,也可以使用标题、脚注和分隔符模板自定义DataList的整体外观。,数据源控件,SqlDataSource:通过该控件,可以使用Web控件访问位于关系数据库中的数据。可以将SqlDataSource控件与其他显示数据的控件一起使用,用极少代码甚至不用代码来在ASP.NET网页上显示和操作数据。 AccessDataSource:该控件可连接到Access数据库并使数据库数据用于ASP.NET网页上的其他控件的信息,类似于SqlDataSource。 ObjectDataSource:通过该控件可以将ASP.NET网页上的控件绑定到为应用程序提供数据层的业务对象的信息。 XmlDataSource:该控件使得XML数据可用于数据绑定控件。虽然在只读方案下通常使用XmlDataSource控件显示分层XML数据,但也可以使用该控件同时显示分层数据和表格数据。 SiteMapDataSource:该控件读取网站中页的逻辑布局的相关信息,并将这些信息提供给ASP.NET导航控件。,验证控件,RequiredFieldValidator:要求用户必须输入某一项。 CompareValidator:将用户的输入与一个常数值或者另一个控件或特定数据类型的值进行比较。 RangeValidator:检查用户的输入是否在指定的上下限内。可以检查数字对、字母对和日期对限定的范围。 RegularExpressionValidator:检查与正则表达式定义的模式是否匹配。此类验证能够检查可预知的字符序列,如电子邮件地址、电话号码、邮政编码等内容中的字符序列。 CustomValidator:使用用户自己编写的验证逻辑来检查用户的输入。此类验证能够检查在运行时派生的值。,导航控件,Menu:该控件使用户能够在经常用于提供导航功能的网页中添加功能。Menu控件支持一个主菜单和多个子菜单,并且允许定义动态菜单。 SiteMapPath:该控件会显示一个导航路径,此路径为用户显示当前页的位置,并显示返回到主页的路径链接。 TreeView:该控件用于以树形结构显示分层数据,如目录或文件目录。,登录控件,Login:该控件显示用于执行用户身份验证的用户界面,包含用于用户名和密码的文本框和一个复选框,该复选框让用户指示是否需要服务器使用ASP.NET成员资格存储他们的标识并且当他们下次访问该网站时自动进行身份验证。 LoginView:使用该控件,可以向匿名用户和登录用户显示不同的信息。该控件显示以下两个模板之一:AnonymousTemplate和LoggedInTemplate。在这些模板中,可以分别添加为匿名用户和经过身份验证的用户以显示适当信息的标记和控件。 LoginStatus:该控件为没有通过身份验证的用户显示登录链接,为通过身份验证的用户显示注销链接。 LoginName:如果用户已使用ASP.NET成员资格登录,该控件将显示该用户的登录名。或者,如果网站使用集成Windows身份验证,该控件将显示用户的Windows账户名。,登录控件,PasswordRecovery:该控件允许根据创建账户时所使用的电子邮件地址来找回用户密码,并会向用户发送包含密码的电子邮件。 CreateUserWizard:该控件收集潜在用户提供的信息,默认情况下,会将新用户添加到ASP.NET成员资格系统中。 ChangePassword:通过该控件,用户可以更改其密码。用户必须首先提供原始密码,然后创建并确认新密码。该控件还支持发送关于新密码的电子邮件。,用户控件,除了在ASP.NET网页中使用Web服务器控件外,还可以像创建ASP.NET网页一样创建自定义控件,然后在不同网页中重复使用,这些控件称作用户控件。 用户控件是一种复合控件,工作原理非常类似于ASP.NET网页。因此,可以向用户控件添加现有的Web服务器控件和标记,并定义控件的属性和方法。然后将控件嵌入ASP.NET网页中充当一个单元,并且可以在多个网页上重复使用。用户控件与完整的ASP.NET网页(.aspx文件)很相似,同时具有用户界面页(.ascx文件)和代码,为Web开发人员提供捕获常用Web UI的简便方法。因此,可以采取与创建网页相似的方式创建用户控件,即首先添加所需的标记和子控件,然后添加对控件所包含内容进行操作的代码。,用户控件,用户控件一般具有以下特征: (1)用户控件的文件扩展名为.ascx,可以和网页扩展名(.aspx)很好地区别。 (2)用户控件拥有一个用户界面,它通常是由Web服务器控件和包含在其中的HTML控件构成。 (3)用户控件的代码模型和网页的一致,包括单文件模型和代码隐藏页模型。 (4)用户控件中没有Page指令,而是包含Control指令,该指令对配置及其他属性进行定义。 (5)用户控件中没有html、body或form元素,这些元素必须位于宿主页中。 (6)当使用代码隐藏页模型时,用户控件从System.Web.UI.UserControl类派生,并继承了一些属性和方法。 (7)用户控件不能作为独立文件运行,而必须将它们添加到ASP.NET页中。 (8)用户控件可以被单独缓存,从而提高性能。,8.2 ASP.NET状态管理,8.2.1 服务器端方法 8.2.2 客户端方法,Application对象,ASP.NET应用程序是单个Web服务器上的某个虚拟目录及其子目录范围内的所有文件、页、处理程序、模块和代码的总和。ASP.NET允许用户使用应用程序状态来保存每个活动的Web应用程序的值,这些值保存在SystemWeb.HttpApplicationState类的实例中。HttpApplicationState类的实例在客户端第一次从某个特定的ASP.NET应用程序虚拟目录中请求任何URL资源时创建。对于Web服务器上的每个ASP.NET应用程序都要创建一个单独的实例,然后通过内部Application对象公开对每个实例的引用。 应用程序状态是一种全局存储机制,可从Web应用程序中的所有页面访问。因此,应用程序状态可用于存储需要在服务器往返行程之间及页请求之间维护的信息。,Application对象,应用程序状态的实现可以提高Web应用程序的性能。例如,如果将常用的、相关的静态数据集放置到应用程序状态中,则可以通过减少对数据库的数据请求总数来提高网站性能。但是,这里存在一种性能平衡,当服务器负载增加时,包含大块信息的应用程序状态变量就会降低Web服务器的性能。 应用程序状态存储在一个键/值字典中,可以将特定于应用程序的信息添加到此结构以在页请求期间读取它。通常在Glabal.asax文件中的应用程序启动事件中初始化某个应用程序状态值。也可以通过调用HttpApplicationState类的Add方法将某个对象值添加到应用程序状态集合中,例如: Application.Add(counter,1);,Application对象,由于Web应用是多线程的,因此应用程序状态变量可以同时被多个线程访问。为了防止产生无效数据,在设置值前,必须锁定应用程序状态,只供一个线程写入。具体方法就是通过调用HttpApplicationState类的Lock和UnLock方法进行锁定和取消锁定。例如: Application.Lock(); Applicationcounter= (int)Applicationcounter)+1; Application.UnLock(); 在调用了Lock方法之后,Application对象被锁住,在调用UnLock方法之前,其他的用户都无法访问Application对象,这样就避免了Application对象在修改的过程中被脏读。 通过调用HttpApplicationState类的Get方法读取变量的值。例如: int Counter=(int)Application.Get(counter); 直接读取counter变量的值,不过,在编写实际应用时,还是要先判断该应用程序状态集合中是否存在该变量,然后再读取。,Application对象,可以调用HttpApplicationState类的Set方法,传递变量名和变量值来更新已添加的变量的值。如果传递的变量在应用程序状态集合中不存在,则添加该变量。例如: Application.Set(counter,5); 通过调用HttpApplicationState类的Clear或RemoveAll方法,移除应用程序状态集合中的所有变量;也可以调用Remove或RemoveAt方法来清除某一个变量。例如: Application.Remove(counter); Application.RemoveAt(0);,Application对象,使用Application的优缺点如下 1)使用应用程序状态的优点 (1)易于实现。应用程序状态易于使用,为 ASP 开发人员所熟悉,并且与其他 .NET Framework 类一致。 (2)全局范围。由于应用程序状态可供应用程序中的所有页来访问,因此在应用程序状态中存储信息可能意味着仅保留信息的一个副本(例如,相对于在会话状态或在单独页中保存信息的多个副本)。 2)使用应用程序状态的缺点 (1)全局范围。应用程序状态的全局性可能也是一项缺点。在应用程序状态中存储的变量仅对于该应用程序正在其中运行的特定进程而言是全局的,并且每一应用程序进程可能具有不同的值。因此,不能依赖应用程序状态来存储唯一值或更新网络源和网络场配置中的全局计数器。,Application对象,(2)持久性。因为在应用程序状态中存储的全局数据是易失的,所以如果包含这些数据的 Web 服务器进程被损坏(最有可能是因服务器崩溃、升级或关闭而损坏),将丢失这些数据。 (3)资源要求。应用程序状态需要服务器内存,这会影响服务器的性能以及应用程序的可缩放性。,Session对象,Session(会话)对象用于存储特定的用户会话所需的信息,从一个用户开始访问某个特定的主页开始,到用户离开为止。服务器可以分配给这个用户一个Session,以存储特定的用户信息。用户在应用程序的页之间跳转时,存储在Session对象中的变量不会被清除;而用户在应用程序中访问页面时,这些变量会始终存在。Session实际上就是服务器与客户机之间的“会话”。 HTTP是一个无状态的协议,这意味着它不会自动提示一个请求序列是否都来自相同的客户端,甚至不提示单个浏览器实例是否仍在活跃地查看某个页或网站。因此,如果没有其他基础架构的帮助,要想生成需要维护某些跨请求状态信息的Web应用程序(如购物车等),就会非常困难。,Session对象,与Application对象一样,Session对象也可以存取变量。但是,Session对象存储的变量只针对某个特定的用户,而Application对象存储的变量则可以被该应用程序的所有用户共享。 当不同的用户登录同一个页面时,服务器会为每一个用户分配一个Session。这些Session应该是各不相同的,不然就无法正确识别用户。也就是说,当一个Session创建以后,它应该具有唯一性标志,每一个Session都具有独一无二的SessionID。 如果网站服务器想知道用户是否已经离开,Session是否已经结束,就需要对Session设置一个超时期限。如果用户在这个期限内没有对网站内的任意一个页面提出请求或者刷新页面,那么服务器就可以认为用户已经离开了网站,而结束为该用户创建的Session。系统默认的Session超时期限为20分钟,可以由“Internet服务管理器”来更改这个默认值。,Session对象,Session对象拥有OnStart和OnEnd事件,它们都存在于文件Global.asax中。当一个Session对象被创建时,将触发Session_OnStart事件;当一个Session对象被终止时,将触发Session_OnEnd事件。 ASP.NET会话状态支持若干用于会话数据的存储选项。通过在应用程序的Web.config文件中为sessionState元素的mode属性分配一个SessionStateMode枚举值,可以指定ASP.NET会话状态使用的模式。SessionStateMode枚举值有如下几个选项: (1)InProc模式:将会话状态存储在Web服务器的内存中,这是默认设置。 (2)StateServer模式:将会话状态存储在一个名为ASP.NET状态服务的单独进程中,这确保了在重新启动Web应用程序时会保留会话状态,并让会话状态可用于网络场中的多个Web服务器。 (3)SQLServer模式:将会话状态存储到一个SQL Server数据库中,这确保了在重新启动Web应用程序时会保留会话状态,并让会话状态可用于网络场中的多个Web服务器。 (4)Custom模式:允许用户指定自定义存储提供程序。 (5)Off模式:禁用会话状态。,Session对象,使用会话状态的优缺点如下。 1)使用会话状态的优点 (1)易于实现。会话状态功能易于使用,为 ASP 开发人员所熟悉,并且与其他 .NET Framework 类一致。 (2)会话特定的事件。会话管理事件可以由应用程序引发和使用。 (3)持久性。放置于会话状态变量中的数据可以经得住 Internet 信息服务(IIS)重新启动和辅助进程重新启动,而不丢失会话数据,这是因为这些数据存储在另一个进程空间中。 (4)平台可缩放性。会话状态对象可在多计算机和多进程配置中使用,因而优化了可缩放性方案。 (5)尽管会话状态最常见的用途是与 Cookie 一起向 Web 应用程序提供用户标识功能,但会话状态可用于不支持 HTTP Cookie 的浏览器。,Session对象,2)使用会话状态的缺点 性能降低。会话状态变量在被移除或替换前保留在内存中,因而可能降低服务器性能。如果会话状态变量包含类似大型数据集的信息块,则会因服务器负荷的增加而影响 Web 服务器的性能。,数据库支持,当存储特定用户的信息并且信息存储较大时,通常的做法是使用数据库技术维护状态。对于维护长期的状态或维护即使在服务器必须重新启动的情况下仍必须保留的状态,数据库存储尤其有用。 数据库方法通常与 Cookie 结合起来使用。例如,当某用户首次访问应用程序时,会让该用户登录,可以在数据库中查找该用户并向该用户传递一个Cookie。该Cookie可能只包含用户在数据库中的ID。然后,根据需要在后继的请求中使用该 Cookie 以在数据库查找该用户的信息。 由于 Cookie 可以被修改,因此,在使用它们来存储应用程序所依赖的信息时,应该特别小心,例如,不要将敏感信息存储在Cookie中。如果使用Cookie来存储用户信息,要考虑对Cookie值进行加密或添加逻辑,以确保Cookie的值不会被篡改。,数据库支持,使用数据库来维护状态的优点如下: (1)安全性:对数据库的访问要求严格的身份验证和授权,使得这种访问通常非常安全。 (2)容量:可以根据需要在数据库中存储尽可能多的信息。 (3)持久性:可以根据需要在尽可能长的时间内存储数据库信息,这些信息不受 Web 服务器可用性的影响。 (4)可靠性和数据完整性:数据库包括多种用于维护有效性的功能,其中包括触发器和引用完整性、事务等。通过在数据库中保存有关事务的信息,可以更方便地从错误恢复。 (5)可访问性:存储在数据库中的数据可供多种信息处理工具访问。 (6)广泛支持:有大量数据库工具可供使用,并且有许多自定义配置可供使用。,数据库支持,使用数据库来维护状态的缺点如下: (1)复杂性:使用数据库支持状态管理意味着更复杂的硬件和软件配置。 (2)性能:不合理的关系数据模型结构可能导致扩展问题。此外,对数据库执行过多的查询会影响服务器性能。,客户端方法,使用客户端状态维护技术涉及在页中或客户端计算机上存储信息,而在各往返行程间不会在服务器上维护任何信息。本节主要介绍查询字符串、隐藏域、视图状态和Cookies对象的应用。,查询字符串,查询字符串是在页URL的结尾附加的信息,例如,http:/localhost/Default.aspx?name=admin”。若不需要将这个页面的视图状态关闭,而只是关闭某一个控件的视图状态,那么可以删除Page指令中的EnableViewState属性值设置或将它设置为true,然后将控件的EnableViewState设置为false,这样就可以关闭该控件的视图状态,而其他控件仍然保持默认设置,也就是启用视图状态。,视图状态,如果要控制所有页面是否启用视图状态信息,那么可以在配置文件Web.config的system.web节点下,修改Pages元素的EnableViewState属性,代码如下: 这样所有页面都禁用视图状态,不过仍可以在单独页面中设定开启视图状态信息,只是该页面的设置将覆盖Web.config文件的设置。 关于视图状态的内部处理机制,如图所示。,视图状态,视图状态,使用视图状态的优缺点如下: 1)使用视图状态的优点 (1)不需要任何服务器资源。视图状态包含在页代码内的结构中。 (2)简单的实现。 (3)页和控件状态的自动保持。 (4)增强的安全功能。视图状态中的值是散列的、压缩的并且是为 Unicode 实现而编码的,这意味着比隐藏域具有更高的安全性状态。 2)使用视图状态的缺点 (
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!