教学材料《Web应用开发》-第八章_第1页
教学材料《Web应用开发》-第八章_第2页
教学材料《Web应用开发》-第八章_第3页
教学材料《Web应用开发》-第八章_第4页
教学材料《Web应用开发》-第八章_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

8.1Web应用程序的调试任何编程人员都不可能避免会在编程过程中出现错误,有些错误并不是一些常见的语法错误或逻辑错误,能否成功调试和避免程序中出现的错误和异常,才是一个真正的编程人员应该做到的。所谓程序调试,是指将编写的程序在实际投入运行前,用手工或编译程序等方法进行测试,修正语法错误或逻辑错误的过程,是保证计算机信息系统正确性必不可少的步骤。下面将介绍ASP.NET常用的几种调试方法。下一页返回8.1Web应用程序的调试8.1.1

用集成的调试工具调试VisualStudio2005.NET内部集成了一个自带的调试工具,如图8-1所示,用它可以调试用C#语言编写的程序和项目,其使用方法也是非常简单和易懂的,比较适合初学者去发现和解决编程过程中存在的错误和异常。程序开发过程中,如果程序编译时需要系统自动编译调试的话,需要在Web.Config配置文件中的设置compilationdebug="true"来将调试符号插入到已编译的页面中。上一页下一页返回8.1Web应用程序的调试但由于这会影响性能,因此只在开发过程中将此值设置为True,在系统投入正式运行使用的时候将其设置为False。<configuration><system.web><compilationdebug="true"/></system.web></configuration>上一页下一页返回8.1Web应用程序的调试下面介绍编译时调试和断点调试两种调试方法。1.编译时调试当编写完一个程序模块后都要验证程序的正确性,可以让正在编写的程序运行一下,然后看其运行的结果是否和事先设想的一样。程序在运行的过程中要对现有的程序进行编译和解释,如果代码中存在一些错误,编译器会及时发现错误,并将错误信息显示在错误列表中,如图8-2所示。上一页下一页返回8.1Web应用程序的调试程序的错误信息不但显示在VisualStudio2005.NET错误列表中,还显示在运行的Web页面中,并提示测试人员错误在哪里,以及简单的处理办法,如图8-3所示。2.断点调试断点是使调试器在某个特定点上暂时将程序执行挂起,当执行到某个断点处并挂起时,程序处于中断模式,在中断模式下,可以检查它们的位置和状态,以查看是否存在错误或bug,并在中断模式下对程序进行调整。上一页下一页返回8.1Web应用程序的调试断点调试是十分有效的调试方法,与逐行逐句地检查代码方式不同的是,可以让程序一直执行,直到遇到断点,然后开始调试。这种方法大大地加快和细化了程序调试过程,利用这种方法可以轻松地面对更大程序的调试。1)设置断点在调试程序的过程中,可以对程序中的任何一行添加断点,添加断点的方法有两种。上一页下一页返回8.1Web应用程序的调试①用鼠标对准要添加断点的代码行,在其左侧空白区单击,这时在空白区域中就会出现一个深红色的断点图标,同时代码颜色也变成深红色,再单击该断点图标,即取消断点设置。②第二种方法,是将光标插入要设置断点的代码行的任何位置,按F9键,就为该行代码设置断点,再按F9键,即取消断点的设置。上一页下一页返回8.1Web应用程序的调试设置断点的效果图如图8-4所示。2)管理断点可以通过“断点”窗口来管理已经设置的断点,如图8-5所示。如图8-5所示,通过“断点”窗口可以激活和禁用已经设置的断点,当复选框被选中时,该段点为激活状态,反之为禁用状态。“断点”窗口中还包括断点所在的文件名和位置,以及命中的次数。上一页下一页返回8.1Web应用程序的调试3)设置条件断点上面的例子中设置的断点在调试时,只要调试器调试到该断点,执行就会暂停,这种断点也可以称为无条件断点。在实际调试过程中,并不需要调试器每次遇到断点就暂停,这时条件断点就非常有用了,可以通过设置条件断点,让程序在符合条件的时候暂停执行。上一页下一页返回8.1Web应用程序的调试设置条件断点的方法很简单,在代码窗口选中要设置条件断点的断点,右击,在弹出的快捷菜单中选择“断点”命令,再在弹出的子菜单中选择“条件”命令,就可以弹出“断点条件”对话框,如图8-6所示,当i值只有大于等于50的时候才挂起。4)运行断点当程序程序调试运行到断点处时,程序暂停执行,被执行到的断点处代码将以黄色显示,此时可以通过表8-1中的功能键进行调试。上一页下一页返回8.1Web应用程序的调试如图8-7所示示例,当利用断点进行调试过程中,可以通过局部变量窗口查看程序在运行过程中局部变量i的取值变化情况。上一页下一页返回8.1Web应用程序的调试8.1.2

