《[计算机软件及应用]WEB编程讲义》由会员分享,可在线阅读,更多相关《[计算机软件及应用]WEB编程讲义(78页珍藏版)》请在金锄头文库上搜索。
1、第一章 .Net简介及开发环境的建立1.1WEB基础HTTP协议 HTTP代表Hypertext Transfer Protocol(超文本传输协议)。HTTP是一个基于文本的协议,定义了Web浏览器和Web服务器如何进行通信。HTTP请求是指从浏览器向Web服务器发出的搜索某个Web网页的请求。当Web服务器收到这个请求之后,就会按照请求的要求,找到相应的网页。如果可以找到这个网页,那么就把网页的HTML代码通过网络传回浏览器;如果没有找到这个网页,就发送一个错误信息给发出HTTP请求的浏览器。后面的这些操作称为HTTP响应。 HTML 标签将客户端数据传输给服务器。当用户单击一个“提交(s
2、ubmit)”类型的按钮时,浏览器将该窗体所属的所有控件的内容组合成一个字符串。然后将该字符串作为GET或POST命令的一部分传递给服务器。下面的HTML片段说明一个简单的窗体,该窗体包含一个文本框和一个提交按钮。不难看出,该窗体将POST命令和default.aspx URL关联在一起: 下面是用户单击该提交按钮后向服务器提交的报文:POST /default.aspx HTTP/1.1Host: Content-Type: application/x-www-form-urlencodedContent-Length: 12EmpCode=1001WEB服务器Web是基于客户-服务器的一种
3、体系结构,一般用户的计算机称为客户机,用于提供服务的机器称为服务器。在Web方式下客户端软件常用浏览器,客户机向服务器发送请求,要求执行某项任务,而服务器执行此项任务,并向客户机返回响应。因此,Web体系结构可以称为浏览器-服务器结构(B/S结构) 基于Web的数据库应用采用3层客户-服务器结构,也称为Brower/Server/Database Server结构。第一层为浏览器,第二层为Web服务器,第三层为数据库服务器。浏览器是用户输入数据和显示结构的交互界面,用户在浏览器表单中输入数据,然后将表单中的数据提交并发送到Web服务器,Web服务器应用程序接受并处理用户的数据,并从数据库中查询
4、用户数据或把用户数据录入到数据库。最后Web服务器把返回的结果插入HTML页面,传送到客户端,在浏览器中显示出来。 例如:最简单的登录和注册静态网页静态网页就是用纯HTML代码编写的网页。这些网页的代码是用一些编辑器输入的,或者是用一些网页设计程序生成的,保存为.html或.htm文件的形式。由于这些网页中没有任何与用户相关的部分,所以在设计完成之后,这类程序不会被服务器端执行,所以无论是哪个用户访问这个网页,在什么时候访问这个网页,以何种方式进入这个网页,它的样子都不会发生任何变化。采用静态网页会导致很大的局限性,如果希望为用户显示一些个性化的信息,使用静态网页将无法达到这个目的。 动态网页
5、动态网页的扩展名一般为.asp或.aspx。在浏览这类网页的时候,必须先在服务器端执行程序,再将执行结果下载到本地浏览器上。这类程序会被服务器端执行,因执行的条件不同,所产生的结果也会有所不同。 静态网页和动态网页的主要区别在于:静态网页是在发出请求之前预先生成,而动态网页则是在发出请求之后动态生成的。客户端代码与服务器端代码客户端代码可以采用Java Script、Java Applets、甚至Flash应用程序格式。客户端代码包含在向浏览器传递的HTML中,属于静态网页的一部分。服务器端代码:Web应用程序会对传递给HTTP请求的数据进行在服务器端响应,完成数据库进行查询,还可以执行其他必
6、须的处理,然后生返回到浏览器的页面内容(HTML加上客户端代码)。1.2 .NET概述.NET对于.NET,微软自己也没有一个详细确切的定义。但是可以这样认为:.NET是微软公司要提供的一系列产品的总称。具体说来,.NET由下面的四个部分组成:.NET战略、.NET Framework、.NET企业服务器和.NET开发工具。.NET Framework是.NET战略的核心。.NET Framework分为以下几个部分:MS中间语言、CLR、.NET Framework类库、.NET语言、ASP.NET和Web服务。 托管代码托管代码:指创建于CLR之上的软件 。由公共语言运行库环境(而不是直接
7、由操作系统)执行的代码 。托管代码是可以使用20多种支持Microsoft .NET Framework的高级语言编写的代码,它们包括:C#, J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及C+。所有的语言共享统一的类库集合,并能被编码成为中间语言(IL)。运行库编译器(runtime-aware compiler)在托管执行环境下编译中间语言(IL)使之成为本地可执行的代码,并使用数组边界和索引检查,异常处理,垃圾回收等手段确保类型的安全。CLR现在的计算机编程语言的执行方式分为两种,一种是编译执行(C、C+、VB等),
8、一种是解释执行(Python、Java Script、HTML)。编译执行是指源程序代码先由编译器编译成可执行的机器码,然后再执行;解释执行是指源代码程序被解释器直接读取执行。编译执行和解释执行各有优缺点,比如我们说编译执行的语言通常执行效率高,而解释执行的语言通常可以灵活的跨平台。编译执行一次性将高级语言源程序编译成二进制的可执行指令。而解释执行是由该语言(如HTML)运行环境(如浏览器)读取一条该语言的源程序,然后转变成二进制指令交给计算机执行。如果把高级语言源代码比作一本外文书籍,那么编译执行就是一次性翻译成中文,然后你再看;而解释执行就是你拿着个翻译机,读一行翻译一行的看。这里要注意的
9、是,我们说编译执行的程序,源代码需要一个叫编译器的装置编译成操作系统可执行的机器码,形式比较统一,而解释执行就不一样了,它的形式和方法各异,我们说网页HTML代码它是靠浏览器解释执行的,而可以在Office中使用的脚本语言VBScript却是由Office来负责运行的。从Java语言开始,一种新的程序语言执行方式产生了,这就是“中间码+虚拟机”执行机制。这种执行方式,程序语言源代码需要被编译成一种特殊的中间码,这种中间码是不能直接执行的,它需要一个叫“虚拟机”的装置来管理和执行,可以是解释执行也可以是编译执行。因为“虚拟机”可以参与和管理程序代码的执行,因此解决了很多传统编译语言一些致命的缺点
10、,如垃圾内存回收、安全性检查等。也是因为如此,.NET框架也采用了此种语言执行方式,这里管理和执行中间码“虚拟机”在.NET框架中就是公共语言运行时(CLR),它负责管理和执行由.NET编译器编译产生的中间语言代码整个执行过程是这样的,首先我们在开发环境Visual Studio .NET中编写C#代码,然后这些源代码被Visual Studio .NET中内置的C#编译器编译成中间语言代码(中间语言是一种类似于汇编的程序语言,还不是机器码,我们后面会专门介绍),最后中间语言代码由操作系统中.NET Framework的组件CLR管理和执行。Linux操作系统中运行和编辑.NET程序的平台,就
11、是Mono平台。该平台包括有C#编译器、公共语言运行时以及相关的一套.NET类库。Mono平台可使开发者开发的.NET应用程序不仅能在Windows上运行,也能在任何支持Mono的操作系统上运行,包括现有的Linux和UNIX操作系统。. NET里面的CLR和Java里面的虚拟机JVM是不同的,我们说Java的虚拟机一般是解释执行的,而CLR是编译执行,是在应用程序第一次被调用时一次性编译成机器码再执行,这样做的好处一个是尽可能的避免了解释执行所带来的效率降低的问题;另外可以做到充分利用本机资源,CLR可以针对本地的资源进行优化编译问题:我们知道,在.Net之前C和VB编写的程序的执行效率差距
12、很大。试问C编写的.Net应用程序和VB编写的.Net应用程序在执行效率上的差距大吗?为什么?答案:否定的。原因是无论C#编写的.NET还是VB编写的.NET,他们都是采用上述“中间码+虚拟机”执行机制,先由编译器编译成MSIL,然后由CLR管理执行的;同时也告诉大家对于.net开发,VB和C#没有任何差别,都100%兼容于CLS。但许多人为什么说C#的性能高于VB.net呢?这是因为VB.net支持即时编译,就是一边书写代码一边编译。这样可立刻发现语法错误,使调试变得更加容易。但是这样一来VB就需要随时浏览整个代码文件,并把临时数据储存。这造成VB.net生成的代码中常常具有冗余部分。但也不
13、能就此下结论说VB比C#慢,当用户选择打开优化并且以Release方式编译工程,就能得到与C#一样简短快速的代码。MSIL编译为托管代码时,编译器将源代码翻译为 Microsoft 中间语言 (MSIL),这是一组可以有效地转换为本机代码且独立于 CPU 的指令。MSIL 包括用于加载、存储和初始化对象以及对对象调用方法的指令,还包括用于算术和逻辑运算、控制流、直接内存访问、异常处理和其他操作的指令。要使代码可运行,必须先将 MSIL 转换为特定于 CPU 的代码,这通常是通过实时 (JIT) 编译器来完成的。由于公共语言运行库为它支持的每种计算机结构都提供了一种或多种 JIT 编译器,因此同
14、一组 MSIL 可以在所支持的任何结构上 JIT 编译和运行。元数据当编译器产生 MSIL 时,它也产生元数据。元数据描述代码中的类型,包括每种类型的定义、每种类型的成员的签名、代码引用的成员和运行库在执行时使用的其他数据。MSIL 和元数据包含在一个可移植可执行 (PE) 文件中,此文件基于并扩展过去用于可执行内容的已公布的 Microsoft PE 和公共对象文件格式 (COFF)。这种文件格式包含 MSIL 或本机代码以及元数据,使得操作系统能够识别公共语言运行库映像。文件中的元数据以及 MSIL 的存在使代码能够描述自身,这意味着不再需要类型库或接口定义语言 (IDL)。运行库在执行过
15、程中根据需要从该文件中查找并提取元数据。程序集*程序集可以是静态的或动态的。静态程序集可以包括 .NET Framework 类型(接口和类),以及该程序集的资源(位图、JPEG 文件、资源文件等)。静态程序集存储在磁盘上的可移植可执行 (PE) 文件中。您还可以使用 .NET Framework 来创建动态程序集,动态程序集直接从内存运行并且在执行前不存储到磁盘上。您可以在执行动态程序集后将它们保存在磁盘上。程序集(Assembly)是.NET程序的最小组成单位。每个程序集都有自己的名称、版本等信息。程序集通常表现为一个文件(.exe或.dll文件),这样的程序集被称为单文件程序集,这种程序集是最常见的。程序集也可以由多个文件组成,每个文件都是一个模块文件或者是一个资源文件,这样的程序集被称为多文件程序集单文件程序集的生成这是最常见的程序集,使用 Visual Studio 只能生成单文件程序集。使用 csc.exe 能够很轻松地生成单文件程序集:csc.exe /target:library /resource:Hello.jpg Hello.cs上述命令执行后,会生成一个名为 Hello.dll 的文件,该文件组成了单文件