3 /config/Config.php 配置文件,保存如数据库连接字符串、用户名、密码等信息
4 /ServiceImpl.php Web服务的实现文件,其中的大部分PHP函数都将被映射为Web服务的Operation
5 /EradioService.php 调用NuSOAP,创建Web服务,并注册相关消息类型,注册相关Operation
配置管理
配置文件是指/config/Config.php。其中要定义一个单列类Config,其中所有设计系统安全性的配置都要为private属性,然后通过public的函数返回以该属性相关的其他变量。最典型的为数据库连接字符串、用户名、密码等信息。这些属性应当为private,且不能有任何函数将其返回,只能返回以这些属性为参数的数据库连接变量,如函数getDBConnnection返回以数据库服务器地址、数据库用户名和密码、初始数据库为参数的MySQL数据库连接对象 mysqli。
其他的一些不涉及安全性的属性可以使用为public,如Web服务中Operation的命名空间变量。
Web服务Operation的实现
Web服务实现由ServiceImpl.php完成,其中每一个要注册为Web服务Operation的函数都按照以下几个步骤进行:
(1)用try块包围,对其中的异常进行捕获,将捕获的异常以Fault的形式返回;
(2)需要身份验证的需要首先对当前会话中相关变量进行检查,如对用户名、权限的检查,检查未通过的以Fault形式返回;
(3)连接数据库,进行相应的操作,返回结果。
该文件中包含的PHP函数如表4-3所示:
表4-3 Web服务函数设计
函数名 描述
login 使用给定的用户信息进行验证,验证成功则创建用户Session,并返回用户id,否则返回错误信息
logout 删除用户会话,用户登出,无返回值
regist 用给定的用户信息进行创建账户,需要对信息的合法性进行检测,注册的用户初始都属于普通用户组
getAccount 需要登录验证。如果参数用户ID为空,返回当前登录用户的账户信息;否则,如果参数用户ID与当前用户不一致,需要权限验证。
getDetailInfo 需要登录验证。如果参数用户ID为空,返回当前用户的详细信息;否则,如果参数用户ID与当前用户不一致,则需权限验证和用户保密设定
updateDeatailInfo 需要登录验证。更新当前用户的详细信息。如果要更细的用户ID与当前用户ID不一致,则需权限验证
getAllAccounts 需要登录验证和权限验证。返回所有的用户账户信息,账户信息中不包含密码
getAllDetailInfoes 需要登录验证和权限验证。返回所用户公开的详细信息
getAllGroups 返回所有的用户组信息
updateGroup 需要登录验证和权限验证。更新用户信息。需要系统管理员才身份
addGroup 需要登录验证和权限验证。追加新的用户分组,需要系统管理员身份
addMemberToGroup 需要登录验证和权限验证。追加一个用户到一个用户组。需要系统管理员身份。
removeMemberFromGroup 需要登录验证和权限验证。将一个用户从一个用户分组中移除。需要系统管理员身份。
(续表4-3)
getPrivilege 返回用户或用户组的权限设定。如果用户的权限有单独的设定,则以该设定为主,否则是用户所在所有用户组的权限进行或操作后的结果
setUserPrivilege 需要登录验证和权限验证。将对某个用户的权限进行单独设定。如果该单独设定与用户所在的所有用户组的权限进行或操作后的结果一致,则删除该单独设定。
getUserPrivilege 返回为指定用户单独设定的权限
getLanguageCodes 返回所有的语言代码
getCountryCodes 返回所有的国家地区代码
updateLanguageCodes 需要登录验证和权限验证。更新语言代码
updateCountryCodes 需要登录验证和权限验证。更新国家地区代码
addLanguageCode 需要登录验证和权限验证。追加语言代码
addCountryCode 需要登录验证和权限验证。追加国家代码
getRadioInfo 返回指定的网络电台信息
getAllRadioInfoes 返回所有的网络电台信息
searchRadioInfoes 用给定的关键词搜索网络电台信息
updateRadioInfo 需要登录验证和权限验证。更新网络电台信息
addRadioInfo 插入新的网络电台信息
addUserSpecial 需要登录验证。创建用户收藏夹
removeUserSpecial 需要登录验证。删除用户收藏夹
updateUserSpecial 需要登录验证。更新用户收藏夹
getUserSpecials 需要登录验证或用户自定义访问权限设定。返回用户所有的收藏夹
addItemToSpecial 需要登录验证。向用户收藏夹中添加条目
removeItemFromSpecial 需要登录验证。从用户收藏夹中删除条目
getSpecialItems 需要登录验证或用户自定义访问权限设定。返回指定的用户收藏夹中的所有条目
getRadioGenres 返回所有的电台种别
updateRadioGenre 需要登录验证和权限验证。更新电台种别
removeRadioGenre 需要登录验证和权限验证。删除电台种别
addRadioGenre 需要登录验证和权限验证。追加新的电台种别
getRadioStreamTypes 返回所有的电台播放格式
updateRadioStreamType 需要登录验证和权限验证。更新电台播放格式
removeRadioStreamType 需要登录验证和权限验证。删除电台播放格式
(续表4-3)
addRadioStreamType 需要登录验证和权限验证。追加电台播放格式
getRadioSpeeds 返回所有的电台播放速率
updateRadioSpeed 需要登录验证和权限验证。更新电台播放速率
removeRadioSpeed 需要登录验证和权限验证。删除电台播放速率
addRadioSpeed 需要登录验证和权限验证。追加电台播放速率
getRadioQualities 返回所有的电台播放质量
updateRadioQuality 需要登录验证和权限验证。更新电台播放质量
removeRadioQuality 需要登录验证和权限验证。删除电台播放质量
addRadioQuality 需要登录验证和权限验证。追加电台播放质量
Web服务的创建
Web服务的创建主要由PHP文件EradioService.php来实现。在该文件中要调用NuSOAP扩展,并包含ServiceImpl.php文件,然后创建nusoap_server对象,向web服务里添加所需的复杂消息类型,注册相应的php函数,最后启动Web服务。
利用PHP的扩展NuSOAP实现Web Service的主要函数接口如表4-4所示:
表4-4 NuSOAP主要常用函数
函数 作用
nusoap_server::configureWSDL 配置Web服务的基本信息,如服务名称、命名空间等
nusoap_server::register 注册相应的PHP函数为Web服务的操作(Operation)
nusaop_server::wsdl
->addComplexType 向Web服务中注册消息类型,大多数是复杂类型(complexType),并用PHP中的数组将其映射到该类型
nusoap_server::service 开始Web服务
Flex客户端设计
在Flex客户端的设计中,它的设计方式很类似于Windows窗口程序的设计:是一个一个窗口堆积而成,然后根据需要进行隐藏和显示,并不像JSP,ASP那样一个一个单独的页面,通过请求不同的URL来进行页面跳转。
为了最大程度的优化,Flex程序应当模块化设计,要求除了主页面index.mxml是Application类型外,其他的要么是ActionScript文件,负责一些显示逻辑和与服务器进行交互,要么是Module子类的mxml文件,其内容是显示页面的一部分。模块化后的页面的好处就是可以将它们编译成一个一个的小flash,但是这些flash无法单独运行。而主程序编译成的flash可以运行,且没有在编译时的体积可以大幅度减小,因而能够很快执行,并显示出基本页面,同时再慢慢的下载所需的模块,等其在需要时显示出来。这样可以有较减少用户等待Flash下载的时间,提高用户体验。
此外,多利用Flash所拥有的将资源存储在本地也能在用户第二次使用该程序时,能够有效的减少网络流量,因为类似ISO标准的国家代码、语言代码等这种很少做更改的数据如果存储于本地,就能够提高程序的反应速度。
Flex主程序index.mxml分为上中下三部分,分别是Banner.mxml、Content.mxml和Bottom.mxml。Banner.mxml负责显示页面的标题以及用户的登录状态等信息。Content.mxml负责显示主要内容,它又分成两列式,左边是一列树状显示,主要按模块和用户权限显示功能列表,而右侧一列负责显示具体某个功能的界面,如负责如网络电台搜索等操作,如图4-2所示。Bottom.mxml则负责显示版权等信息。
图4-2 Flex客户端界面基本结构
针对游客搜索显示的页面设计如下,其中内容部分左侧的树状功能列表被隐藏,如图4-3所示。
图4-3 游客搜索主界面设计
点击高级搜索后的界面如图4-4所示:
图4-4 高级搜索主界面设计
搜索后的结果页面如图4-5所示:
图4-5 搜索结果界面设计
其他的页面设计正在进行中。
本章小结
本章根据上一章中的功能描述和系统设计展开了各个部分设计。详细进行了数据库设计,权限设计和系统结构设计。然后又对服务器端进行详细设计,对客户端进行简要设计。这样,在以后的项目实施中就可以顺利的展开编码工作。不过由于客户的设计并不是很详细,需要边编码边细化设计。
Web服务端实现
由于本课题的重点在系统分析与设计上,实现在Web服务端,所以仅仅实现了Web服务端。在Web服务URL上没有参数时,界面如图5-1所示,主要是针对人工阅读。
图5-1 Web服务端界面
当点击左侧的WSDL超链接时,则显示的针对于程序的WSDL描述文档,界面如图5-2所示。
图5-1 Web服务端的WSDL文档界面
图5-3 Flex程序测试Web服务截图
经测试,该Web服务对Flex程序可以被正确调用,测试截图如图5-3所示。截图内容Flex程序调用Web服务端的getLanguageCodes 方法后,获得基础数据中的语言代码。
客户端的代码实现并不是重点,所以没有进行实现,但是已经解决了所有的技术难题,如确保Flex程序可以通过java script调用Windows Media Player的ActiveX控件等。
结 论
该课程设计完成了网络电台索引服务完整的设计工作,使其具备了核心的业务功能,它详细描述四类用户的功能与权限,这四类用户分别是游客、一般用户、普通管理员和系统管理员。游客可以搜索与收听网络电台,并对未收录的网络电台进行推荐,对含有非法内容的网络电台进行举报。一般用户在游客的功能基础上增加了收藏夹管理功能,可以自定义将喜爱的网络电台收藏起来。普通管理员主要负责对推荐和举报的网络电台信息进行维护,以及维护其他信息。系统管理员则负责权限管理和站点信息管理。
整个系统的功能模块划分为了5个模块:帐户信息模块,管理用户帐户信息和详细信息,由系统管理员维护;权限信息模块,通过对用户组或单个用户权限设置进行权限设定,有系统管理员维护;网络电台信息模块,由普通管理员负责维护;用户收藏夹模块,由用户自己维护;基础数据模块,如国家代码,语言代码,站点信息等,有系统管理员和一般管理员共同负责维护。
客户端的设计工作只进行了粗略设计,分为上中下3部分,而中间部分也由分为左右两列,左侧是根据用户的权限进行动态显示的功能列表,右侧则是用户选定功能的界面。客户端可能遇到的技术难题均已解决,主要是Flex程序与java script进行交互,并通过java script调用Windows Media Player 控件,Flex与所创建的Web服务进行交互等。
整个Web服务端的代码基本实现,满足了设计的全部功能,已经可以投入运行。可以在以后的运行中发现不足,并不断改进。而客户端的代码实现只测试性地进行了关键技术性的测试。
致 谢
在这次毕业设计中,十分感谢自己的两位导师——校内到时孙玉山教授和实习基地的校外导师——吴旭。他们给我的毕业设计提出了十分宝贵的意见和建议,从文档用语、文章格式到技术支持和设计建议等等,从文档的开题到最终的答辩,都一直给我无私的支持。
同时也感谢我的老师丁建睿、辛国栋等,他们交给了各种各样的知识。感谢我的同学丛忠伟、高河涛等,在生活、工作和学习上给予的帮助,陪伴我一同走过校外的实习、择业和进行毕业设计的大四时光。
最后,要谢谢自己的父母和妹妹,他们为了我的学业任劳任怨,在我大学生涯的每一天都默默的关心我,从物质与精神上鼓励我,支持我。
参考文献
Eric Newcomer, Greg Lomow. Understanding SOA with Web Services 中文版. 徐涵. 电子工业出版社, 2006:1~14
David Chappell, Tyler Jewell. Java Web Services. O'Reilly, 2002:28~50
Keith Ballinger. .NET Web Services: Architecture and Implementation. Addison Wesley, 2003:100-150
David Booth, Canyang Kevin Liu. Web Service Description Language(WSDL) Version 2.0 Part 0:Primer. 2007:1-10
李安渝. SOA, 机会还是泡沫. 长风联盟, 2006:2-10
邹震. SOA会把中间件引向何方.比特网,2008:1-8
Michael Bell. Service-Oriented Modeling. John Wiley & Sons, Inc., 2008:23-27
Paul B. Monday. Web Services Patterns-Java Edition. Apress, 2003:10-15
刘飞. SOA中国路线图. Primeton Technologies Ltd, 2007:2-18
张强. 针对中国中小企业对SOA发展现状进行调查.希赛网,2008:1
Jeff Tapper, James Talbot, Matt Boles, Ben Elmore, Mike Labriola. Adobe Flex 2: Training from the Source, 1/e. Adobe Press, 2006:7-11
Nicholas C. Zakas. java script高级程序设计. 曹力,张欣. 人民邮电出版社, 2006: 384-415
Nicholas C. Zakas, Jeremy McPeak, Joe Faweett. Ajax高级程序设计. 徐峰. 人民邮电出版社, 2006:1-12
Eric J. Naiburg, Robert A. Marksimchuk. UML for Database Design. Addison Wesley, 2001:5-30