用Response.Write调试在程序开发过程中,遇到一些错误是很正常的,有些错误是很容易发现和解决的,如当代码行最后少敲入一个分号的时候,程序在运行调试的时候,编辑器就会提示开发人员错误的原因和位置。但是有的时候,程序没有明显的语法或逻辑错误,可是程序结果不正确,这时候,可以通过Response.Write方法将运算过程中的一些中间值输出出来,看看运算过程中是不是存在问题。上一页下一页返回8.1Web应用程序的调试[例8-1]编写一个求1~100之间3和5的倍数之和的程序,其代码如下所示:protectedvoidPage_Load(objectsender,EventArgse){ints=0;//保存3和5的倍数之和用for(inti=1;i<=100;i++)上一页下一页返回8.1Web应用程序的调试{if(i%3==0||i%5==0){s=s+i;}}Label1.Text="1-100之间3和5的倍数之和为:"+s.ToString();}上一页下一页返回8.1Web应用程序的调试程序在编译运行过程中很正常,并没有报出任何错误,运行结果如图8-8所示。仔细想想,该程序的运算结果是有问题的,1~100之和为5050,1~100之间3和5的倍数之和一定不会有2418这么大。可以用Response.Write将程序每次循环的运算结果显示出来,查看运算过程中是否存在问题,代码如下所示:上一页下一页返回8.1Web应用程序的调试protectedvoidPage_Load(objectsender,EventArgse){ints=0;intj=1;//保存3和5循环次数intd=0;//保存上一次3和5的倍数之和用for(inti=1;i<=100;i++)上一页下一页返回8.1Web应用程序的调试{if(i%3==0||i%5==0){d=s;//保存上一次总和s=s+i;//保存本次总和Response.Write("第"+j.ToString()+"循环S="+d.ToString()+"+"+i.ToString()+"="+s.ToString()+"<br>");上一页下一页返回8.1Web应用程序的调试j=j+1;//循环次数增1}}Label1.Text="1-100之间3和5的倍数之和为:"+s.ToString();}加上Response.Write后程序的运行效果如图8-9所示。上一页下一页返回8.1Web应用程序的调试由于该运行页面内容太多,只截取10次循环的输出结果。从这10次循环的输出结果不难发现,这个程序算的并不是3和5的倍数,而是3或5的倍数,这样就很明显地发现了程序的问题。应该把if语句中的条件修改为if(i%3==0&&i%5==0),修改后的运行结果如图8-10所示。修改后,程序的运算结果就正确了,问题也解决了,之后只需要将Response.Write语句和其他的辅助语句去掉就可以了。上一页下一页返回8.1Web应用程序的调试从上面这个例子可以看到Response.Write调试方法在程序开发过程中的作用是很明显的,在很多情况下能够解决一些实质性的问题,给编程人员带来很大的帮助。上一页下一页返回8.1Web应用程序的调试8.1.3

用try…catch…finally调试在C#程序中,当出现某个异常错误的时候,就会创建一个异常对象,包含异常信息。.NET提供了许多预定义的异常类,这些异常类都派生于System.Exception这个异常类。为了在C#代码中处理可能的错误情况,一般把程序的相关部分分成try…catch…finally3个代码块:①try块包含的代码组成了程序的正常操作部分,但可能遇到某些错误异常;上一页下一页返回8.1Web应用程序的调试②catch块包含代码处理各种错误异常,这些错误异常是try块中的代码执行过程中产生的;③finally块包含释放资源的代码,有时候可以省略。[例8-2]下面以一个登录窗口的身份验证为例,使用try…catch…finally调试,代码如下所示:privatevoidbutton1_Click(objectsender,EventArgse)上一页下一页返回8.1Web应用程序的调试{stringyhm=textBox1.Text.Trim();stringmm=textBox2.Text.Trim();stringsql="select*fromuserPasswhereuid='"+yhm+"'andpassword='"+mm+"'";SqlConnectionconn=null;SqlCommandcmd=null;上一页下一页返回8.1Web应用程序的调试stringstrConn=Properties.Settings.Default.TestConnectionString;try//以下为有可能出现异常的代码块{if(yhm!=""&&mm!="")//用户名和密码文本框不能为空上一页下一页返回8.1Web应用程序的调试{conn=newSqlConnection(strConn);conn.Open();//连接数据库cmd=newSqlCommand(sql,conn);SqlDataReadersdr=cmd.ExecuteReader();sdr.Read();上一页下一页返回8.1Web应用程序的调试if(sdr.HasRows)//通过验证{Response.Write("登录成功!!!");……//登录成功后执行的一些操作}else//用户名或密码有问题{上一页下一页返回8.1Web应用程序的调试textBox1.Text="";textBox2.Text="";//清空代码textBox1.Focus();//聚焦光标Response.Write("用户名或密码有问题,请重新输入!!!");}}上一页下一页返回8.1Web应用程序的调试else//用户名或密码未输入{Response.Write("用户名或密码未输入!!!");textBox1.Focus();}}catch(Exceptionex)//抛出异常上一页下一页返回8.1Web应用程序的调试{Response.Write(ex);}finally//释放资源{cmd.Dispose();conn.Dispose();返回上一页下一页8.1Web应用程序的调试}}程序运行效果略,当程序在执行过程中当遇到数据库连接或数据库操作以及其他的一些异常,catch就会抛出异常,由Response.Write(ex),将异常信息显示出来。关于try…catch…finally更高级和更详细的用法,大家可以参考其他关于异常处理的书籍,这里就不再赘述了。返回上一页下一页8.1Web应用程序的调试8.1.4

用Web.Config控制调试在ASP.NET中,可以在Web.Config文件中使用CustomErrors元素,来实现对所有页面错误的统一处理,打开错误提示网页。在Web.Config配置文件中错误处理代码的语法如下:</configuration></system.web><customErrorsmode="On"defaultRedirect="GenericErrorPage.htm">上一页下一页返回8.1Web应用程序的调试<errorstatusCode="403"redirect="NoAccess.htm"/><errorstatusCode="404"redirect="FileNotFound.htm"/></customErrors></system.web></configuration>上一页下一页返回8.1Web应用程序的调试Web.Config文件中CustomErrors元素的属性作以下说明。(1)defaultRedirect属性:一个可选的属性,指定出错时将重定向到默认的出错页面,如果未指定该属性值,则显示一般性的错误。(2)mode属性:一个必选属性,错误信息显示的模式,主要有以下三种。上一页下一页返回8.1Web应用程序的调试①On,指定启用自定义错误。②Off,指定禁用自定义错误。③RemoteOnly,指定仅向远程的客户端显示自定义错误,并且向本地主机显示ASP.NET错误,RemoteOnly是mode属性的默认值。(3)Error元素:用来指定特殊错误号的处理,如当错误号为403或404时就会导航到NoAccess.htm或FileNotFound.htm页面中。上一页下一页返回8.1Web应用程序的调试[例8-3]下面用一个例子阐述用Web.Config控制调试错误页面。(1)启动VisualStudio.NET2005,打开Chapter8项目。(2)在该项目下创建一个名为Web_Error.aspx的窗体文件,对其编写如下代码:protectedvoidPage_Load(objectsender,EventArgse)上一页下一页返回8.1Web应用程序的调试{Response.Write("发生错误的页面是:"+Request.Url.ToString());}(3)打开Web.Conifg配置文件,添加如下代码:<?xmlversion="1.0"?><configuration>上一页下一页返回8.1Web应用程序的调试<appSettings/><connectionStrings/><system.web><compilationdebug="true"/><authenticationmode="Windows"/><customErrorsmode="On"defaultRedirect="Web_Error.aspx">上一页下一页返回8.1Web应用程序的调试<errorstatusCode="403"redirect="NoAccess.htm"/><errorstatusCode="404"redirect="FileNotFound.htm"/></customErrors></system.web></configuration>上一页下一页返回8.1Web应用程序的调试(4)再新建一个名为WebConfigTest.aspx的窗体文件,在其中添加一个TextBox控件和一个Buttton控件,将Button控件的Text属性改为“提交”。(5)运行时在文本框中输入“<br>”后单击“提交”命令按钮,由于请求验证过程检测到有潜在危险的客户端输入值“<br>”,对请求的处理已经终止,并导航连接到Web_Error.aspx页面中,运行效果如图8-11和图8-12所示。上一页下一页返回8.1Web应用程序的调试8.1.5

用trace(跟踪)所谓trace,指的是跟踪调试,它可以对程序中各个变量的值和代码执行情况进行跟踪,查找到程序出错的根源,为后面的程序修改提供帮助。ASP.NET提供了两种跟踪服务,一个是页面级跟踪,一个是应用程序级跟踪。①页面级跟踪:编程人员可以使用TraceContext内部对象,在页面上编写自定义的调试语句,这些语句在客户端的浏览器执行后,跟踪的信息输出到页面的末尾。上一页下一页返回8.1Web应用程序的调试上一页下一页返回②应用程序级跟踪:提供一次查看对应用程序页的多个请求的功能。1.页面级跟踪编程人员需要手动在页面源代码的“@page”中设置页面级跟踪,其代码如下所示:<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="8-4.aspx.cs"8.1Web应用程序的调试Inherits="_8_4"Trace="true"TraceMode="SortByTime"%>TraceMode跟踪模式有以下两种。①SortByTime:按跟踪信息的处理时间顺序对跟踪信息进行排序。②SortByCategory:是根据跟踪信息的警告级别分类排序。上一页下一页返回8.1Web应用程序的调试[例8-4]下面举一个页面级跟踪的例子。(1)启动VisualStudio.NET2005,打开Chapter8项目。(2)在该项目下创建一个名为8-4.aspx的窗体文件,在其头部的“@Page”指令中,添加上面的代码。(3)按F5键运行,如图8-13所示。2.应用程序级跟踪上一页下一页返回8.1Web应用程序的调试页面级跟踪只是在当前页面中显示跟踪信息,如果要想让整个项目中所有的页面都显示跟踪信息,这时就需要使用应用程序级跟踪。应用程序级跟踪不像页面级跟踪那样在“@Page”指令中设置,而是在Web.Config配置文件中利用trace元素设置的,其格式如下所示:</configuration></system.web><traceenabled="true“requestLimit="50"上一页下一页返回8.1Web应用程序的调试localOnly="false"pageOutput="true"traceMode="SortByCategory"mostRecent="true"/></system.web></configuration>下面对trace元素提供的属性作以下说明。①enabled:是否启动程序级跟踪。②requestLimit:支持的最大的跟踪请求数。上一页下一页返回8.1Web应用程序的调试③localOnly:跟踪查看器是否在主机上可用。④pageOutput:是否在页面中输出跟踪信息。⑤traceMode:跟踪信息输出时的显示模式,按时间顺序还是按警告级别显示。⑥mostRecent:是否要在跟踪查看器中显示最新的跟踪信息,此属性与requestLimit相关联。在Web.Config配置文件中加入上面那些代码,在8-4.aspx运行页面的地址栏中将8-4.aspx改为trace.axd,这样就显示了应用程序级的所有跟踪信息,如图8-14所示。上一页返回8.2

Web应用程序的部署Web应用程序开发完成后,就要考虑如何进行部署和发布。一般情况下,应尽可能将部署简单化,以使用户有非常好的用户体验。几乎所有的开发工具都提供了部署技术,虽然部署方式不尽相同,但是目的都是一样的。以往对于Web应用程序的安装部署都是十分复杂的,但从ASP.NET1.1起,使用VS.NET提供的部署模板,Web应用程序的安装部署工作变得十分简单、方便。下面介绍VisualStudio2005提供的两种部署方式。下一页返回8.2

Web应用程序的部署8.2.1XCopy部署XCopy部署只需要把程序集复制到目标机器上,就可以部署功能完善的应用程序。这个部署技术来自于DOS命令中的xcopy.exe,无论程序集中的文件或文件夹的数据有多少,只需要把程序原封复制过去,程序就会正常运行。XCopy部署技术是在.NET刚一推出时就广泛使用的部署方式,此种部署方式不但占用的资源比较少,而且使用比较方便。可以通过本地的虚拟目录部署远程的网站,部署过程就像复制文件夹一样简单。上一页下一页返回8.2

Web应用程序的部署[例8-5]下面以一个具体的实例介绍XCopy部署过程。(1)启动VisualStudio.NET2005,打开Chapter8项目。(2)选中解决方案资源管理器中网站的根目录,然后右击,在弹出的快捷菜单中选择“复制网站”命令后打开“复制网站”页面,如图8-15所示。上一页下一页返回8.2

Web应用程序的部署(3)单击复制网站页面上“连接到”列表框右边的“连接”图标按钮,在弹出的“打开网站”对话框中单击左侧的“本地IIS”导航按钮,展开“默认站点”,单击右上角的“创建新Web应用程序”图标按钮,新站点命名为“MyWebSite”,如图8-16所示。(4)选中MyWebSite站点,单击“打开”按钮,MyWebSite站点会在如图8-15右侧的远程网站中打开,但内容为空。上一页下一页返回8.2

Web应用程序的部署(5)在右侧远程网站的空白处右击,在弹出的快捷菜单中选择“同步网站”命令,这时当前网站中的内容被复制到右侧的MywebSite站点中了,如图8-17所示。(6)打开“Internet信息服务”对话框(IIS),展开默认网站就会看到刚才创建的MyWebSite站点和站点中的文件,如图8-18所示。(7)测试MyWebSite站点的运行效果如图8-19所示,和预期效果是一样的。上一页下一页返回8.2

Web应用程序的部署8.2.2Web应用程序安装部署使用Web应用程序安装部署,可以像安装软件那样一步一步地部署Web站点,并且对源代码进行了编译,保障了应用程序的安全性。1.创建Web安装[例8-6]下面以一个具体的实例为例介绍Web应用程序安装部署过程。(1)启动VisualStudio.NET2005,打开Chapter8项目。上一页下一页返回8.2

Web应用程序的部署(2)如果没有生成Web.Config配置文件,按F5键运行自动生成,右击Default.aspx文件,将其“设为起始页”。(3)选中“解决方案资源管理器”中网站的根目录,然后右击,在弹出的快捷菜单中选择“发布网站”命令,弹出“发布网站”对话框,如图8-20所示。(4)记住在“发布网站”对话框中更改“目标位置”文本框中的发布目标中的路径,有利于以后找到发布的文件。也可以在什么都不修改的情况下,单击“确定”按钮,当状态栏中显示发布成功时,此时Web应用程序的开发和编译已经完成。上一页下一页返回8.2

Web应用程序的部署(5)选择“文件”|“新建”|“项目”命令,在“新建项目”对话框“其他项目类型”下的“项目部署”中选择“Web安装项目”,并将其默认名称改为“MyWeb”,如图8-21所示,记住其保存的路径。(6)单击“确定”按钮后,打开“文件系统”界面,如图8-22所示,左边为目录区,右边为文件列表区。上一页下一页返回8.2

Web应用程序的部署(7)右击目录区中的“Web应用程序文件夹”,在弹出的快捷菜单中选择“添加”|“文件”命令,弹出“添加文件”对话框。(8)在弹出的“添加文件”对话框中,定位到第(5)步中的发布保存地址,选中全部文件(不包括bin文件夹)后单击“打开”按钮,此时文件列表区中可以看到添加进来的文件。上一页下一页返回8.2

Web应用程序的部署(9)右击目录区的bin文件夹,在弹出的快捷菜单中,选择“添加”|“文件”命令,在弹出的“添加文件”对话框中选择bin文件夹下的所有文件,单击“打开”按钮,右面文件列表区中就可以看到添加进来的文件。此步骤结束后已经在安装项目中添加了所有需要添加的文件。(10)为了避免安装目标计算机没有安装.NET框架,在打包的时候还需要将.NET框架一同打包进安装文件夹。在“解决方案资源管理器”中右击根结点,在弹出的快捷菜单中选择“属性”命令,弹出的对话框如图8-23所示。上一页下一页返回8.2

Web应用程序的部署(11)单击“系统必备”按钮,弹出“系统必备”对话框,如图8-24所示。(12)在“请选择要安装的系统必备组件”列表中,选中.NETFramework2.0和Windows

Installer3.1复选框,在“指定系统必备组件的安装位置”单选按钮组中,选中第二个单选按钮“从与我的应用程序相同的位置下载系统必备组件”。上一页下一页返回8.2

We

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论