《第10章 Web应用程序开发.ppt》由会员分享,可在线阅读,更多相关《第10章 Web应用程序开发.ppt(62页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第10章章 Web应用程序开发应用程序开发ASP.NET是Microsoft的新一代服务器端技术,是.NET框架的一部分。运用C#可以创建Web应用程序。本章将介绍ASP.NET的基本概念及如何使用ASP.NET建立Web应用程序。10.1 ASP.NET简介简介10.1.1 编辑编辑ASP.NET程序程序由于ASP.NET是一种服务器端的技术,ASP.NET代码的运行必须是在Web服务器上。发布ASP.NET程序的条件:Web服务器安装的软件:.NET Framework SDK以及IIS。发布ASP.NET程序的目录:可以将ASP.NET程序代码保存在IIS根目录下,也可以存放在虚拟目录
2、中。10.1.1 编辑编辑ASP.NET程序程序IIS的安装,可以在控制面板“添加/删除程序”中的“添加/删除Windows组件”,选择“Internet信息服务(IIS)”,选择“下一步”直到完成。显示如图10.1所示 图图10.1 IIS安装安装10.1.1 编辑编辑ASP.NET程序程序需要说明的是.NET 安装的顺序应该是先装IIS,再装VS.NET,如果次序反了,或者IIS重装了,就需要使用aspnet_regiis.exe-i来重新安装IIS。在C:%SystemRoot%Microsoft.NETFrameworkv1.1.4322目录下,运行下面的命令:aspnet_regii
3、s.exe i。如图10.2所示。图图10.2 IIS启动启动如果已经安装了Visual Studio.NET,则.NET Framework SDK不需要另外安装,否则要下载安装.NET Framework SDK包。10.1.1 编辑编辑ASP.NET程序程序IIS默认的根目录是“c:Inetpubwwroot”,ASP.NET代码一般就存放在这个根目录下。但是,ASP.NET代码也可通过新建虚拟目录存放在根目录以外。选择“管理工具”的“Internet信息服务”,将鼠标移到“默认网站”位置,右击鼠标。选择“新建”“虚拟目录”。这里将虚拟目录命名为ASP.NET,目录指向D:APS.NET
4、。显示如图10.3所示。图图10.3 建立虚拟目录建立虚拟目录10.1.1 编辑编辑ASP.NET程序程序下面就来新建一个ASP.NET程序。打开Visual Studio.NET,选择“文件”“新建”“项目”,在“新建项目”窗体的项目类型选中Visual C#,右边的模板选择ASP.NET Web应用程序。如图10.4所示。图图10.4 新建新建ASP.NET Web应用程序应用程序当然,创建的项目位置也可以为http:/localhost,项目实际存放在目录“c:Inetpubwwwroot”。将项目名改为Multiply。10.1.1 编辑编辑ASP.NET程序程序逐个添加控件,这个过程
5、与Windows添加控件过程相同。在“视图”“工具箱”,选择“Web窗体”,将控件拖入页面。每一个控件的左上角都有一个小的绿箭头,表示它是一个Web控件。ASP.NET的控件分为两类:HTML控件和Web控件,在后面将作较详细的讲解。将WebForm1.aspx重命名为Multiply.aspx。页面控件设置如表10.1所示。表表10.1 属性修改属性修改10.1.1 编辑编辑ASP.NET程序程序双击EqualButton控件,为EqualButton添加Click事件,如下所示:private void EqualButton_Click(object sender,System.Even
6、tArgs e)ResultLabel.Text=(double.Parse(NumberText1.Text)*double.Parse(NumberText2.Text).ToString();生成解决方案后运行,显示如图10.5所示。图图10.5 Multiply的运行页面的运行页面10.1.1 编辑编辑ASP.NET程序程序Multiply项目文件夹中生成文件的扩展名及说明如表10.2所示。表表10.2 ASP.NET扩展名扩展名10.1.2 ASP.NET程序结构程序结构为了更深入了解ASP.NET,下面分析Multiply.aspx和Multiply.aspx.cs的代码。如果将W
7、eb窗体设计器中的Multiply.aspx从“设计”转换到“HTML”视图,看到的文件非常类似于HTML文件,但与HTML文件又不同。【例例10.1】ASP.NET的页面文件Multiply.aspxWebForm1【例例10.1】Number1 Number2 *【例例10.1】【例例10.1】与HTML文件不同之处在于:上述代码中第一行:Page language=c#表明了采用编程语言为C#,ASP.NET代码也可以采用其它的编程语言,如VB或JScript语言。对应的C#程序文件为Multiply.aspx.cs、对应的代码类为Multiply.WebForm1(Inherits=M
8、ultiply.WebForm1)。Multiply.aspx都是标记语言,所有的程序代码都放在了Multiply.aspx.cs中,ASP.NET这种形式的代码与页面文件的分离,是非常有好处的。Multiply.aspx中标签Label、按钮Button、文本框TextBox之前都加上了前缀“asp:”,表明它们是服务器控件,区别于ASP.NET以前的静态HTML,也区别于ASP.NET的一般HTML控件。每一个服务器控件都有runat=“server”,HTML控件也具有这样的属性,表明它们运行于服务器端,且拥用各种可编程属性及事件。10.1.2 ASP.NET程序结构程序结构【例例10.
9、2】ASP.NET页面的代码文件Multiply.aspx.csusing System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;/包含一些必需的系统类库【例例10.2】namespace M
10、ultiply /Multiply命名空间/WebForm1 的摘要说明。/public class WebForm1:System.Web.UI.Page /WebForm1类从System.Web.UI.Page类继承而来 /System.Web.UI.HTMLControls包含了HTML控件的类 /System.Web.UI.WebControls包含了各种服务器控件 protected System.Web.UI.WebControls.Label NumberLabel1;protected System.Web.UI.WebControls.Label NumberLabel2;
11、protected System.Web.UI.WebControls.TextBox NumberText1;protected System.Web.UI.WebControls.Label MultiplyLabel;protected System.Web.UI.WebControls.TextBox NumberText2;protected System.Web.UI.WebControls.Label ResultLabel;【例例10.2】protected System.Web.UI.WebControls.Button EqualButton;/定义了页面各个服务器控件pr
12、ivate void Page_Load(object sender,System.EventArgs e)/在此处放置用户代码以初始化页面#region Web 窗体设计器生成的代码override protected void OnInit(EventArgs e)/CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。InitializeComponent();base.OnInit(e);/绑定页面,并指定事件处理方法来控制事件。不必编写事件绑定代码,【例例10.2】/使用Visual Studio.NET的Web窗体设计器,事件绑定代码是双击处理程序的控件 /所生成代
13、码的一部分。private void InitializeComponent()this.EqualButton.Click+=new System.EventHandler(this.EqualButton_Click);this.Load+=new System.EventHandler(this.Page_Load);#endregion /EqualButton按钮的Click事件处理函数,相加并显示结果 private void EqualButton_Click(object sender,System.EventArgs e)ResultLabel.Text=(double.Pa
14、rse(NumberText1.Text)*double.Parse (NumberText2.Text).ToString();【例例10.2】可以看出,ASP.NET页面所对应的服务器端代码与在Win Form中所用到的C#代码在结构上几乎一模一样,都有名字空间、类等等,是完全的面向对象的代码结构。这样的结构,大大减小了网页设计与一般Win Form程序设计的差异,它们的设计过程都可以概括成以下模式:将控件拖入页面,修改属性及ID。添加控件的事件处理方法,修改各控件的属性表现,完成功能并显示结果。上面用的是Viusal Stdio.NET创建了ASP.NET程序,实现了页面与后台编码的分离
15、。页面与编码分离的另外一种形式称为代码内联。在EditPlus,UltrEdit或记事本中输入下面的代码,另存为Multiply.aspx。10.1.2 ASP.NET程序结构程序结构【例例10.3】Multiply.aspx代码内联。void EqualButton_Click(object sender,System.EventArgs e)ResultLabel.Text=(double.Parse(NumberText1.Text)*double.Parse (NumberText2.Text).ToString();WebForm1【例例10.3】*从程序看到,相关的标记与C#编写的
16、代码同在一个.aspx文件中。页面的内容存在于中,代码则位于中,也实现页面与编码的分离,结构非常清晰。10.1.3 ASP.NET的特点的特点除了前面提到了提高程序面向对象程度,减少网页程序设计与窗体程序设计的差异外,采用ASP.NET相对于ASP,它具有如下主要特点:功能强大ASP.NET是Microsoft.NET框架的一部分,可以在代码中访问几千个.NET类库,从而具有比ASP更强大的功能。用户界面与商业逻辑的分离ASP.NET中,页面文件(用户界面)与程序代码(商业逻辑)分别存于不同的文件中,这样很方便程序的编辑和维护。当商业逻辑发生变化时,只要修改程序代码即可,页面文件保持不变。提高
17、浏览速度用ASP.NET书写的页面在第一次被访问时会被IIS编译,并在内存中保留编译副本,当以后访问页面时,由于页面已经被编译过,所以,就会直接执行编译过的代码,从而速度为大为改进。当然,由此而造成的“后果”是第一次访问非常慢。支持多种编程语言以前在网页设计中,大多只能选择Java、VB脚本,还有一些Perl作为编程语言。ASP.NET打破了这种限制。事实上,在ASP.NET中,可以选择C#、C+、VB甚至Delphi、Cobol等作为程序设计语言。ASP.NET页面是基于服务器控件构建的Web服务器控件允许使用直观的对象模型来表现和编程,而不再使用HTML元素。10.2 Web Form10
18、.2.1 Web Form基础基础ASP.NET中Web Form指的是一个Web页面,它好像是一个容器,包容了各种控件。有的翻译成Web表单,容易与标记混淆,所以在本书中一般指Web页面。一个页面都是以.aspx为扩展名,如Multiply.aspx。在Web页面中,可以对各种控件建立对应的事件。在上一节中,Button控件的单击Click事件,事件代码则执行两个数的相乘。下面再举个例子。【例例10.4】ASP.NET事件。void Button1_Click(Object sender,EventArgs e)Message.Text=Hello World!;EventShow.aspx
19、【例例10.4】单击按钮查看消息 【例例10.4】运行结果如图10.6所示:图图10.6 EventShow运行页面运行页面10.2.2页面事件页面事件在ASP.NET中,除了控件具有事件外,每次ASP.NET页面在运行时,也会触发Page对象的事件。如表10.3所示。表表10.3 page对象的事件对象的事件【例例10.5】页面事件。/Page对象的Load事件void Page_Load(Object sender,EventArgs e)Message.Text+=发生Page对象的Load事件;/Page对象的Init事件void Page_Init(Object sender,Eve
20、ntArgs e)【例例10.5】Message.Text+=发生Page对象的Init事件;/Page对象的PreRender事件void Page_PreRender(Object sender,EventArgs e)Message.Text+=发生Page对象的PreRender事件;/Page对象的Unload事件void Page_Unload(Object sender,EventArgs e)Message.Text+=发生Page对象的Unload事件;void Button_Click(Object sender,EventArgs e)Message.Text+=用户单击
21、确定按钮,;【例例10.5】PageMessage.aspx【例例10.5】点击“确定”按钮前页面如图10.7所示。图图10.7 点击确定按钮前页面点击确定按钮前页面【例例10.5】点击“确定”按钮后页面如图10.8所示:图图10.8 点击确定按钮后页面点击确定按钮后页面10.2.3 IsPostBack属性属性与eb页面紧密联系的还有page对象的一个重要属性:IsPostBack。Load事件与IsPostBack属性相结合使用,一般用来检查是不是第一次加载Web页面,在此基础上就可以控制程序的流向。【例例10.6】IsPostBack属性示例。void Page_Load(Object
22、sender,EventArgs e)if(IsPostBack=true)Label1.Text=IsPostBack等于true,客户端已经发回数据;else Label1.Text=IsPostBack等于false,第一次打开网页;【例例10.6】PageIsPostBack.aspx【例例10.6】点击“确定”按钮前页面如图10.9所示:图图10.9 PageIsPostBack.aspx点击确定按钮后页面点击确定按钮后页面【例例10.6】点击“确定”按钮后页面如图10.10所示:图图10.10 PageIsPostBack.aspx点击确定按钮后页面点击确定按钮后页面10.3 HT
23、ML控件控件ASP.NET一共有五十多种控件,分成两大类:HTML控件和服务器控件。在每一种普通HTML标记的未尾加上runat=”Server”就成HTML标记的服务器版,因此HTML控件都对应了标准的HTML标记。ASP.NET引入HTML控件的目的就是为了可以将现有的HTML文件简单地转换成ASP.NET的页面。例如:对应HTML标记的HTML控件HTMLImage用法:HTML控件不再使用NAME属性,而是使用ID属性;Runat表示这是服务器端控件,不再是标准的HTML标记。10.3 HTML控件控件表表10.4 HTML控件与标准的控件与标准的HTML标记的对应关系表标记的对应关系
24、表10.3 HTML控件控件【例例10.7】Span的使用。/用户单击确定按钮的处理事件void Button_Click(object sender,EventArgs e)/利用HTML控件的Value方法,获取用户输入的数据Show1.InnerText=UserName.Value;SpanExample.aspx请输入姓名:【例例10.7】输入的用户姓名是:按“确定”按钮后页面如图10.11所示:图图10.11 SpanExample.aspx运行页面运行页面10.3 HTML控件控件【例例10.8】HTML控件举例。/用户单击确定按钮的处理事件void Button_Click(o
25、bject sender,EventArgs e)/利用HTML控件的Value方法,获取用户输入的数据Show1.InnerText=UserName.Value;Show2.InnerText=UserPassword.Value;HtmlExample.aspx【例例10.8】请输入姓名:请输入密码:用户输入的姓名是:用户输入的密码是:【例例10.8】运行结果如图10.12所示。图图10.12 HtmlExample.aspx运行页面运行页面10.4 服务器控件服务器控件HTML控件是为了将以前的标准HTML标记快速转换成ASP.NET页面。ASP.NET的服务器控件是全新设计的,是HT
26、ML的改进,使得它更精确、功能更强大。服务器控件使用的格式:更简单的写法:asp:是服务器控件的固定写法;TextBox表明使用的是TextBox服务器控件;id是控件的名称;Width和Height指控件显示的宽度和高度;runat表明是在服务器端处理。服务器控件可以分成以下几种:10.4 服务器控件服务器控件1.基本服务器控件基本服务器控件可以用基本服务器控件创建标准HTML标记的服务器端版本,以取代HTML控件。基本服务器控件如表10.5所示。表表10.5 基本服务器控件基本服务器控件1.基本服务器控件基本服务器控件上述控件允许设置字体、颜色、边框和样式等属性,常用的属性如表10.6所示
27、:表表10.6 基本服务器控件的常用属性基本服务器控件的常用属性10.4 服务器控件服务器控件2.Web验证控件验证控件为了能够验证客户在表单中输入的数据,ASP.NET引入Web验证控件。Web验证控件如表10.7所示。表表10.7 验证控件验证控件10.4 服务器控件服务器控件3.数据控件数据控件数据控件用于数据的显示,包括DataGrid、DataList、Repeater等控件。4.复杂控件复杂控件复杂控件包括日历控件Calendar、广告条显示控件AdRotator等。5.移动控件移动控件移动控件用于移动设备的控件,这些移动设备诸如手机和像Microsoft Pocket PC那样的
28、PDA(Personal Digital Assistant,个人数字助理)等。10.4 服务器控件服务器控件【例例10.9】Web验证控件RangeValidator示例。/用户单击Button控件的事件处理程序 void Button1_Click(Object sender,EventArgs e)String strA;if(Page.IsValid)strA=输入的成绩是:+Text1.Text;Show1.InnerText=strA;else Show1.InnerText=;Web服务器控件RangeValidator【例例10.9】输入课程成绩:【例例10.9】运行结果页面如
29、图10.13所示:图图10.13 RangeValidator的使用的使用10.4 服务器控件服务器控件【例例10.10】数据控件DataGrid示例。void Page_Load(Object sender,EventArgs e)/定义数据来源DataSet对象 OleDbConnection OBJConn;OleDbDataAdapter OBJDataAdapter;String MSN=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/ tSQL=Select*From courses;OBJConn=new OleDbConnecti
30、on(MSN);OBJDataAdapter=new OleDbDataAdapter(tSQL,MSN);DataSet OBJDataSet=new DataSet();【例例10.10】/将courses表填入DataSet对象 OBJDataAdapter.Fill(OBJDataSet,courses);OBJConn.Close();/设置DataGrid控件的数据来源DataGrid1.DataSource=OBJDataSet;/将DataGRid控件与数据来源连结DataGrid1.DataBind();数据控件示例DataGrid控件使用DataGrid控件显示表【例例10
31、.10】运行结果页面如图10.14所示。图图10.14 DataGrid控件显示控件显示Course表表10.4 服务器控件服务器控件数据控件在运行时动态地给控件的属性赋值的过程称为数据绑定。数据绑定允许控件的属性与数据连接,这里的数据指数据库的数据,以及属性、方法、集合等。DataGrid数据控件以表格形式显示绑定数据。例10.10使用DataGrid数据控件显示student.mdb中的courses表记录值。绑定的过程为:(1)创建DataGrid所需的DataSet对象和数据来源;(2)设置DataGrid控件的DataSource属性:DataGrid1.DataSource=OBJ
32、DataSet;(3)将DataGrid控件与数据来源绑定:DataGrid1.DataBind()。10.5 Web服务创建与应用服务创建与应用10.5.1 Web服务概述服务概述Internet 正在向下一代 Web 站点快速演进,今天的 Web 站点仅能为浏览器提供用户界面,而下一代可编程 Web 站点直接将企业、应用程序、服务和设备彼此链接。这些可编程 Web 站点将不只是被动访问的站点,而将成为可重用的智能 Web 服务。Web服务是可以通过网络远程访问类的属性和方法。先在IIS或其它Web服务器上部署和发布的一个远程对象实体,浏览器或其它分布式应用的客户端可以通过Web服务接入文件
33、(扩展名.asmx)访问该远程对象的属性和方法。下面就来建立Hello World的Web服务。【例例10.11】Hello World Web服务。using System;using System.Web.Services;public class HelloWorld:WebService WebMethod public String SayHelloWorld()return Hello World;10.5.1 Web服务概述服务概述如果文件保存在虚拟目录ASP.NET中,则在浏览器输入地址:http:/localhost/ASP.NET/HelloWorld.asmx。如图10.
34、15所示:图图10.15 HelloWorld Web服务服务 10.5.1 Web服务概述服务概述HelloWorld.asmx向外展现了一个方法:SayHelloWorld。点击SayHelloWorld连接,便可以通过浏览器调用这一方法。如图10.16所示:图图10.16 SayHelloWorld方法调用方法调用10.5.1 Web服务概述服务概述点击调用按钮显示如图10.17所示:图图10.17 SayHelloWorld方法调用结果方法调用结果10.5.1 Web服务概述服务概述在使用Web服务之前,并不要对Web服务文件编译,就像一个ASP.NET页面一样。但是如果不想别人查看你
35、的Web服务的源代码,可以预编译Web服务。将HelloWorld.asmx去掉第一行,创建一个标准的类文件CompiledHelloWorld.cs。【例例10.12】预编译HelloWorld Web服务using System;using System.Web.Services;public class HelloWorld:WebService WebMethod public String SayHelloWorld()return Hello World;【例例10.12】直接用命令行方式将CompiledHelloWorld.cs编译为CompiledHelloWorld.dll
36、:csc/t:library/r:System.dll,System.Web.Services.dll CompiledHelloWorld.cs其中引用了System.dll和System.Web.Services.dll程序集。在ASP.NET目录下再创建一个新目录/bin,将CompiledHelloWorld.dll文件拷贝到/bin目录中。最后建立.asmx文件,引用上面已编译的类。例如:Class特性引用/bin目录中已编译的HelloWorld类。在浏览器地址栏输入http:/localhost/ASP.NET/CompiledHelloWorld.asmx,得到与未编译Hell
37、oWorld Web服务相同的效果。10.5.2 创建简单的创建简单的Web服务服务【例例10.13】摄氏温度和华氏温度之间的转换TemperatureService.asmx。using System;using System.Web.Services;public class TemperatureService:System.Web.Services.WebService WebMethod public double ToCelsius(double TF)return(5d/9d)*(TF-32);WebMethod public double ToFahrenheit(double
38、 TC)return(9d/5d)*(TC+32);【例例10.13】在浏览器地址栏输入http:/localhost/ASP.NET/TemperatureService.asmx,运行如图10.18所示:图图10.18 摄氏温度和华氏温度之间转换摄氏温度和华氏温度之间转换Web服务服务10.5.2 创建简单的创建简单的Web服务服务可以用.NET的SDK中命令行工具wsdl.exe生成代理类。如果安装Microsoft Visual Studio.NET,则可在“开始”“程序”“Microsoft Visual Studio.NET”“Visual Studio.NET工具”“Visual
39、 Studio.NET命令提示符”下执行工具wsdl。如果只安装了SDK,则在C:Program FilesMicrosoft.NETSDK目录下可以找到这个工具。建立一个代理类的步骤如下:使用Wsdl.exe工具生成代理类的源代码;编译该代理类的源代码文件;将编译后的代理类拷贝到/bin目录中。生成TemperatureService Web服务的代理类,可以用如下的命令:wsdl/l:cs http:/localhost/ASP.NET/TemperatureService.asmx?wsdl/l表示用于生成代理类的源代码文件的语言,这里用的是C#。接着是提供给Wsdl的Web服务的WSD
40、L地址,执行生成TemperatureService.cs文件。再将该文件编译成DLL文件。将TemperatureService.dll拷贝到ASP.NET目录的/bin目录下,这样就可以使用这个代理类了。10.5.2 创建简单的创建简单的Web服务服务【例例10.14】使用代理类void Button_Click(Object sender,EventArgs e)TemperatureService objTemp=new TemperatureService();lblCelsius.Text=objTemp.ToCelsius(Double.Parse(txtFahrenheit.Text).ToString(n);ConvertTemperature.aspxFahrenheit:【例例10.14】运行结果如图10.19所示:图图10.19 使用代理类使用代理类