资源描述:
第2章电子商务网站开发实用技术,本章要点,本章首先介绍了目前最常用的动态网站开发技术ASP、ASP.NET、JSP和PHP的发展历程,然后,从快捷、实用的角度,对ASP技术在动态网站开发中的具体方法进行了详尽的介绍,尤其是对ASP中包含的开发者可利用的内置对象的应用进行了深入细致的剖析,并附加了相应的应用实例,同时,还对与其相关的Web数据库技术进行了详尽的叙述。然后,对ASP.NET技术的开发运行环境和基本语法进行了介绍,最后,对JSP和PHP技术进行了概要性的介绍。,2.1电子商务网站开发技术,动态网站的页面是指基于ASP、ASP.NET、JSP、PHP等技术并以ASP、ASP.NET、JSP、PHP文件形式存储在Web服务器上的网页文件。它可以包含以下几个方面的内容文本、图片和多媒体素材HTML标记实现页面风格,页面进行排版。动态脚本动态脚本是一系列的命令和指令。,2.2ASP技术,1ASP概述2ASP的内建对象和应用组件3Request对象4Response对象5Session对象6Cookie的应用7Application对象8Server对象9ASP程序设计举例,ASP(ActiveServerPages,活动服务器网页)是一种运行于服务器端的Web应用程序开发技术,它既不是一种语言,也不是一种开发工具,而是一种服务器端的脚本语言环境。本节将介绍ASP技术的特点及工作原理,并通过实例详细介绍ASP中的5个常用对象的属性、方法和事件,使读者学会利用ASP技术开发Web应用程序,,2.2.1ASP技术简介,ASP的特点ASPActiveServerPages,活动服务器网页ASP的特点全嵌入HTML,与HTML、Script语言完美结合无须手动编译(Compling)或链接程序面向对象(ObjectOriented),并可扩展ActiveXServer组件功能存取数据库轻松容易(使用ADO组件)存取数据库轻松容易(使用ADO组件)可使用任何语言编写自己的ActivXServer组件无浏览器兼容问题程序代码隐蔽,在客户端仅可看到由ASP输出的动态HTML文件,,ASP的工作原理,ASP技术通过后缀名为.asp的文件来实现当浏览器向Web服务器请求调用ASP文件时,就启动了ASPWeb服务器响应该HTTP请求,调用ASP引擎,解释被申请的文件ASP的脚本程序是在服务器端执行,2.2.2ASP开发工具简介,1通用的文本编辑器2专门针对编程的文本代码编辑器3具有集成开发环境的开发工具4ASP程序全自动生成器,2.2.3构建ASP开发运行环境,安装IIS信息服务器操作步骤如下启动“添加/删除程序”应用程序,出现“添加/删除程序”对话框单击“添加/删除Windows组件”按钮单击“下一步”按钮,系统开始安装安装完成后,单击“完成”按钮,即可结束IIS的安装过程,ASP的运行环境,设置Web站点设置虚拟目录在“Internet信息服务”窗口,右击“默认Web站点”,选择“新建”“虚拟目录”,出现“虚拟目录创建向导”对话框单击“下一步”按钮,在“虚拟目录创建向导”对话框中,输入虚拟目录名book单击“下一步”按钮,通过“浏览”下拉列表选择要设置为虚拟目录的文件夹(放置ASP文件的文件夹)单击“下一步”按钮,设置虚拟目录的访问权限单击“下一步”按钮,完成虚拟目录的设置,ASP文件的结构,一个ASPWeb页面可以包含以下4个部分普通HTML文件,用普通Web页面编程。客户端脚本程序代码,通常用和定界符括起来。服务器端ASP程序代码,用定界符括起来。Server_SideInclude语句,使用include语句在Web页面中嵌入其他Web页面,其中,是标准的ASP程序定界符,而和是客户端脚本或服务器端脚本定界符,2.2.4ASP语法简介,Request对象,Request对象的主要功能是从客户端取得信息,包括获取浏览器种类、表单中的数据、Cookies中的数据和客户端认证等,语法如下Request[.数据集合|属性|方法]变量内部对象Request拥有以下5个数据集合取得客户端表格元素中所填入的信息。QueryString取回URL请求字符串。ServerVariables取得服务器端环境变量的值。ClientCertificate从客户端取得身份验证的信息。Cookies取得客户端浏览器的Cookies值,数据集合,表单是标准HTML文件的一部分,它允许用户利用表单中的文本框、复选框、单选按钮、列表框等控件为服务器端的应用提供初始数据,用户通过单击表单中的命令按钮提交他们的输入数据,其使用语法如下Request.String参数[(索引.计数)]QueryString数据集合QueryString数据集合可以利用QueryString环境变量来获取客户请求字符串。一般来讲,这个HTTP查询字符串变量直接定义在超链接的URL中,即跟在“”字符之后,其语法如下Request.QueryString变量名称[(索引.计数)],ClientCertificate数据集合,ClientCertificate数据集合从Web浏览器发布的请求中获取验证字段其使用语法如下Request.ClientCertificateKey[SubField]Cookies数据集合Cookies数据集合用来记录客户端信息,它允许用户检索在HTTP请求中发送的Cookie值,其使用语法如下Request.CookiesString[key|.attribute],TotalBytes属性,此属性为只读属性,可取回客户端响应数据的字节数。其使用语法如下CounterRequest.TotalBytesBinaryRead方法此方法用二进制代码方式读取客户端POST数据。其使用语法如下VariantRequest.BinaryReadCounter,Response对象,Response对象的功能与Request对象的功能正好相反,它用于将服务器端的信息发送到客户浏览器,包括将服务器端的数据用超文本格式发送到浏览器上,或重定向浏览器到另一个URL,或设置Cookie的值Response对象的语法如下Response.数据集合|属性|方法,Response对象的方法,Write方法Write方法是Response对象中最常用的一个方法,它可以把信息从服务器端直接送到客户端,语法如下Response.WriteStringRedirect方法Redirect方法引导客户端浏览器立即重定向到程序指定的URL位置,也就是进入另一个Web页面,它类似于HTML中的超链接,语法如下Response.RedirectString,,Clear方法Clear方法可以清除WebServer缓冲区中的内容,但不能清除HTTP首部。其使用语法如下Response.ClearEnd方法该方法的功能是通知服务器立即停止处理ASP程序,在调用End方法之后出现的所有代码都不会被执行,包括纯HTML代码的显示,语法如下Response.End方法使用方法,系统立即把缓存在服务器端的Response输出信息送客户端显示,语法如下Response.,Response对象的属性,Buffer属性Buffer属性用来设置是否把Web页面输出到缓冲区语法如下Response.BufferBooleanValue布尔值Expires属性可以用Response对象的Expires属性来控制这个页面在缓存中的有效时间,语法如下Response.ExpiresIntnumExpiresAbsolute属性与Expires属性不同的ExpiresAbsolute属性指定缓存于浏览器中的页面的确切到期日期和时间,语法如下Response.ExpiresAbsolute[[日期][时间]],Response对象的数据集合,Cookies是Response对象中惟一的数据集合使用Cookies可以设置客户端浏览器内的Cookie值Cookie的使用语法如下Response.Cookiesvar[key|.attribute]cookie值下面这段代码用来设置Cookie值,其中的关键字分别为name和password。,Session对象,Session是前端浏览器与服务器每一次会话的标识变量,它附在每次会话的所有网页数据中,在一段时间内有效Session对象的使用语法如下Session.属性|方法|事件其属性、方法、事件包括SessionID属性返回用户的会话验证TimeOut属性应用程序会话状态的超时时限,以min为单位Abandon方法用于删除所有存储在Session对象中的变量Session_OnStart事件该事件在服务器创建新的会话时发生Session_OnEnd事件该事件在会话被放弃或超时时发生,Session对象的属性,SessionID属性语法如下Session.SessionIDTimeout属性对于一个特定的会话,如果想设置一个与默认超时值不同的值,可以设置Timeout属性,语法如下Session.Timeout[Minutes],Session对象的方法,Session对象只有一个方法,就是Abandon方法该方法用于释放Web服务器用于保存某个用户会话信息的存储空间Abandon方法的使用语法如下Session.AbandonSession对象的事件Session_OnStart事件Session_OnEnd事件,Cookie的应用,将Cookie写入浏览器中将Cookie写入浏览器中,可使用Response.Cookies从浏览器获取Cookie的值设置Cookie路径Cookie与Session的比较用Response对象可以建立Cookie文件,以记录来访客户的各种信息,Application对象,我们可以使用Application对象,使同一个应用内的多个用户共享信息,并在服务器运行期间持久地保存数据,语法如下Application.属性|方法|事件Application对象没有内置属性,但用户可以设置自己的属性。Application对象的方法和事件如下Lock方法用于锁定Application对象,禁止其他用户修改Application对象的值Unlock方法解除锁定,允许其他用户修改Application对象的值Application_OnStart事件第一个用户访问该站点时发生Application_OnEnd事件关闭Web服务器时发生,Application对象的属性,虽然Application对象没有内置属性,但用户可以创建自己的属性,又称为Application变量。其语法如下Application“属性|集合名称”属性值Application对象的方法Lock方法用于锁定对象,禁止其他用户修改Application属性,语法如下Application.LockUnlock方法与Lock方法相反,它用于解除对Application对象的锁定,语法如下Application.Unlock,Application对象的事件,Application_OnStart事件Application_OnStart事件仅在第1个用户请求时发生,并且只被每个应用触发一次Application_OnStart事件的语法如下SubApplication_OnStartEndSub,,Application_OnEnd事件Application_OnEnd事件在退出应用或Web服务器被关闭时,于Session_OnEnd事件之后发生Application_OnEnd事件的语法如下SubApplication_OnEndEndSub,Server对象,Server对象是ASP中非常重要的一个内部对象。利用它提供的一些方法,可以实现许多高级功能Server对象的使用语法如下Server.属性|方法Server对象的属性和方法包括ScriptTimeout属性规定了一个脚本文件执行的最长时间。CreateObject方法用于创建已经注册到服务器上的ActiveX组件实例。MapPath方法转换相对路径或虚拟路径。HTMLEncode方法对ASP文件中特定的字符串进行HTML编码。URLEncode方法根据URL规则对字符串进行编码,Server对象的属性,Server对象只有一个ScriptTimeOut属性ScriptTimeOut属性的使用语法如下Server.ScriptTimeOutnServer对象的方法HTMLEncode方法CreateObject方法MapPath方法URLEncode方法,2.2.5ASP程序设计示例,2.2.6WEB数据库程序设计,1Web数据库访问技术2ODBC接口3数据库语言SQL4使用ADO访问数据库5用Connection对象连接数据库6用Command对象执行数据库操作7用RecordSet对象控制数据,数据库应用系统在现有计算机软件中占有很大的比例本章将着重介绍一种有效的Web数据库访问方案,即利用ASP服务器端的组件ActiveXDataObjects(ADO)实现对数据库的操作,Web数据库系统不能仅依赖某个DBMS来实现整个应用系统,它是通过其他Web应用程序,用标准的HTML语言及其某些特定的扩展功能开发的、以特殊形式访问数据库的应用程序系统Web应用系统一般采用Browser/WebServer/ApplicationServer模式实现Web访问数据库的关键是与数据库服务器间的接口,概述,CGI,CGI(CommonGatewayInterface,公关网关接口)是一种接口标准,它使静态的Web页变为交互式的媒体成为可能,ODBC,ODBC(OpenDatabaseConnectivity,开放式数据库连接)是一个数据库编程接口,由微软公司建议并开发,JDBC,JDBC是较早的Web开发平台,在Web应用中,嵌于网页(HTML文件)中的Javaapplets利用JDBC来访问数据库,ADO,ADO(ActiveXDataObjects)是微软公司Web服务器端的内置组件,ADO允许程序员在编写程序时,通过一个OLEDB(数据库对象链接嵌入技术)提供者,如MicrosoftSQLServer,MicrosoftAccess系统等,访问并操纵数据库服务器中的数据,ODBC接口,ODBC接口概述ODBC是微软公司建议并开发的数据库API标准,ODBC为异种数据库提供了统一的访问接口,它使应用程序能用结构化的查询语言SQL访问数据库,从而对操作数据库的应用程序屏蔽了不同数据库管理系统的访问差异,也使数据库系统的开发不仅仅局限于某个DBMS,ODBC接口,ODBC主要定义如下5方面的内容ODBC函数库,它为应用程序提供连接DBMS、执行SQL语句、提取访问结果的程序接口SQL语法,它遵循X/OpenandSQLAccessGroupCallLevelInterfaceSpecification标准错误代码连接、登录DBMS数据类型,ODBC的应用,一个ODBC应用的建立应涵盖以下主要内容建立需要操作数据库的应用程序,该程序通过调用ODBC函数提交SQL语句提供运行环境,该环境应包含数据库驱动程序,它负责处理ODBC函数调用,向数据源提交SQL请求,向应用程序返回结果,必要时将SQL语法翻译成符合DBMS语法规定的格式具有由用户数据库、DBMS等构成的可供应用程序访问的数据源,ODBC的应用,通过ODBC访问数据库的基本步骤如下创立并配置数据源;建立一个与数据源的对话连接;向数据源发出SQL请求;定义一个缓冲区和数据格式用于存储访问结果;提取结果;处理各种错误;向用户报告结果;关闭与数据源的连接,创建并配置数据源,用户可通过如下两种方式创建或配置数据源ODBC数据源管理程序或系统函数调用配置一个Access数据源的过程如下在Windows系统下进入控制面板,打开ODBC数据源,若是Windows2000平台,则打开管理程序下的数据源ODBC,屏幕上将出现如图6-5所示的“ODBC数据源管理器”对话框,“ODBC数据源管理器”对话框,创建并配置数据源,选择所使用的数据库驱动程序,如选择MicrosoftAccessDriver*.mdb,单击“完成”按钮,出现如图6-7所示的对话框,创建并配置数据源,选择“系统DSN”标签,即选择“系统数据源”。要使系统上的所有应用程序都可以使用它,必须选用系统DSN,这是建立Web站点的需要。单击“添加”按钮,进入“创建新数据源”对话框,如图6-6所示,创建并配置数据源,在“数据源名”输入框中键入数据源名,单击“选择”按钮为该数据源指定一个已创建好的Access数据库(*.mdb),该数据库应该是在Web应用程序中即将访问的数据库。单击“确定”按钮,回到图6-6“创建新数据源”对话框。单击“确定”按钮直到关闭ODBC数据管理器,此时完成一个数据源的建立过程。若要修改该数据源的配置,可在图6-5“ODBC数据源管理器”对话框中选定要更改的数据源,再单击“配置”按钮,使用ADO访问数据库,概述ADO(ActiveXDataObjects,ActiveX数据对象)技术是一种良好的Web数据库访问解决方案ADO是一个ASP内置的服务器组件,它是一座连接Web应用程序和OLEDB的桥梁ADO几乎兼容所有的数据库系统ADO支持多种程序设计语言,ADO的对象类和对象模型,ADO技术是通过ADO对象的属性、方法来完成相应的数据库访问的。ADO共有以下7种独立对象类Connection连接对象,表示与数据源的连接关系Command命令对象,用于定义一些特定的命令语法,以执行相应的动作RecordSet记录集对象,用于表示来自数据库表或命令执行结果的记录Property属性对象,用于描述对象的属性,每个ADO对象都有一组惟一的属性来描述或控制对象的行为,ADO的对象类和对象模型,Error错误对象,用于描述Connection对象在连接数据库时发生的错误Field域(字段)对象,用来表示RecordSet对象的字段,一个记录行包含一个或多个域(字段)Parameter参数对象,用来描述Command对象的命令参数,是命令所需要的变量部分,图6-8ADO对象模型,用Connection对象连接数据库,Connection对象的常用属性和方法Connection对象的常用属性Mode用于设置数据的可用权限,其属性值是系统定义的一些常量,只能在关闭Connection对象时设置。State指明Connection对象的当前状态,包括关闭、打开、正在连接、正在执行命令等。ConnectionTimeout设置对象建立连接操作失败时的等待时间。DefaultDatabase设置连接数据源的默认数据库。ConnectionString设置连接数据源的一些信息,Connection对象的常用属性和方法,Connection对象的常用方法Open用于建立到数据源的物理连接。cute用于执行指定的查询、SQL语句、存储过程或特定的文本。Cancel用于取消用异步方式执行的cute或Open方法的调用。Close用于关闭一个连接。在对Connection对象操作结束时,使用Close方法释放所有与之关联的系统资源,打开和关闭数据库连接,打开Connection对象打开Connection对象的Open方法的语法格式如下OpenConnectionString,[UserID,]Password[,Options]关闭Connection对象关闭Connection对象的Close方法的语法格式如下对象实例名.Close,通过Connection对象执行SQL语句,打开Connection对象后,可以通过对象的cute方法实现SQL语句的执行过程。cute方法的语法格式如下cuteCommandText,RecordsAffected,Option,Connection对象的事务处理,本例是进行事务处理的一段代码,用Command对象执行数据库操作,Command对象的常用属性和方法执行SQL语句可以用打开的Connection对象,也可以用ADO的Command(命令)对象达到同样的目的。Command对象的常用属性和方法如下ActiveConnection属性指定与Command对象关联的已打开的连接对象。Name属性指定Command对象的名字。CommandText属性定义一个可执行的命令串。CommandType属性指定命令的类型。cute方法执行命令,用Command对象执行SQL语句,【例】用Command对象的cute方法从sales表中检索出所有记录。源程序如下,用Command对象调用存储过程,在Web数据库程序设计中使用SQL存储过程有下列好处执行SQL存储过程比执行SQL命令快得多。当一个SQL语句包含在存储过程中时,服务器不必每次执行它时都要分析和编译它。在多个网页中可以调用同一个存储过程,使站点易于维护。一个存储过程可以包含多个SQL语句,这意味着可用存储过程建立复杂的查询。存储过程可以接收和返回参数,这是实现复杂数据库访问功能的必要基础。,用RecordSet对象控制数据,RecordSet对象简介RecordSet对象可以实现以下功能指定可以检查的记录。移动记录。添加、更改和删除记录。通过更改记录更新数据源。管理RecordSet的总体状态,RecordSet对象的创建和数据读取,RecordSet对象的创建使用Server.CreateObject“ADODB.RecordSet”创建RecordSet对象,然后通过打开RecordSet对象创建一个与某个数据库表相关联的RecordSet对象实例可以采用Connection和Command对象的cute方法,当用cute方法从一个数据库返回查询结果时,将自动创建一个RecordSet对象,RecordSet对象的创建和数据读取,RecordSet对象数据的读取【例】在Web页面上显示表sales的所有记录数据,读取字段值时利用字段顺序号。源程序如下ShowTablesales,记录集记录间的移动方法和记录集游标,移动方法包括MoveNumRecords在记录集中向前或向后移动指定条记录MoveFirst移动至记录集中的第一条记录MoveLast移动至记录集中的最后一条记录MovePrevious移动至当前记录的上一条记录MoveNext移动至当前记录的下一条记录,记录集记录间的移动方法和记录集游标,游标的类型有以下4种adOpenFowardOnly前向游标,只能在记录集中向前移动。adOpenKeyset可在记录集中向前或向后移动。若另一用户删除或改变一条记录,记录集将反映这种变化,但若增加一条新记录,新记录不会出现在记录集中。adOpenDynamic可在记录集中向前或向后移动。其他用户造成的任何改变都会动态反映在记录集中。adOpenStatic可在记录集中向前或向后移动。不在记录集中反映其他用户对记录集造成的任何改变,记录集记录的修改和记录锁定,使用RecordSet对象的一组方法对记录集中的记录进行增、删、改操作AddNew[Fields,Values]方法Delete[AffectRecords]方法Update[Fields,Values]方法CancelUpdate方法UpdateBatch方法CancelBatch方法,RecordSet对象的其他重要操作,指定记录集的最大容量记录集对象的MaxRecords属性可以限制记录集中存放的记录数记录集中记录的分页处理与分页相关的属性包括PageSize指定一页的记录数,它是分页的关键。AbsolutePage表示当前记录所在页的页号。AbsolutePosition表示当前记录相对于第一条记录的位置,当前记录是第一条记录时,其值为1PageCountRecordSet对象总的页数。RecordCountRecordSet对象总的记录数,2.3.1ASP.NET技术,⑴.NET简介.NET技术是一项革命性的技术。它是微软公司推出的新一代互联网软件和服务战略,是一种面向网络、支持各种用户终端的开发平台环境。它包含了分布式计算、XML、组件技术、即时编译技术等多种功能集成的环境。.NET环境使用统一的Internet标准(如XML)将不同的系统对接,并采用高度分布式应用服务架构,而且使用了一个综合的管理程序。,2.3.1ASP.NET技术,⑵ASP.NET技术简介ASP.NET是微软公司继ASP之后推出的用于创建、管理和部署Web应用程序的新的理想平台。它使用.NET框架所提供的编程类库构建而成。使ASP.NET创建、管理和部署Web应用程序变得非常容易。,2.3.2构建ASP.NET开发运行环境,⑴安装.NETFrameworkSDK软件包这个软件包可以从Internet上下载到本地服务器上进行安装。在微软网站上可以找到最新的版本,读者可以关注一下,2.3.3ASP.NET语法简介,控件,⑴HTML服务器控件ASP.NET改进了HTML,将HTML普通控件封装为服务器控件。这些控件位于System.Web.UI.HTMLControls命名空间中,从HTMLControl基类中直接或间接派生出来。在Server端,控件被解释成HTML代码,然后再发送到客户端。服务器控件,是在普通控件的标注中加上runatserver的属性项,在客户端形成的页面上多了一些内部的代码。HTML服务器控件是在HTML普通控件和Web服务器控件之间的折衷,它们使用熟悉的HTML元素,提供有限的对象。,控件,⑵Web服务器控件Web服务器控件位于System.Web.UI.WebControls命名空间中,从WebControl基类中直接或间接派生出来。Web服务器控件更超越了HTML服务器控件,形式上的区别是在控件的名称前加上”ASP”标注,加上runatserver的属性项,也就是在客户端形成的页面上多了一些内部的代码。它们提供了更加丰富的用户界面,如一个DataGrid这样的WEB服务器控件,在最终页面里将呈现数十个HTML元素,会自动地加上所需要的标记。如果开始一个新项目,或者需要采用更多的事件处理,增加页面的功能,Web服务器控件是最好的选择。,控件,⑶自定义控件ASP.NET最出色的特性之一就是开发人员可以创建自己的控件,甚至可以用文本编辑器创建它,然后将它们集成到ASP.NET应用程序中。用户即使没有这方面的知识,也可以很方便地应用这些高级的第三方控件,因为ASP.NET自定义控件在各个方面都与Web控件的行为相同。有了自定义控件,用户想做的事就没有限制,不管是添加一个新属性还是调整所提交的HTML输出。自定义控件已经被视为.NET平台上发展最快的领域之一。,ASP.NET对象,ASP.NET提供了许多内置对象,ASP.NET对象向开发者提供基本的请求、响应、会话等相当多的处理功能。例如,可以在两个网页之间传递变量、输出数据,以及记录变量值等。这些对象在ASP时代已经存在,到了ASP.NET环境下,这些功能仍然可以使用。而且,它们的种类更多,功能也更强大。ASP.NET内置对象是由IIS控制台初始化的ActiveXDLL组件。因为IIS可以初始化这些内置组件用于ASP.NET中,所以用户也可以直接引用这些组件来实现自己的编程,即可以在应用程序中,通过引用这些组件来实现访问ASP.NET内置对象的功能。,ASP.NET对象,ASP.NET内置的对象主要有七个。①Page对象②Response对象③Request对象④Application对象⑤Session对象⑥Server对象⑦Cookie对象,ADO.NET,ADO.NET(ActiveXDataObject.NET)的是功能强大的数据访问接口,它是为了广泛的数据控制而设计。ADO.NET的主角是数据集对象DataSet,它是一个内存数据库,每个表由数据列(DataColumn)和数据行(DataRow)组成,一个DataSet就是一个内存数据库。创建一个DataSet后,就可将代表数据表的多个DataTable对象添加到DataSet中。而DataTable一般通过SqlDataAdapter或OleDbDataAdapter对象来创建。通过DataRelation对象可以定义DataSet中表与表之间的关系,而通过DataView则可实现DataTable的数据过滤和排序。,2.4其它实用技术,2.4.1PHP技术及开发工具简介2.4.2JSP技术及开发工具简介,本章小结,ASP是目前最常用的基础动态网站开发技术,它是一种运行于服务器端的Web应用程序开发技术,它既不是一种语言,也不是一种开发工具,而是一种服务器端的脚本语言环境。本章以ASP技术为主线,对动态网站开发技术的应用进行介绍,并通过实例详细地介绍ASP中常用对象的属性、方法和事件,还对与其相关的Web数据库技术进行了深入细致的剖析,使读者学会利用ASP技术及Web数据库技术开发动态网站的应用程序。最后对其它几中常用的开发技术做了概述性介绍。,
展开阅读全文