1 / 38

互联网软件开发与应用

互联网软件开发与应用. 任课教师:陆 铭 联系电话: 66134267 QQ: 22839978 PoPo:richard.du@163.com 教学网站: mingler.ccshu.org. 4.1 ASP.NET 简介 4.1.1 ASP.NET 的历史 4.1.2 ASP.NET 的优越性 4.1.3 ASP.NET 中的文件类型 4.1.4 ASP.NET 的编程语言 4.1.5 ASP.NET 丰富的 Web 控件 4.2 Web 页面 4.2.1 Web Form 4.2.2 Web 页面处理过程 4.2.3 Web Form 事件模型

alyson
Download Presentation

互联网软件开发与应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 互联网软件开发与应用 任课教师:陆 铭 联系电话:66134267 QQ: 22839978 PoPo:richard.du@163.com 教学网站:mingler.ccshu.org

  2. 4.1 ASP.NET简介 4.1.1 ASP.NET的历史 4.1.2 ASP.NET的优越性 4.1.3 ASP.NET中的文件类型 4.1.4 ASP.NET的编程语言 4.1.5 ASP.NET丰富的Web控件 4.2 Web页面 4.2.1 Web Form 4.2.2 Web页面处理过程 4.2.3 Web Form事件模型 4.3 服务器端控件 4.3.1 文本输入控件 4.3.2 按钮控件 4.3.3 复选控件 4.3.4 单选控件 4.3.5 列表框 4.3.6 RequiredFieldValidator 4.3.7 ValidationSummary 4.3.8 选择控件 4.3.9 ImageButton控件 4.3.10 列表控件 4.4 自定义控件 4.4.1 代码和模板的分离 4.4.2 自定义控件 4.4.3 组合控件 4.4.4 继承控件 4.5 数据库编程 4.5.1 基本概念 4.5.2 通过ADO.NET访问数据库 4.6 性能优化 第四章 ASP.NET介绍

  3. 4.4 自定义控件

  4. 自定义控件概述 • Asp.net中提供的增加内嵌服务器控件的功能,使用户能够多次地轻松增加其所定义的各种控件 • 表单等各种控件可以不用更改或稍微更改一下就可以多次使用 • 通常情况下将一个服务器控件的web表单统称为用户控件,用一个扩展名为.ascx的文件予以保存,避免将其作为一个web表单来运行 • 在 .aspx文件中要使用用户控件时,先要用register方法来定义,然后才能在 .aspx中调用

  5. 自定义控件定义和调用示例 • 定义语句示例 <% @ register TagPrefix="Acme" TagName="Message" Src="saidy.ascx" %> • 含义 • TagPrefix 为用户控件确定一个唯一的名字空间 • TagName 为用户控件确定一个唯一的名称 • 名称值Message 可以根据使用者的需要任何改变 • Src 确定用户控件所在的文件名称和路径 • 调用语句示例 < Acme:Message runat="server"/ >

  6. 代码和模板的分离 • 模板保存在扩展名为 .ascx的文件中 • 模板的作用 • 将输入的代码与编排的界面分离 • 模板确定了文档的界面格式,且模板可以重复使用 • 编写 asp.net程序时可以使用模板 • 在 asp.net 程序编写中使用模板可以大大简化主程序代码 • 模板的定义 • 使用 <template> 和 </template> 标记符定义模板 • 存放在 .ascx 文件中

  7. 自定义控件 • 用户自己创建的服务端控件称为 pagelet • Pagelet的创建、注册和调用 • 应用实例:创建一个pagelet用来返回一个消息,存放在文件welcome.ascx中 • 在 welcome.ascx 文件中创建 pagelet <!– welcome.ascx --> 欢迎到我家来做客,请常回家看看! • 在 .aspx 中注册该pagelet <% @ register TagPrefix="wmg" TagName="wm" Src="welcome.ascx" %> • 在 .aspx 中使用该控件 <wmg:wm runat="server" >

  8. 组合控件 • 定义 • 以类组合形式把已有的控件编译后形成自己定制的控件 • 组合控件在效果上与利用内置控件形成的用户自定义控件一样,不同之处在于,用户自定义控件含有一个 .ascx 的纯文本控制文件,组合控件利用了编译后的代码 • 步骤 • 重新定义从 control 继承来的 CreateChildControls 方法 • 如果组合控件要保持于页面上,要完成名字空间 System.Web.UI.INamingContainer 的接口

  9. 继承控件 • 问题的提出 • .net平台为我们提供了大量功能强大的服务器控件,但是否真的满足了我们的所有的需求 • 当我们需要某种控件的部分功能又不希望花太多的力气去实现,是否可以利用现有的控件来实现 • 我们希望对某种控件进行改造,使它具有自己所希望的外形或结果,而不是以他缺省的方式运行 • 我们是否可以把自己经常用到的逻辑规则或者是应用界面做成用户控件,使用它就如同使用服务器控件一样方便 • 问题的解答 • 在面向对象的设计方法中,可以使用“继承”的手段来解决 • 通过“继承”现有对象,可以最大限度地利用现有的开发成果 • 利用“重载”和“多态”,可以在继承的基础上形成自己的应用特点 • 通过“封装”技术,使应用更加简洁并对外隐蔽内部实现,实现代码重用

  10. 继承控件的实现步骤 (1) • 微软的 .net平台支持面向对象的设计方法,支持并鼓励用户在应用中设计和使用自己定义的控件 • 设计用户自己的控件的步骤 • 从System.Web.UI.Control类继承并形成自己的类 • 为继承Control类,需引入System、System.Web、System.Web.UI类库 • VB环境中使用 Imports标识来引入 • 定义一个名字空间以容纳多个类 • VB环境下使用Namespace和End Namespaces标识来定义一个名字空间 • 定义一个类使用Class 类名 和 End Class标识对 • 为表明类之间的基础关系,还要使用Inherits来标识 • 继承控件的类定义框架 注明引用的类库 定义名字空间 注明类之间的继承关系 自定义对象类

  11. 定义内部变量 定义内部变量提供给外部使用的存取方法 继承控件的实现步骤 (2) • 定义自己的属性和方法 • 属性的定义 • 属性的定义较为复杂,首先是定义内部变量,可以是Public或Private,为Public时,可以被外部直接存取。这种方法在面向对象方法不提倡。为 Private时,不能直接被外部存取,只有通过内部提供的属性定义方式来存取 • 定义完变量后,对需要提供给外部使用的内部变量进行属性存取方式的定义 • 方法的定义 • 定义比较灵活,可以根据设计要求,提供相应的功能。 • 如:创建或初始化类的方法

  12. 继承控件的实现步骤 (3) • 定义自己的应用界面 • 一个用户自定义的控件一般比较复杂,往往由一个以上的内置控件构成 • 使用多于一个的内置控件时,需要重载从control类继承来的CreateChildControls方法,并在其中生成界面控件 • 如果用户定义的控件会在一个页面中反复使用,最好是implements System.Web.UI.INamingContainer,它会为该控件创建一个唯一的命名空间

  13. 继承控件的实现步骤 (4-1) • 定义自己控件的消息处理函数 • 自定义控件含有两种类型的消息 • 子控件所产生的消息,自定义的控件消息 • 子控件所产生的消息 • 子控件产生的消息处理函数可由AddHandler函数来指定 • 具体用法:AddHandler 子控件名 . 消息,AddressOf • 应用案例:自定义控件中含有一个Button控件,处理函数MyBtn_Click() • 程序示例

  14. 定义事件说明 定义事件发出函数 定义事件发生的过程 定义事件触发函数 继承控件的实现步骤 (4-2) • 自定义的控件消息 • 自定义的控件消息需要先定义事件说明,格式如下: Public Event 消息名(Sender as Object, E as EventArgs) • 应用案例 Public Event Change(Sender as Object, E as EventArgs) • 然后定义事件发生函数 • 应用案例 Protected Sub OnChange (E as EventArgs) RaiseEvent Change(Me, E) End Sub • 然后再定义引起事件发生的过程(也可以没有) • 应用案例 Private Sub TextBox_Change (Sender as Object, E as EventArgs) OnChange(EventArgs, Empty) End Sub • 最后定义何时触发事件函数,同样使用AddHandler函数

  15. 继承控件的实现步骤 (5) • 继承控件的使用 • 首先将预先编写的继承控件编译成 .DLL 文件 • 编译格式 vbc /t:library /out: MyDll.dll /r: System.Web.dll MyVb.vb • 说明 • vbc vb.net的编译器 • /t: 表示编译类型,library 为链接库,exe为独立可执行文件 • /out: 指定输出文件名 • /r: 表示需要引用的Dll文件 • MyVb.vb 自己编写的继承控件 • 然后在 .aspx文件头进行注册,使自己的页面中可以引用自定义的界面控件 <% @ Register TagPrefix="标记前缀" Namespace="命名控件" %> • 最后如同使用内置控件一样,在页面中使用自己定义的控件 <命名空间名:类名 …… runat=server />

  16. 4.5 数据库编程

  17. 基本概念 • ASP.NET中的ADO.NET和ASP中的ADO相对应,它是ADO的改进版本。在ADO.NET中,通过Managed Provider所提供的应用程序编程接口(API),可以轻松地访问各种数据源,包括OLEDB和ODBC所支持的数据库 • Managed Provider和DataSet是ADO.NET中的两个最重要的概念

  18. Managed Provider • ADO.NET的Managed Provider是一个多层结构的无连接的一致的编程模型

  19. Managed Provider • Managed Provider提供了DataSet和数据中心(如:MS SQL)之间的联系。Managed Provider包含了存取数据中心(数据库)的一系列接口 • Managed Provider主要包含三个部件 • 连接对象Connection、命令对象Command、参数对象Parament提供了数据源和DataSet之间的接口。DataSetCommand接口定义了数据列和标映射,并取回一个DataSet • 数据流提供了高性能的、前向的数据存取机制,通过IdataReader,用户可以轻松而高效地访问数据流 • 更底层的对象允许用户连接到数据库,然后执行数据库一级的特定命令

  20. 关于Managed Provider的说明 • 过去,数据处理主要依赖两层结构,并且是基于连接的,连接断开,数据就不能再存取了 • 现在,数据处理延伸到三层以上,相应地,程序员需要切换到无连接的应用模式 • DataSetCommand在ADO.NET中扮演了极其重要的角色,它可以取回一个DataSet,并维护一个数据源和DataSet之间的通道,以便数据的访问、修改和保存 • DataSetCommand自动将数据的各种操作变换到数据源相关的合适的SQL语句 • 从图中可以看出,四个对象分别替换了数据库上的查询、插入、更新、删除的操作

  21. Managed Provider的事务处理能力 • 事务处理的概念 • 当一次数据库上的处理没有完全完成时,数据库的操作不能算成功完成。事务处理就是确保在数据库上的操作能够按要求完全处理完成。 • Managed Provider利用本地的OLEDB通过COM Interop来实现数据存取,OLEDB本身支持自动的和手动的事务处理,所以Managed Provider也提供了事务处理的能力

  22. DataSet • DataSet是ADO.NET的中心概念,可以把DataSet想象成是内存中的数据库 • DataSet可以使程序员编程时屏蔽数据库之间的差异,获得一致的编程模型: DataSet支持多表、表间关系、数据约束等,这些和关系数据库的模型基本一致

  23. DataSet对象介绍 (1) • TablesCollection • DataSet里的表是用DataTable来表示的,DataSet可以包含许多DataTable,这些DataTable构成了TablesCollection对象 • DataTable定义在System.Data中,代表了内存中的一张表,它包含一个称为ColumnsCollection的对象,代表数据表的各个列的定义 • DataTable也包含了一个RowsCollection对象,这个对象包含了DataTable中的所有数据 • DataTable保存了数据的状态,通过存取DataTable的当前状态,可以知道数据是否被更新或者删除了

  24. DataSet对象介绍 (2) • RelationsCollection对象 • 各个DataTable之间的关系通过DataRelation来表达,这些DataRelation形成一个集合,称为RelationsCollection,它是DataSet的子对象 • DataRelation表达了数据表之间的主键—外键关系,当两个有这种关系的表之中的某一个表的记录指针移动时,另一个表的指针也随之移动。 • 同时,一个有外键的表的记录更新时,如果不满足主键—外键约束条件,更新就会失败 • 通过建立各个DataTable之间的DataRelation,可以轻松实现在ASP中需要通过DataShaping才能实现的功能

  25. DataSet对象介绍 (3) • ExtendedProperties对象 • DataSet的附加属性对象,在这个对象中,可以定义特定的属性信息,如:密码、更新时间等信息

  26. 通过ADO.NET访问数据库 • ASP中通过ADO访问数据库的四个步骤 • 创建一个到数据库的链路,即ADO.Connect • 查询一个数据集合,即执行SQL,产生一个Recordset • 对数据集合进行需要的操作 • 关闭数据链路 • ADO.NET的最重要概念之一是DataSet,DataSet是不依赖于数据库的独立数据集合 • 独立的含义就是即使断开数据链路,或者关闭数据库,DataSet照样可以使用 • ASP中使用非连接记录集合(Connectionless Recordset),DataSet就是这种技术的最彻底的替代品

  27. 通过ADO.NET访问数据库 • ASP.NET中通过ADO.NET访问数据库的步骤 • 创建一个数据库链路 • 请求一个记录集合 • 把记录集合暂存到DataSet • 如果需要,返回第 2 步(DataSet可以容纳多个数据集合) • 关闭数据库链路 • 在DataSet是进行所需要的操作 • DataSet内部是用XML来描述的,所以DataSet实际上可以容纳具有复杂关系的数据,且不再依赖于数据库链路 • XML是一种平台无关的、语言无关的数据描述语言,可以描述复杂数据关系的数据,如父子关系的数据

  28. ADO.NET对象模型 (1) • ADOConnection对象 • 与ADO的ADODB.Connection对象相对应,ADOConnection维护一个到数据库的链路 • 为了使用ADO.NET对象,我们需要引入两个NameSpace • System.Data 和 System.Data.ADO • 利用 Import 指令将名字空间导入 <% @ Import NameSpace = "System.Data" %> <% @ Import NameSpace = "System.Data.ADO" %> • 与ADO的Connection对象类似,ADOConnection对象也有Open和Close两个方法 • Open:提供数据链路打开的操作 • Close:提供关闭数据链路的操作 • ADO.NET提供了两种数据库连接方式 • ADO 方式 和 SQL 方式

  29. ADO.NET对象模型 (2) • ADODataSetCommand对象 • 该对象专门负责创建DataSet对象 • ADO.NET对象中还有一个重要的对象DataView,它是Dataset的一个视图 • 因为Dataset可以容纳各种各样关系的复杂数据,而通过DataView可以将Dataset的数据限制在某个特定的范围中 • 应用实例 • 利用ADODatasetCommand为"Author Information"对应的Dataset填充数据

  30. ADO.NET对象模型 (3) • DataGrid对象 • 利用ADOConnection对象实现了与数据库的连接操作,通过ADODatasetCommand对象完成了数据库的数据填充,现在需要将Dataset中的数据显示在客户端的网页上 • 显示Dataset的常用控件DataGrid,它是ASP.NET中的一个HTML控件,可以很好地表现一个表格,表格的外观可以任意控制,甚至可以显示分页表格 <asp:DataGrid id="DataGridName" runat="Server"> • 问题是如何将Dataset绑定到DataGrid上 • 一般来说,需要将一个Dataview绑定到DataGrid上,而不是直接绑定到Dataset上 • Dataset上有一个缺省的Dataview可以使用,将它与DataGrid绑定

  31. 4.6 性能优化

  32. 基本概念 (1) • 页面输出缓存通过保存动态页面的输出内容,提高服务器应用的能力 • 缺省情况下,输出缓存选项是打开的,但不是任意给定的输出响应都将被缓存,除非显式地指定页面缓存 • 为了使输出能够被缓存,输出响应至少应有一个有效的过期/有效策略以及公用cache访问权限 • 当一个GET请求被送往页面,即创建一个输出缓冲入口 • 对该网页的GET请求和HEAD的请求将直接从该缓冲入口中取出返回给用户 • 对该页面的POST请求通常是显式地产生动态内容,即POST请求不同于GET和HEAD请求那样从缓冲入口取出

  33. 基本概念 (2) • 输出缓存还支持戴请求串的GET方法 • 请求串作为页面识别的一部分 • 带有相同键值但排列次序不同的请求串的GET请求,可能导致缓存认为不存在该输出的页面 • 页面缓存的过期/有效时间策略 • 输出缓存需要知道保存在缓冲区中信息什么时候过期 • 强制过期策略 • 页面只在一定时间内有效 • 如一个页面在输出缓存中被指定为60分钟的有效期,则从它进入输出缓存开始的60分钟后,该页面将从输出缓存中被清除。如果恰在此时有一个对该页面的请求到达,页面代码将被执行,页面输出又将重新进入输出缓存 • 显式地指定页面在输出缓存中的保存时间 <% @ OutputCache Duration = 秒数 %>

  34. 页面数据缓存 • Asp.net提供了一个相当出色的缓存引擎机制 • 允许页面保存和索引HTTP请求所要求的各种对象 • Asp.net的缓存对各个应用来说是私有的,是存储各种对象的存储器 • 缓存的生命周期取决于应用的生命周期 • 当应用重新启动,缓存也将被重建 • 缓存提供了一个简单的字典接口 • 开发者能够轻而易举地放置对象到缓存中以便以后使用 • 放置一个对象到缓存中就如同对字典增加一个条目 • 应用实例 • 将MyValue放入缓存中一个叫myKey的缓存对象中 Cache("myKey") = MyValue • 对myKey的引用举例 tmpValue = Cache("myKey") If tmpValue <> Null then ...... end if

  35. 缓存替换策略(1) • 腐烂搜索 (Scavenging) • 类似于“最近最少使用”替换原则,当内存变得比较紧张时,缓存机制会找出最不常用和最不重要的对象,把它从内存中移出,以减轻系统压力 • 为控制“腐烂搜索”的具体行为,编程者必须在插入缓存对象时,指明插入对象的耗费和多少时间内必须存取一次才能继续留在缓存中,供替换时抉择

  36. 缓存替换策略(2) • 到期控制(Expiration) • 编程者指定缓存对象的生存周期的策略,这种指定的时间可以是绝对的也可以是相对的 • 绝对时间 • 确切的某个时间点,如:上午8:30,下午6:00 等 • 相对时间 • 以对象创建的时间为基准点的相对间隔,如:该对象距最近一次存取它的时间满10分钟到期 • 当一个缓存对象到期后,它将从缓冲内存中移出,此时该对象的索引将得到 null 的值,除非又重新插入该对象

  37. 缓存替换策略(3) • 文件和键值依赖 • 从外部文件或其他缓存键值的是否改变,来决定本身键值是否有效的策略 • 如果所依赖的发生改变,缓存对象将变得不可使用并从缓存中移出 • 案例 • 一个应用程序从XML文件中读出金融信息并构造一个图形对象以表示销售情况,该文件会定期地被修改 • 当应用程序读入文件时,它把数据插入缓存中,并记录下文件的依赖关系。当文件发生修改时,应用程序使开始产生的缓存对象失效并从内存中移出,然后重新读入文件的数据,再把更新后的数据放入缓存,完成信息的同步更新,并返回给最终用户

  38. 关于复习练习 • 在全面通读教材的基础上练习各项练习题 • 练习时先按实战要求自己完成,做完后再看答案 • 看答案时不要只是背答案,而要认真分析答案给出的解题思路,并能举一反三,真正弄懂弄通,达到融会贯通的效果 • 在反复练习的基础上,逐步练习完整的试卷 • 试卷练习同样要以实战为基点,按时按量进行联系,时间到了立即停止,然后按照答案进行评分 • 对做错的题进行认真分析,找到错误的原因。同样不是背答案,掌握解题思路,及时总结每套试卷练习中的得失。 • 模拟试卷是综合练习,也是按照考试的要求命题的,因此练习时也要按照考试的要求进行,以便调整做题心态,养成良好的临场状态

More Related