第6章解决方案指南摘要:本章概要介绍了解决方案实现组件,其中包括:应用程序的高级图形表示法、关于PASP文件和XSLISAPI过滤器如何发挥作用的说明、ConsolidatedRetail.com应用程序中每种主要组件类别的说明。简介参考体系结构应用程序包含许多自定义的ASP文件和代码组件。本章后面的章节将详细介绍这些文件的源代码。图6-1直观清晰地显示了解决方案的各个组件及其相互关系。当阅读本指南的其余部分和查看源代码时,可将该图作为基本参考资料。图6-1:参考体系结构应用程序组件正如您从该图中所看到的那样,用户使用浏览器(在此为InternetExplorer5)来访问该应用程序。网站中的ASP文件作为预处理的ASP(PASP脚本)实现,并使用CommerceServer2000提供的可编程对象(如ProductCatalog、AuthManager、UserProfile和OrderGroup)将数据发送到SQLServer2000中的CommerceServer站点数据库和从该站点数据库检索数据。下订单或查看购物篮内容之类的业务流程通过CommerceServer管道实现。管道调用自定义COM+排队组件来处理电子邮件消息传送功能。每一网页的输出都用XML表示,然后由XSLISAPI2.1过滤器截取,而XSLISAPI2.1过滤器将相应的XSL样式表应用到内容,将内容作为HTML呈现。本章的下一节将说明PASP文件和XSLISAPI过滤器是如何发挥作用的,并提供了一个简单示例作为参考。然后,本章会介绍每个主要组件类别在ConsolidatedRetail.com应用程序中是如何实现的。我们的讨论采用了逻辑推理的方式,首先介绍Web服务,然后介绍CommerceServer对象,继而讨论管道组件。PASP文件和XSLISAPI过滤器ActiveServerPage(ASP)通常用于生成Web解决方案的表示逻辑。在ConsolidatedRetail.com站点中,使用它们的方法略有不同。在该站点,大多数ASP文件是作为预处理的ASP(即PASP文件)实现的。PASP文件将XML写入响应对象,它由XSLISAPI过滤器截取和处理。PASP文件中的脚本用于调用CommerceServer2000对象中的业务逻辑;而由XSLISAPI过滤器来处理表示形式。XSLISAPI过滤器对从PASP文件生成的XML输出进行语法分析,并检查?xml-stylesheet...?处理说明。如果该处理说明包含引用XML配置文件的server-config属性,则XSLISAPI过滤器读取该配置文件,以确定应将哪个XSL样式表应用于从PASP文件生成的XML输出。XML配置文件包含有关应将哪个样式表应用于特定客户程序类型的信息,如以下代码示例所示:?xmlversion=1.0?server-styles-config!--对于WML1.1浏览器--devicetarget-markup=WML1.1stylesheethref=mypage-WML11.xsl//device!--对于IE4.0浏览器--devicebrowser=IEversion=4.0stylesheethref=mypage-IE5.xsl//device!--对于IE5.0浏览器--devicebrowser=IEversion=5.0stylesheethref=mypage-IE5.xsl//device/server-styles-configIIS只要检查随页请求发送的超文本传输协议(HTTP)请求标头,就可以识别客户程序。IIS使用WINNT\System32\Inetsrv文件夹中Browscap.ini文件的条目,可以识别许多普通浏览器。XSLISAPI应用程序在名为Browscap-add.ini的文件中为WAP电话之类的设备提供附加条目,用户应将该文件复制并追加到Browscap.ini文件。简单示例以下简单示例说明如何使用XSLISAPI过滤器来呈现由PASP文件生成的XML输出。注意该示例旨在帮助您理解XSLISAPI过滤器的功能。它并不说明ConsolidatedRetail.com站点中的任何实际页。假定用户使用InternetExplorer5请求名为Myproducts.pasp的页。系统将对该文件中的脚本进行解释,然后通过以下响应对象返回下列XML:?xmlversion=1.0?xml-stylesheettype=text/xslserver-config=productconfig.xmlhref=csproducts.xsl?productlistproductproductname=widget/productproductname=wrench//productlist现在,XSLISAPI过滤器将对该XML进行语法分析,读取xml-stylesheet处理说明,该说明包含以下三个属性:type:指要应用的样式表的类型(在此为XSL)。server-config:指XML配置文件,它定义要用于特定客户程序的样式表。href:指在server-config文件中没有列出相应的样式表时,客户程序将下载并应用的默认样式表。然后,XSLISAPI过滤器读取指定的server-config文件(Productconfig.xml),该文件包含以下条目:devicebrowser=IEversion=5.0stylesheethref=products-ie5.xsl//device由于IIS已根据请求标头识别客户端浏览器为InternetExplorer5.0,现在,XSLISAPI应用程序会将Products-ie5.xsl样式表应用于从Myproducts.pasp检索到的XML。假定Products-ie5.xsl样式表包含以下XSL代码:?xmlversion=1.0?xsl:stylesheetxmlns:xsl==2.0xsl:templatematch=/HTMLTITLE产品目录/TITLEBODYTABLExsl:for-eachselect=productlist/productTRTDxsl:value-ofselect=@productname//TD/TR/TABLE/BODY/HTML/xsl:template/xsl:stylesheet该样式表将应用于从Myproducts.pasp得到的XML数据,从而生成以下HTML,该HTML将发送到浏览器:HTMLTITLE产品目录/TITLEBODYTABLETRTD小机械/TD/TRTRTD扳手/TD/TR/TABLE/BODY/HTML显然,在ConsolidatedRetail.com之类的实际电子商务解决方案中,由PASP文件生成的XML以及用于呈现该XML的XSL样式表要远比该简单示例复杂得多。不过,原理是相同的。网站文件此处介绍一些ASP和PASP页以及相应的XSL文件,它们在ConsolidatedRetail.com零售站点的用户界面中经常用到。如前文所述,该应用程序所用的许多ASP脚本都是作为PASP脚本来实现的,该PASP脚本将XML输出提交给XSLISAPI过滤器。一些常规的ASP脚本还用作非显示脚本,接受来自其它页的贴子。每个PASP页都有一个相关的页名-config.xml文件,XSLISAPI过滤器使用该文件来确定要用于特定客户程序类型的相应样式表。在本实现方案中,只提供了页名-ie5.xsl文件,以使用与MicrosoftInternetExplorer5.5兼容的HTML形式来呈现页。为使输出能用于其它浏览器或设备,可以创建其它XSL文件。初始化页和包含文件ConsolidatedRetail.com站点使用以下初始化脚本和包含文件:Global.asa:Global.asa是一种Web应用程序初始化脚本,它定义在Web应用程序的生存期中发生关键事件时要采取的措施。/include/Site_Const.asp:该文件定义了许多常量,站点上的所有页都包含该文件。/include/Common.asp:该文件定义一些函数,这些函数用于呈现XML标记形式的数据。站点上的所有PASP页都使用该文件来生成将传送给XSLISAPI过滤器的XML。/include/Profile.asp:该文件包含执行以下操作的所有函数:验证用户身份、给用户注册或注销用户、检索或更新用户的个人配置文件。/include/basket.asp:该文件提供用户创建和维护购物篮(即在浏览产品目录期间累积订单)时所需的函数。/include/UI_layout-IE5.xsl:该XSL样式表提供表示逻辑,用于呈现站点中各页的标准布局形式。所有页专用的XSL文件都包含该样式表,以确保站点呈现出统一的外观和行为。目录浏览页ConsolidatedRetail.com零售站点使用以下与目录相关的页:Default.asp:该页将用户重定向到站点的主页(Index.pasp)。由于Default.asp是ASP应用程序的传统起始页名,所以将其置于此处,以将所有对Default.asp的请求重定向到应用程序的真正起始页。Index.pasp:Index.pasp是应用程序的默认起始页。当您只输入站点名而没有附加路径信息时,就会显示该页。当任务完成或出现错误时,若干其它页也会重定向到该页。Category.pasp:该页为特定的页生成XML,在这一特定的页中,用户可以查看给定产品目录特定类别中的产品和子类别。Product.pasp:该页为特定的页生成XML内容,在这一特定的页中,可以显示产品目录中有关单个产品及其所有变体的详细信息。SearchResults.pasp:当用户在产品搜索框中输入搜索标准时,该页接收输入内容,然后搜索与关键词匹配的产品,并将相匹配的产品列表返回给用户。用户身份验证和配置文件管理页ConsolidatedRetail.com零售站点使用以下用户身份验证和管理脚本:Registration.pasp:使用该页,用户可以在站点注册。Login.pasp:使用该页,已注册的用户可以登录到站点。ForgotPasswd.pasp:通过该页,用户能够请求站点用电子邮件将口令发送给自己。Acct.pasp:该页显示当前已登录的用户的帐户详细信息。UserProfile.pasp:在该页,用户可以编辑自己的配置文件。AddressBook.pasp:在该页,用户可以查看并更新地址簿,其中包含发货地址和付款地址。订单管理页ConsolidatedRetail.com零售站点使用以下订单管理页:orderhistory.pasp:该页检索和显示当前用户的订单历史记录,允许用户查看自己在该站点购买的所有商品。orderhistorydetail.pasp:该页显示用户的订单历史记录中特定订单的详细信息。Basket.pasp:该页显示当前用户的购物篮内容,具体而言,就是与用户当前会话相关的OrderGroup对象中包含的产品。Ordersummary.pasp:尽管该页的显示结果与basket.pasp页的显示结果大不相同,但是该页的脚本以及由脚本生成的XML内容却与basket.pasp页非常相似。Shipping.pasp:当用户单击购物篮页的“结帐”链接或单击任何页顶部的“结帐”链接时,都将调用该页。用户在该页可以指定订单的发货地址。ShippingMethod.