基于AJAX的社交网站交互平台设计与实现【计算机科学专业】【毕业设计+文献综述+开题报告】

基于AJAX的社交网站交互平台设计与实现【计算机科学专业】【毕业设计+文献综述+开题报告】

ID:479602

大小:687.50 KB

页数:82页

时间:2017-08-09

上传者:U-944
基于AJAX的社交网站交互平台设计与实现【计算机科学专业】【毕业设计+文献综述+开题报告】_第1页
基于AJAX的社交网站交互平台设计与实现【计算机科学专业】【毕业设计+文献综述+开题报告】_第2页
基于AJAX的社交网站交互平台设计与实现【计算机科学专业】【毕业设计+文献综述+开题报告】_第3页
基于AJAX的社交网站交互平台设计与实现【计算机科学专业】【毕业设计+文献综述+开题报告】_第4页
基于AJAX的社交网站交互平台设计与实现【计算机科学专业】【毕业设计+文献综述+开题报告】_第5页
资源描述:

《基于AJAX的社交网站交互平台设计与实现【计算机科学专业】【毕业设计+文献综述+开题报告】》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

(20届)本科毕业论文基于AJAX的社交网站交互平台设计与实现41 摘要:众所周知,社交网络是当今快速发展的互联网的一种新的成功的应用,是继电子邮件、论坛和即时通讯后一种新的网络交流方式。社交网络为个人提供了一个信息发布、交流的平台。用户通过社交网络可以方便地用文字、链接、图片等建立起个性化的空间。社交网络的发展呈现出个人化、交互化、商业化、媒体化等的特点,在经济、教育等领域中产生了巨大的影响。通过对当前主流社交网络系统进行了分析,发现它们有部分存在更新速度慢、服务器端负担重、交互性差、表现能力单一等缺陷,基本上停留在静态展示日志和图片的阶段。Ajax主要包含基web标准(standards-basedpresentation)XHTML+CSS的表示;使用DOM(DocumentObjectModel)进行动态显示及交互;使用XML和XSLT进行数据交换及相关操作;使用XMLHttpRequest进行异步数据查询、检索;使用JavaScript将所有的东西绑定在一起等相关技术,具有异步通信、响应速度快、动态效果丰富、交互能力强等优势。利用此技术来开发社交网络,能够克服上述弊端。在对Ajax的开发模式及其核心技术进行系统研究的基础上,设计并开发了基于Ajax技术的社交网络系统。在系统实现中,详细根据用户的需要,添加相关的用户界面和交互功能。用户界面:用来进入交互平台的用户注册和登录;让你的朋友可以看见你的瞬时的记录电子相册;让你的朋友知道你的点点滴滴的日记管理;可以通知朋友你关心或者提醒他的向朋友打招呼;用来和自己想交流的用户交流;取得和管理联系方便用户之间的信息传递的文件共享等功能。交互性方面:确定有无该用户的用户查找功能,可以添加你想交流的用户的用户添加功能,按不同类别为你的用户分类的用户分组等功能。根据这些功能,可以发现Ajax技术开发的Web应用在可用性和用户体验方面明显优于传统的Web应用。关键词:AJAX技术,社交网络,交互41 SocialNetworkingServicesdesignandimplementbasedonAJAXAbstract:Asweallknow,socialnetworkingistoday'sfast-growingsuccessofanewInternetapplication,istheseconde-mail,forumsandinstantmessaging,anewnetworkafterthecommunication.Socialnetworkingforindividualsprovidesareleaseofinformation,communicationplatform.Socialnetworkinguserscaneasilyusetext,links,images,etc.toestablishpersonalspace.Showingthedevelopmentofsocialnetworkspersonalized,interactive,commercialization,media,andsothecharacteristicsoftheeconomy,educationandotherareashadahugeimpact.Mainstreamsocialnetworksonthecurrentsystemisanalyzedandfoundthattherearesomeupdatesslow,heavyburdenontheserver,interactive,poorabilitytoperformsingleandotherdefects,basicallystuckinthestaticdisplayphaseofthelogandpictures.Ajax-basedwebstandardsprimarilyinclude(standards-basedpresentation)XHTML+CSSrepresentation;useDOM(DocumentObjectModel)fordynamicdisplayandinteraction;usingXMLandXSLTfordataexchangeandrelatedoperations;useXMLHttpRequestforasynchronousdataquery,retrieval;useofJavaScripttobindeverythingtogether,andotherrelatedtechnology,withasynchronouscommunication,fastresponse,thedynamiceffectofrich,interactivecapability,andotheradvantages.Usethistechnologytodevelopsocialnetworksthatcanovercometheabovedrawbacks.Ajaxdevelopmentmodelonitscoretechnologysystem,basedonthedesignanddevelopmentbasedonAjaxtechnology,socialnetworkingsystems.Inthesystemimplementation,detailedaccordingtotheneedsofusers,addtherelevantuserinterfaceandinteractivefeatures.Userinterface:usedtoentertheinteractiveplatformuserregistrationandlogin;letyourfriendscanseeyourrecordsofinstantaneouselectronicalbum;letyourfriendsknowyourbitsandpiecesofthediarymanagement;toinformafriendorremindhimthatyoucareaboutThegreetingtofriends;usedandtheywanttoexchangeusercommunication;acquisitionandmanagementofcontacttofacilitatethetransmissionofinformationbetweenusersoffilesharing.Interactiveaspects:todeterminewhethertheuser'ssearchfunction,youcanaddtheuseryouwanttoexchangetheusertoaddfunctionality,bydifferentcategoriesofusersforyourusergroupclassificationfunctions.Accordingtothesefeatures,youcanfindAjaxWebapplicationtechnologydevelopmentintermsofusabilityanduserexperienceisbetterthantraditionalWebapplications.Keywords:AJAX,SocialNetworking,Interactive41 目录第一章绪论11.1引言11.2项目背景31.3本章小结4第二章系统开发技术背景52.1Ajax技术52.2JS技术72.3本章小结8第三章系统分析93.1系统开发的指导思想93.2需求分析103.3可行性研究103.4具体功能研究103.5操作流程图113.6系统目标123.7系统软硬件要求123.7.1硬件要求123.7.2软件要求123.8本章小结12第四章系统设计134.1系统功能结构设计134.2模块简介144.3数据库设计144.3.1数据库概念设计144.3.2数据库逻辑结构设计164.4本章小结18第五章系统的详细设计与实现细节195.1社交网站分析195.1.1SNS方案介绍195.1.2登录策略介绍195.2用户界面层的开发195.3业务逻辑层的开发365.4数据访问层开发365.5本章小结36第六章总结37结束语及谢词38参考文献3941 第一章绪论1.1引言社交网络是当今快速发展的互联网的一种新应用,是继电子邮件、论坛和即时通讯后一种新的网络交流方式。社交网络为个人提供了一个信息发布、与他人交流的平台。用户通过社交网络可以方便地用文字、链接、图片等建立起个性化的空间。社交网络的发展呈现出个人化、交互化、商业化、媒体化等特点,在经济、教育等领域中产生了巨大的影响。由于生活中对社交网络的需求,也要求我们采用新的知识去发展它,让它成为跟方便、更快速的实现用户之间需要的交流。通过对主流社交网络系统进行了分析,发现它们有部分存在更新速度慢、服务器端负担重、交互性差、表现能力单一等缺陷,基本上停留在静态展示日志和图片的阶段。然而Ajax技术具有异步通信、响应速度快、动态效果丰富、交互能力强等优势。利用此技术来开发社交网络,能够克服上述弊端。对Ajax的开发模式及其核心技术进行系统的研究,因此采用Ajax技术来实现一个简单的社交网络系统。在系统实现中,详细根据用户的需要,添加相关的用户界面和交互功能。用户界面:用来进入交互平台的用户注册和登录;让你的朋友可以看见你的瞬时的记录电子相册;让你的朋友知道你的点点滴滴的日记管理;可以通知朋友你关心或者提醒他的向朋友打招呼;用来和自己想交流的用户交流;取得和管理联系方便用户之间的信息传递的文件共享等功能。交互性方面:确定有无该用户的用户查找功能,可以添加你想交流的用户的用户添加功能,按不同类别为你的用户分类的用户分组等功能。根据这些功能,可以发现Ajax技术开发的Web应用在可用性和用户体验方面明显优于传统的Web应用。最近IE和火狐之间的浏览器之争变得火热起来,因此Ajax开发人员需要足够敏捷的作出反应。关键点在一些问题如CSS或XML,虽然各种浏览器形成采用最新标准的不同阵营(如Mozilla拥抱SVG和E4X标准及在最新火狐BETA版本中使用XUL,而微软使用自己的XAML技术)。所有这些技术代表当前AJAX主流JavaScript和XML的市场方向改变。总的来说,Ajax开发人员必须尽快地跟进最新的技术并利用高产的工具集。成功的Ajax开发人员还需要留心他们的使用者以避免将任何问题扩大化。并且Ajax开发人员还需要持续地创新来创建增强Web应用易用性的新方法。  传统的web应用允许用户填写表单(form),当提交表单时就向web服务器发送一个请求。服务器接收并处理传来的表单,然後返回一个新的网页。这个做法浪费了许多带宽,因为在前後两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多。与此不同,Ajax[应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于XML的web41 service接口,并在客户端采用JavaScript处理来自服务器的响应。因此在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快的应用。同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信`息。Ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。就像DHTML应用程序那样,Ajax应用程序必须在众多不同的浏览器和平台上经过严格的测试。随着Ajax的成熟,一些简化Ajax使用方法的程序库也相继问世。同样,也出现了另一种辅助程序设计的技术,为那些不支持JavaScript的用户提供替代功能。  对应用Ajax最主要的批评就是,它可能破坏浏览器后退按钮的正常行为。在动态更新页面的情况下,用户无法回到前一个页面状态,这是因为浏览器仅能记下历史记录中的静态页面。一个被完整读入的页面与一个已经被动态修改过的页面之间的差别非常微妙;用户通常都希望单击后退按钮,就能够取消他们的前一次操作,但是在Ajax应用程序中,却无法这样做。不过开发者已想出了种种办法来解决这个问题,当中大多数都是在用户单击后退按钮访问历史记录时,通过建立或使用一个隐藏的IFRAME来重现页面上的变更。(例如,当用户在GoogleMaps中单击后退时,它在一个隐藏的IFRAME中进行搜索,然后将搜索结果反映到Ajax元素上,以便将应用程序状态恢复到当时的状态。)一个相关的观点认为,使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中。该问题的解决方案也已出现,大部分都使用URL片断标识符(通常被称为锚点,即URL中#后面的部分)来保持跟踪,允许用户回到指定的某个应用程序状态。(许多浏览器允许JavaScript动态更新锚点,这使得Ajax应用程序能够在更新显示内容的同时更新锚点。)这些解决方案也同时解决了许多关于不支持后退按钮的争论。进行Ajax开发时,网络延迟——即用户发出请求到服务器发出响应之间的间隔——需要慎重考虑。不给予用户明确的回应,没有恰当的预读数据,或者对XMLHttpRequest的不恰当处理,都会使用户感到延迟,这是用户不欲看到的,也是他们无法理解的。通常的解决方案是,使用一个可视化的组件来告诉用户系统正在进行后台操作并且正在读取数据和内容。一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax;用JavaScript作的Ajax引擎[10],JavaScript的兼容性和DeBug都是让人头痛的事;Ajax的无刷新重载,由于页面的变化没有刷新重载那么明显,所以容易给用户带来困扰――用户不太清楚现在的数据是新的还是已经更新过的;现有的解决有:在相关位置提示、数据更新的区域设计得比较明显、数据更新后给用户提示等;对串流媒体[11]的支持没有FLASH、JavaApplet好。近几年,社交网络的研究引起学术界越来越多地关注,研究内容包括社交网络的拓扑分析、社会化推荐(SocialRecommendation)、网络社区发现、社交网络中的信息传播等,也取得了一些成果。社交网络开发的Ajax设计模式之Lightbox,Lightbox的效果类似于WinXP操作系统的注销/关机对话框,除去屏幕中心位置的对话框,其他的区域都以淡出的效果逐渐变为银灰色以增加对比度,此时除了对话框内的表单控件,没有其他区域可以获取焦点。Lightbox的作用则相当于从前只在IE中被支持的"ModalDialog";现在在FireFox也可用window.open(url,name,"modal=yes");来实现同样的效果。使用"ModalDialog"将限制用户的操作于弹出的对话框中,只有完成设定好的操作后方才关闭。在一些逻辑敏感的应用中强制吸引用户的注意力以防止用户的误操作导致程序逻辑淆乱。社交网络中Ajax技术应用,41 最近互联网上比较火热的话题当然是关于社交网络的应用,其中AJAX又是社交网络的核心之一。AJAX[12]是AsynchronousJavaScriptandXML的缩写。它并不是一门新的语言或技术,它实际上是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用,它包括:使用XHTML和CSS[13]标准化呈现;使用DOM实现动态显示和交互;使用XML和XSLT进行数据交换与处理;使用XMLHttpRequest进行异步数据读取;最后用JavaScript绑定和处理所有数据。Ajax的工作原理相当于在用户和服务器之间加了—个中间层,使用户操作与服务器响应异步化。这样把以前的一些服务器负担的工作转嫁到客户端,利于客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约ISP的空间及带宽租用成本的目的。1.2项目背景Ajax技术在1998年前后得到了应用。允许客户端脚本发送HTTP请求(XMLHTTP)的第一个组件由OutlookWebAccess小组写成。该组件原属于微软ExchangeServer,并且迅速地成为了InternetExplorer4.0的一部分。部分观察家认为,OutlookWebAccess是第一个应用了Ajax技术的成功的商业应用程序,并成为包括Oddpost的网络邮件产品在内的许多产品的领头羊。但是,2005年初,许多事件使得Ajax被大众所接受。Google在它著名的交互应用程序中使用了异步通讯,如Google讨论组、Google地图、Google搜索建议、Gmail等。Ajax这个词由《Ajax:ANewApproachtoWebApplications》[1]一文所创,该文的迅速流传提高了人们使用该项技术的意识。另外,对Mozilla/Gecko的支持使得该技术走向成熟,变得更为易用。  Ajax前景非常乐观,可以提高系统性能,优化用户界面。Ajax[2]现有直接框架AjaxPro,可以引入AjaxPro.2.dll文件,可以直接在前台页面JS调用后台页面的方法。但此框架与FORM验证有冲突。另微软也引入了Ajax组件[3],需要添加AjaxControlToolkit.dll文件,可以在控件列表中出现相关控件。Ajax主要包含的技术[4],基web标准(standards-basedpresentation)XHTML+CSS[5]的表示;使用DOM(DocumentObjectModel)[6]进行动态显示及交互;使用XML和XSLT[7]进行数据交换及相关操作;使用XMLHttpRequest进行异步数据查询、检索;使用JavaScript[8]将所有的东西绑定在一起。英文参见Ajax的提出者JesseJamesGarrett的原文,原文题目(Ajax:ANewApproachtoWebApplications)。类似于DHTML或LAMP,AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。事实上,一些基于Ajax的“派生/合成”式(derivative/composite)的技术正在出现,如“AFLAX”。Ajax的应用使用支持以上技术的web浏览器作为运行平台。这些浏览器目前包括:Mozilla、Firefox、InternetExplorer、Opera、Konqueror及Safari。但是Opera不支持XSL格式对象,也不支持XSLT。社交网络[9]含义包括硬件、软件、服务及应用,由于四字构成的词组更符合中国人的构词习惯,因此人们习惯上用社交网络来代指SNS(SocialNetworkService)。社交网络源自网络社交,网络社交的起点是电子邮件。互联网本质上就是计算机之间的联网,早期的E-mail解决了远程的邮件传输的问题,至今它也是互联网上最普及的应用,同时它也是网络社交的起点。BBS则更进了一步,把“群发”和“转发”常态化,理论上实现了向所有人发布信息并讨论话题的功能(疆界是BBS的访问者数量)。BBS把网络社交推进了一步,从单纯的点对点交流的成本降低,推进到了点对面交流成本的降低。即时通信41 (IM)和博客(Blog)更像是前面两个社交工具的升级版本,前者提高了即时效果(传输速度)和同时交流能力(并行处理);后者则开始体现社会学和心理学的理论——信息发布节点开始体现越来越强的个体意识,因为在时间维度上的分散信息开始可以被聚合,进而成为信息发布节点的“形象”和“性格”。比如从RSS、flickr到最近的YouTube、Digg、Mini-feed、Twitter、Fexion、Video-Mail都解决或改进了单一功能,是丰富网络社交的工具。随着网络社交的悄悄演进,一个人在网络上的形象更加趋于完整,这时候社交网络出现了。交友只是社交网络的一个开端,就像Google的开端只是每个网页的backlinks那么普通一样,社交网络的开端只是获取你的个人资料和好友列表。社交网络大体经历了这样一个发展过程:早期概念化阶段──SixDegrees代表的六度分隔理论;结交陌生人阶段──Friendster帮你建立弱关系从而带来更高社会资本的理论;娱乐化阶段──MySpace创造的丰富的多媒体个性化空间吸引注意力的理论;社交图阶段──Facebook复制线下真实人际网络来到线上低成本管理的理论。整个SNS发展的过程是循着人们逐渐将线下生活的更完整的信息流转移到线上进行低成本管理,这让虚拟社交越来越与现实世界的社交出现交叉。人类历史上,大凡重要的技术革命都伴随媒介革命,人类任何活动本质上都是信息活动,信息流的传递介质、管理方式的不同将决定你接受信息的不同,所有有关信息流媒介的变革一定是底层的变革——网络社交也是如此。从网络社交的演进历史来看,它一直在遵循“低成本替代”原则。网络社交一直在降低人们社交的时间和物质成本,或者说是降低管理和传递信息的成本。与此同时,网络社交一直在努力通过不断丰富的手段和工具,来替代传统社交来满足人类这种社会性动物的交流需求,并且正在按照从“增量性的娱乐”到“常量性的生活”这条轨迹不断接近基本需求。如果说在网络社交的起点——电子邮件时代,网络仅仅可以满足人们5%的社交需求,那么今天丰富的社交网络已经可以把这个数字至少提升了10倍,除了“接触型”的社交行为,或者说是“接触型”信息的收集和发布之外,网络社交已经开始承担大部分传统社交的作用。实际上,“非接触型”的社交原本就占据了人类社交的80%以上,这意味着网络社交对传统世界必然会带来巨大的影响。网络社交不仅仅是一些新潮的商业模式,从历史维度来看,它更是一个推动互联网向现实世界无限靠近的关键力量。目前,社交网络含盖以人类社交为核心的所有网络服务形式,互联网是一个能够相互交流,相互沟通,相互参与的互动平台,互联网的发展早已超越了当初ARPANET的军事和技术目的,社交网络使得互联网从研究部门、学校、政府、商业应用平台扩展成一个人类社会交流的工具。现在网络社交更是把其范围拓展到移动手机平台领域,借助手机的普遍性和无线网络的应用,利用各种交友/即时通讯/邮件收发器等软件,使手机成为新的社交网络的载体。社交网络,也就是网络+社交的意思。通过网络这一载体把人们连接起来,从而形成具有某一特点的团体。  1.3本章小结这一章节主要讲述了社交网络的发展历史和发展过程中遇到的技术问题以及与以前社交网络的区别,然后根据目前流行的社交网络采用的新技术提出它的未来发展方向。另一方面,本章也涉及了Ajax技术的历史发展以及它目前的应用,通过对当前主流的社交网站以及浏览器的分析,可以得到应用Ajax技术带来的各种独具一格又耳目一新的效果。41 第二章系统开发技术背景2.1Ajax技术Ajax即“AsynchronousJavaScriptandXML”(异步JavaScript和XML),Ajax并非缩写词,而是由JesseJamesGaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术。主要包含的技术,基web标准(standards-basedpresentation)XHTML+CSS的表示;使用DOM(DocumentObjectModel)进行动态显示及交互;使用XML和XSLT进行数据交换及相关操作;使用XMLHttpRequest进行异步数据查询、检索;使用JavaScript将所有的东西绑定在一起。基web标准(standards-basedpresentation)XHTML+CSS的表示:XHTML语言是目前最流行的网页制作语言之一。它是在HTML(超文本标记语言)基础上应用XML的更加规范的语言。相对于HTML,XHTML语言具有更加规范、简洁的特点,同时具有更好的扩展性。在W3C组织的推广下,XHTML语言已经成为Web标准的一个重要的组成部分。很多大型的门户网站和商业站点都已经使用XHTML语言进行了重构。XHTML语言已经成为Web技术的发展趋势,并将会继续领导Web技术的潮流。随着Web技术的不断发展和成熟,HTML语言的弊端也变得越来越明显。同时随着Web2.0技术的提出,越来越多的Web技术需要依赖XHTML语言。XHTML语言已经成为网页制作者必须要掌握的语言之一。使用DOM(DocumentObjectModel)进行动态显示及交互:DocumentObjectModel(DOM)是一个跨平台的,与语言无关的约定,用于代表在HTML,XHTML和XML中的对象,以及与这些对象进行交互。使用DOM可以允许程序和脚本动态地访问和更新文档的内容,结构,和样式。文档还可以被DOM进一步地进行处理,处理之后的结果可以被纳回展现页面上。也就是说,通过DocumentObjectModel,我们实现了一种模型,在这个模型中,文档或者页面是包含对象的(element,link等等),而且这些对象可以被操纵.即,你能够添加,删除,修改element,修改element的内容,或者添加,删除,修改一个属性。你可以得到文档中所有H1元素的列表,或者所有含有属性值为CLASS="foo"这样的元素。使用XML和XSLT进行数据交换及相关操作:XML(ExtensibleMarkupLanguage)即可扩展标记语言,它与HTML一样,都是SGML(StandardGeneralizedMarkupLanguage,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。XSLT是扩展样式表转换语言(ExtensibleStylesheetLanguageTransformations)的简称,这是一种对XML文档进行转化的语言,XSLT中的T代表英语中的“转换”(transformation)。它是XSL(Extensiblestylesheetlanguage)规范的一部分。XSLT是一种用于将XML文档转换为XHTML文档或其他XML文档的语言。使用XMLHttpRequest进行异步数据查询、检索:41 实现Ajax的基础是与服务器之间的通信层。执行这种通信最完善的选择是JavaScript的XMLHttpRequest对象。最初,Microsoft设计XMLHttpRequest是用来实现在IE环境中用JavaScript载入XML文档的。虽然其名字中有XML,但XMLHttpRequest实际上是针对JavaScript的普通HTTP客户端。基于此,JavaScript可以发起GET或POST类型的HTTP[15]请求(对于POST请求,可以将数据用所选择的格式发送给服务器)。XMLHttpRequest的主要限制是浏览器的安全沙箱,它只能发起HTTP(S)请求(例如指向文件的URL就是不能实现的),并且只能够向和当前载入页面处于同一个域(即域名相同)的目标页面发送请求。虽然XMLHttpRequest只提供了一个很小的API,它只提供了少数的方法和属性,但对于不同的浏览器仍然有区别。这些区别主要表现在事件处理和对象实例化方面(在IE中,其实际上是一个ActiveX对象),因此与其打交道并不困难。在以下关于XMLHttpRequestAPI的概述中,将使用Mozilla中实例化XMLHttpRequest的语法。XMLHttpRequest之所以成为Ajax通信中最常用的方法,是因为它提供了两个独特的功能。第一个功能是用来载入新内容的,它无需对内容做任何修改,这使得将Ajax融入常规开发模式中更为简单。第二个功能是通过JavaScript发出同步调用。同步调用在完成之前,会停止所有其他操作,虽然这不是经常使用的选项,但对于在继续后续操作之前必须完成当前请求很有效。使用JavaScript将所有的东西绑定在一起:javascript事件的绑定,可以使得客户端的JavaScript有机会被激活,并得以运行。在一个Web页面装载之后,运行脚本的唯一方式,就是响应系统或者用户的动作。  ExtJS是一种主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架。  功能丰富,无人能出其右。无论是界面之美,还是功能之强,ext的表格控件都高居榜首。单选行,多选行,高亮显示选中的行,推拽改变列宽度,按列排序,这些基本功能咱们就不提了。自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,这些也算可以想到的功能。再加上可编辑grid,添加新行,删除一或多行,提示多行数据,推拽改变grid大小,grid之间拖拽一或多行,甚至可以在tree和grid之间进行拖拽,啊,这些功能实在太神奇了。更令人惊叹的是,这些功能竟然都在ext表格控件里实现了。ExtJs初期仅是对Yahoo!UI的对话框扩展,后来逐渐有了自己的特色,深受网友的喜爱。发展至今,Ext除YUI外还支持Jquery、Prototype等的多种JS底层库,让大家自由地选择。该框架完全基于纯Html/CSS+JS技术,提供丰富的跨浏览器UI组件,灵活采用JSON/XML数据源开发,使得服务端表示层的负荷真正减轻,从而达到客户端的MVC应用!ExtJs支持多平台下的主流浏览器InternetExplorer6+FireFox1.5+(PC,Mac)Safari2+、Opera9+。在使用的厂家包括IBM、Adobe、Cisco和更多。JQuery、Prototype和YUI都属于非常核心的JS库。虽然YUI,还有最近的JQuery,都给自己构建了一系列的UI器件(Widget),不过却没有一个真正的整合好的和完整的程序开发平台。哪怕是这些低层的核心库已经非常不错了,但当投入到真正的开发环境中,依然需要开发者做大量的工作去完善很多缺失之处。而Ext就是要填补这些缺口。主流开源框架中只有Dojo像Ext一样,尝试着提供整合的开发平台。相比Dojo这个出色的工具包,我们认为Ext能提供一个粘合度更高的应用程序41 框架。Ext的各个组件在设计之时就要求和其它Ext组件组合一起工作是无缝合作的。这种流畅的互通性,离不开一个紧密合作的团队,还必须时刻强调设计和开发这两方面目标上的统一,而这点是很多开源项目未能做到的。从构建每一个组件开始,我们始终都强调组件的外观、性能、互通性和可扩展性,而我们认为组件已经达到了这几点的要求。Ext绝对可以单独使用。实际上,除了有特定的要求,推荐单独使用Ext,这样的话文件占位更小,支持和整合也更紧密。我们也支持与jQuery、YUI或Prototype整合使用,作为低层库的角色出现,以提供处理各种核心的服务,如DOM和事件处理,Ajax连接和动画特效。使用整合方式的一个原因是它们已具备了一些特定的器件而Ext并没有原生支持——像YUI的History控件便是一个典型的例子。这时,Ext需要依赖YUI这个库的底层来实现History控件,这样一来的话也可免去Ext自身底层库,从而减少了整个程序的内存占用。另一个使用整合方式的原因是,对于许多已在使用其他底层库的程序,你可能希望逐步加入Ext。总之,如果已经有了其他库,Ext可已利用它们。我们的宗旨是为用户提供各种可能性和性能上的优化。而事实是,只要实现了相对应的底层库接口,为任意一个框架添加上适配器是没有问题的——人们可以轻松地将Dojo、Moo、Ajax.NET,或其它JS库转变为Ext的底层。Ajax只是Js框架中的一个子集。2.2JS技术指的是Javascript和Jscript简称JS都是因特网上最流行的网页脚本语言,前者与Java无任何关系,后者是微软开发。它是网站前端开发必要的一种所谓的特效技术。  JS文件只需用记事本就可打开修改,修改完成必须以JS为后缀的文件。  JS语言简单使用方法如下:打开记事本新建名为test.html的文件,写入记事本代码如下:    document("Hellowworld");  alert("成功了,这就是JS代码")    JS=JavaScript,一种计算机脚本语言,主要在web浏览器(客户端)解释执行,由网景公司开发。JScript是由微软公司开发的活动脚本语言,是微软对ECMAScript规范的实现。JavaScript是一种新的描述语言,此一语言可以被嵌入HTML的文件之中。通过JavaScript可以做到回应使用者的需求事件(如:form的输入)而不用任何的网路来回传输资料,所以当一位使用者输入一项资料时,它不用经过网络传给服务器端(server)处理,再传回来的过程,而直接可以被客户端(client)的应用程序所处理。脚本语言真正面向的是特定类型问题的解决,其中主要涉及如何创建更丰富、更具有互动能力的图形用户界面(GUI)。然而,脚本语言也许能解决客户端编程中80%的问题。你碰到的问题可能完全就在那80%里面。而且由于脚本编制语言的宗旨是尽可能地简化与快速,所以在考虑其他更复杂的方案之前(如Java及ActiveX),首先应想一下脚本语言是否可行。41 2.3本章小结本章主要介绍了各种Ajax技术,它包含了基web标准XHTML+CSS的表示;使用DOM(DocumentObjectModel)进行动态显示及交互;使用XML和XSLT进行数据交换及相关操作;使用XMLHttpRequest进行异步数据查询、检索;使用JavaScript将所有的东西绑定在一起和Ajax最流行的框架即ExtJs框架。本章也介绍了关于JS的技术即目前最流行的网页脚本语言。41 第三章系统分析系统分析是应用系统的思想和方法,把复杂的对象分解成简单的组成部分,找出这些部分的基本属性和彼此间的关系。它是信息系统开发工作中最重要的一环,其内容主要包括对组织各部门、各业务的详细了解,并在此基础上进行分析,提出新方案,以开发出符合用户要求的管理信息系统,它的基本任务是:系统分析员与用户在一起,充分了解用户的要求,并把理解用系统说明书表达出来。需求分析简单地说就是分析用户的需求。需求分析是设计数据库的起点,需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。需求分析的任务是通过详细调查现实世界要处理的对象(组织、部门、学校等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。调查的重点是“数据”和“处理”,通过调查、收集与分析,获得用户对数据库的如下要求:(1)信息要求。指用户需要从数据库中获得信息的内容和性质。由信息要求可以导出数据要求,即在数据库中需要存储哪些数据。(2)处理要求。指用户要完成什么处理功能,对处理的响应时间有什么要求,处理方式是批处理还是联机处理。(3)安全性与完整性要求。确定用户的最终需求是一件很困难的事,这是因为一方面用户缺少计算机知识,开始时无法确定计算机究竟能为自己做什么,不能做什么,因此往往不能准确地表达自己的需求,所提出的需求往往不断地变化。另一方面,设计人员缺少用户的专业知识,不易理解用户的真正需求,甚至误解用户的需求。因此设计人员必须不断深入地与用户交流,才能逐步确定用户的实际需求。3.1系统开发的指导思想(1)采用结构化系统分析的方法采用结构化系统分析的方法建立新系统的逻辑模型,此模型尽量避免使用计算机术语,便于企业的计算机人员与系统开发人员的共同讨论。本系统的结构是层次化的暗盒模块结构。对高层模块,将采用以事物为中心的设计策略,把一个大的复杂的系统逐步分解成小的相对简单的暗盒模块,对低层模块,采用以变换为中心的设计策略。因此,为了提高模块的内聚性,降低模块的耦合程度,本系统采用分层设计模式。可以使系统更加合理,维护更加简单。(2)注重系统的适用性在设计的时候,尽量避免了编程语言的原因而造成的错误。输入错误是不能完全避免的,在本系统中,当用户操作出错时,我们努力并实现在系统中给出友好的提示。(3)注重系统的实用性系统使用时不要求使用者懂得各个功能实现的原理,他们只需在友好的界面上进行操作,输入数据并得到正确的结果就可以了。(4)注重系统安全性由于本人的知识水平限制,只能从完善口令管理、密码加密,控制权限,从而保证应用系统的日常管理和控制。41 3.2需求分析随着社会经济的发展,人们对社交网络越来越重视。网络是生活的一个重要环节,它可以满足我们对知识的渴望。但传统的社交网络存在太多的缺点,大部分都存在更新速度慢、服务器端负担重、交互性差、表现能力单一等缺陷,基本上停留在静态展示日志和图片的阶段。而且这些功能都是由相应技术支持的,随着网络应用技术的发展,解决此类功能缺陷是完全有可能的,也是轻而易举的。为了让更多的人接触到高速,安全,动态,可靠的网络应用平台。在这种情况下Ajax技术应运而生。Ajax在社交网络的出现,不仅节省了用户访问的大量时间,还为用户增添了更多的内容。同时也能为用户提供更全面更灵活的服务。为了满足用户的需求,在系统实现中,详细根据用户的需要,添加相关的用户界面和交互功能。用户界面:用来进入交互平台的用户注册和登录;让你的朋友可以看见你的瞬时的记录电子相册;让你的朋友知道你的点点滴滴的日记管理;可以通知朋友你关心或者提醒他的向朋友打招呼;用来和自己想交流的用户交流;取得和管理联系方便用户之间的信息传递的文件共享等功能。交互性方面:确定有无该用户的用户查找功能,可以添加你想交流的用户的用户添加功能,按不同类别为你的用户分类的用户分组等功能。3.3可行性研究可行性分析的目的就是要用最小的代价在尽可能短的时间内确定问题是否能够解决,是否可行。通过分析解决方法的利弊,来判定系统目标和规模是否可以实现,系统完成之后所能带来的效益是否值得我们去开发这么一个系统。社交网络的可行性分析可从下面几个方面考虑:经济可行性:与旧时的社交网络相比,采用Ajax技术的社交网络明显降低了用户的等待时间,增加了用户的选择性以及吸引了更多的用户登录,明显提高了经济效益。技术可行性:开发一个社交网站,涉及的最核心的技术问题就是如何实现不刷新的情况下实时显示模块功能及相关操作,如何实现界面的自动选择,要在权限规定的范围内进行相应的操作。这些用Ajax都可以实现。操作可行性:访问社交网络的人员主要有二类:用户和管理员。目前资源的利用情况和可操作性只需少量的对数据库中表的直接操作就可以实现系统的完整、稳定的运行,不会造成系统巨大的压力。3.4具体功能研究界面部分用户端功能(1)用户注册和登录用来进入交互平台,是取得进入系统的凭证和所需的操作。(2)登录后的界面模拟Windows的桌面,可以选择你要操作的功能。(3)相册是保持用户之间联系的方式,可以让你的朋友看见你的瞬时记录,尤其是美好的时刻。41 (4)日志 可以让用户彼此之间了解对方的点点滴滴,可以使彼此之间深入了解。(5)分享可以与好友之间分享信息,可以查看自己和好友的分享。3.5操作流程图相册注册用户用户端界面选择分享登陆日志用户操作流程图上图介绍的是普通用户对该系统的操作要求,即若用户没有账号必须先注册才能登陆否则的话可以直接登录,对登陆到系统的用户,系统允许用户进行三个可自主选择的功能模块进行操作。查看会员管理员管理员界面登陆管理员管理管理员操作流程图上图介绍的是系统的特殊用户即系统管理员可以对本系统进行的操作,他也必须先登录,但是他的账号是系统事先设置好的而且不能修改。进入系统后,他也可以进行相关的操作,即查看会员和管理员管理。41 3.6系统目标本程序是将传统的社交网络与先进的技术应用相结合进行开发设计的,主要实现如下目标:◆具有实时性,已注册的用户无论身在何地,通过Internet浏览器,都可登陆社交网站。◆具有自主性,系统提供的模块选择功能,当用户登录系统中,可以自主选择操作模块。◆用户可随时登录到系统。3.7系统软硬件要求3.7.1硬件要求服务器的机器主要配置情况:CPUP43.0GMHZ以上内存512MB以上3.7.2软件要求操作系统:WINNXP/WINDOWS7数据库:MSQL2005开发环境:VS2008开发语言:C#语言浏览器:IE7.0及以上3.8本章小结本章主要介绍了系统设计之前所需的各种流程,即对即将要实现的系统进行完整的需求分析,包括系统开发的思想,需求分析和可行性分析等各种分析。同时也涉及到对要实现的系统的功能进行简要的罗列。以及对使用该系统的人员及其操作进行简单的分析,对将要实现的系统的软硬件等要求和实现该系统的目标进行简要介绍。41 第四章系统设计在前面进行了一系列的系统调查和系统分析以后,接下来的工作便是系统设计了。这是软件工程中第二个关键的阶段。它是根据前面的几个阶段的结果,在已获准的系统分析报告基础上进行系统设计。系统设计阶段是开发系统的重要阶段。这个阶段。我们需要把前面阶段收集来的信息进行整理(特别是用户的需求分析),找出我们需要的信息,定下系统开发过程中我们需要实现的功能。这个其实比较有难度的同时比较重要的。数据库如何能设计的尽可能全面而又合理、模块之间的联系程度、前后台的依赖关系如何反映,是在这一阶段感触最深的三个方面。数据库是所有信息的集合,好的数据库设计可以大大减少数据冗余度,如果数据冗余度太大,将占用很对系统资源,给服务器带来沉重的负担。还有数据库的设计也要充分考虑到前台代码执行的效率,不能仅仅是为了设计数据库设计而设计,这会可能导致在编写代码时遇到诸多不便,这一点还需我在以后的工作中好好研究。在系统设计阶段,每个模块应该尽可能的独立,这样可以减少模块间的调用关系和数据交换关系。每个模块的功能最好能让其尽可能的单一,这样易于以后系统的修改,可以大大的减少相关的操作。在做系统的时候,发现自己原先设计下来的模块不合理,难以满足用户的需求或则是难以实现这个功能,那就必须把这个模块推翻了,如果这个模块又设计到其他的模块,那这个对系统的改动是巨大的。这就要求我们尽早确定系统的核心模块,减少改动。4.1系统功能结构设计根据社交网站系统的特点,可以让用户选择自己想要操作的功能。根据不同的用户,画出社交网站系统的功能结构图如图4-1所示社交网站系统管理员用户登陆普通用户登陆管理员操作用户操作(图4-1)系统功能结构图41 4.2模块简介社交网站系统是一个功能完善的网络应用程序,由用户登录以及选择操作功能组成。◆用户模块用户模块主要包括用户登录,注册,相册,日志等功能。◆操作界面如果用户通过验证,可以登录到模拟Windows的操作界面,执行相关的操作。4.3数据库设计由于社交网站系统对于数据的安全性及完整性要求都比较高,并且为了增加程序的适应范围,还要保证系统可以拥有存储足够多数据的能力。SQL2005是一种高性能的关系型数据库管理系统,他在SQL2005的基础上又扩展了系统性能、可靠性、安全性和易用性,逐步成为在线事务进程和数据仓库等最好的数据平台。综上所述,本系统采用MySQL5.1数据库。4.3.1数据库概念设计根据以上各节对系统所做的需求分析和系统设计,规划出本系统中使用的数据库实体分为用户实体,日志实体,相册实体,分享实体等。下面将介绍几个关键实体的E-R图。(1)用户实体用户实体包括用户名、电子邮件、密码、真实姓名、生日、现居住地、性别等属性。用户的E-R图如图4-2所示。用户名电子邮件密码生日性别用户现居住地真实姓名(图4-2用户实体E-R图)该E-R图主要列出了用户的各种属性,使后期对该系统的用户特性有了一定的了解。41 (1)日志实体日志实体包括我的日志、朋友的日志、发表新日志等实体。日志的E-R图如图4-3所示。朋友的日志我的日志日志发表新日记(图4-3日记实体E-R图)该E-R图主要列出了日志实体的各种属性,使用户能了解对日志实体能进行的操作。(2)相册实体相册实体包括我的相册,朋友的相册和上传图片等属性。相册的E-R图如图4-4所示。朋友的相册我的相册相册上传图片(图4-4相册实体E-R图)该E-R图主要列出了相册实体的各种属性,使用户能了解对相册实体能进行的操作。41 (1)分享实体分享实体包括我的分享,好友的分享等属性。分享的E-R图如图4-5所示。我的分享分享好友的分享(图4-5分享实体E-R图)该E-R图主要列出了分享实体的各种属性,使用户能了解对分享实体能进行的操作。4.3.2数据库逻辑结构设计根据上面的E-R图可以创建对应的数据表。表4-1用户表的结构列名数据类型长度主键否功能描述UserIDint8是编号UserNamevarchar50否用户名passwordvarchar50否密码TrueNamevarchar50否真实姓名emailVarchar50否电子信箱SexInt2否性别CityVarchar50否现居住地LoginTimesint8否登陆次数41 表4-2相册表的结构列名数据类型长度主键否功能描述AlbumIDint8是编号UserIDvarchar50否用户编号TitleVarchar50否相册名DescriptionVarchar50否描述ImagesCountInt8否照片数表4-3分享表的结构列名数据类型长度主键否功能描述idBigint8是编号UserIDvarchar50否用户名ShareTypevarchar8否共享类型Titlevarchar8否标题Commentsvarchar4否评论表4-4日记表的结构列名数据类型长度主键否功能描述IDint8是编号UserIDint8否用户编号titlevarchar50否日记标题Contentdatetime50否内容CommentsVarchar50否评论41 表4-5照片表的结构列名数据类型长度主键否功能描述idint8是编号UserIDint8否用户编号AlbumIDint8否相册编号DescriptionVarchar50否描述CommentsVarchar50否评论4.4本章小结在前面各章节的前提下,本章是针对系统的特定功能的具体实现进行一定的罗列。包括系统的模块和数据库的设计,尤其是数据库的设计,它是该阶段最重要的步骤。为下章的详细设计提供了保障。41 第五章系统的详细设计与实现细节5.1社交网站分析在社交网站建设中,用户参数的设计是一个重要环节。在本系统设计中,将多个用户参数存储在MySQL5.1数据库的用户表中。5.1.1SNS方案介绍每次注册或登录前必须先运行整个系统,根据需要确定用户所需要的操作。当用户登录系统选择他所要执行的操作,他可以在登录界面选择电子相册和日记管理功能。在选择给定的功能之后,可以进行其固有功能的操作,并在界面上确定进一步将要进行的功能操作。就可以完成其流程。5.1.2登录策略介绍本系统采用用户选择操作,可以直接登录或者先注册然后登录,在登录界面上单击登录后,可以进入到系统的用户界面,在界面上可以进行相关的操作。5.2用户界面层的开发用户界面层用来展现在客户浏览器中显示的用户界面HTML标记和css来显示由业务逻辑层动态传送的数据信息,通过使用相应的并负责获得用户录入的数据,完成对录入数据的校验,并将录入数据传送给业务逻辑层,即用户通过浏览器,进入用户界面层,通过页面输入登录信息,实现访问请求过滤。本系统采用了大量的AJAX技术,你会发现,所有的操作基本上都是在一个页面上操作,这不但给用户带来了方便,而且使用AJAX技术,用户将感觉不到刷新的过程,这也减少了网络数据的传输。下图是表示层的显示界面:如图5-1所示的是用户登录界面,这是用户登录系统前的页面,从这里用户可以直接登录到系统。图5-1用户登录界面41 相关代码:namespaceJuSNS.Web{publicclasslogin:BasePage{publicstringisRegMobile=Public.GetXMLValue("isRegMobile");publicstringloginCode=Public.GetXMLValue("loginCode");publicoverridevoidPage_Load(refVelocityContextcontext){ShowInfo(refcontext);}protectedvoidShowInfo(refNVelocity.VelocityContextcontext){stringr=GetQueryString("r");stringurls=GetQueryString("urls");#region判断状态if(!string.IsNullOrEmpty(r)){switch(r){case"out":clearCookies();context.Put("redirecturl",root+"/default"+ExName);break;case"ip":clearCookies();context.Put("error",CharsetOp("ipchange"));break;case"Err_NameOrPwdError":clearCookies();context.Put("error",CharsetOp("nonampwd"));break;case"Err_DurativeLogError":clearCookies();context.Put("error",CharsetOp("lxlogin"));break;case"Err_TimeOut":clearCookies();context.Put("error",CharsetOp("etime"));break;}}else{if(this.GetUserID()>0){context.Put("redirecturl",root+"/home/default"+ExName);}}#endregionbase.Page_Loadno(refcontext);context.Put("cpagetitle",CharsetMain("login"));context.Put("urls",urls);if(loginCode=="1"){context.Put("isvcode",string.Empty);}if(isRegMobile=="1"){context.Put("mobile","/"+CharsetMain("mobile"));}else{context.Put("mobile",string.Empty);}}///

///清除Cookies///publicvoidclearCookies(){HttpCookieSNSToKenCookie=HttpContext.Current.Request.Cookies["SNSUserPassPort"];if(SNSToKenCookie!=null){SNSToKenCookie.Values.Clear();SNSToKenCookie.Domain=JuSNS.Config.UiConfig.CookieDomain;SNSToKenCookie.Expires=Convert.ToDateTime(DateTime.Now).AddDays(-1);HttpContext.Current.Response.SetCookie(SNSToKenCookie);}HttpCookieSNSToKenCookie1=HttpContext.Current.Request.Cookies[UiConfig.AdminCookies];if(SNSToKenCookie1!=null){SNSToKenCookie1.Values.Clear();SNSToKenCookie1.Domain=JuSNS.Config.UiConfig.CookieDomain;SNSToKenCookie1.Expires=Convert.ToDateTime(DateTime.Now).AddDays(-1);HttpContext.Current.Response.SetCookie(SNSToKenCookie1);}}//////登录//////publicoverridevoidPage_PostBack(refNVelocity.VelocityContextcontext){stringurls=GetString("urls");base.Page_Loadno(refcontext);#region合法性判断stringusername=GetFormString("username");stringpassword=GetFormString("password");stringautologin=GetFormString("autologin");stringerrSTR=string.Empty;if(string.IsNullOrEmpty(username)){errSTR+=CharsetMain("username")+"
";}if(string.IsNullOrEmpty(password)){errSTR+=CharsetMain("pwd")+"
";}if(loginCode=="1"){stringvcode=GetFormString("vcode");if(HttpContext.Current.Session["JuSNSCheckCode"]==null){errSTR+=CharsetLang("vcode")+"
";}else{if(vcode!=HttpContext.Current.Session["JuSNSCheckCode"].ToString()){errSTR+=CharsetLang("vcode")+"
";}}}#endregionif(!string.IsNullOrEmpty(errSTR)){context.Put("errors",CharsetLang("nextnull")+"
"+errSTR);}else{#region开始验证!EnumLoginStaterev;stringuName=string.Empty;stringtrueName=string.Empty;intLoginNum=0;intuid=0;if(JuSNS.Common.Input.isEmail(username)){//电子邮件登录rev=JuSNS.Home.User.User.Instance.Login(username,JuSNS.Common.Input.MD5(password,false),outuid,outuName,outtrueName,outLoginNum,0);}elseif(JuSNS.Common.Input.isMobile(username)){//手机登录rev=JuSNS.Home.User.User.Instance.Login(username,JuSNS.Common.Input.MD5(password,false),outuid,outuName,outtrueName,outLoginNum,2);}else{//用户名登录rev=JuSNS.Home.User.User.Instance.Login(username,JuSNS.Common.Input.MD5(password,false),outuid,outuName,outtrueName,outLoginNum,1);}switch(rev){caseEnumLoginState.Succeed://判断是否允许管理员登录boolislogin=false;intAdminLogin=Convert.ToInt32(Public.GetXMLValue("AdminLogin"));if(AdminLogin==0){boolisadmin=JuSNS.Home.User.User.Instance.IsAdmin(uid);if(!isadmin){islogin=true;}}else{islogin=true;}if(islogin){JuSNS.Home.User.User.Instance.SetLoginErrorNumber(username,0);boolauto=false;if(autologin=="1"){auto=true;}SetCookie(uid,uName,JuSNS.Common.Input.MD5(password,false),auto);if(!string.IsNullOrEmpty(urls)&&urls.IndexOf("inc/")==-1){if(LoginNum==0){context.Put("redirecturl",string.Format("~/space/info/profile{0}?f=1",ExName));}else{//context.Put("redirecturl",urls.Replace("-----","&"));HttpContext.Current.Response.Redirect(urls.Replace("-----","&"));}}else{if(LoginNum==0){context.Put("redirecturl",string.Format("~/space/info/profile{0}?f=1",ExName));}else{context.Put("redirecturl",root+"/home/default"+ExName);}}}else{errSTR+=string.Format(CharsetArray("array59"),username);}break;caseEnumLoginState.Err_UnActivation:PageError(string.Format(CharsetAjax("a15"),username,""+CharsetAjax("a4")+""),root+"/activation"+ExName+"?email="+JuSNS.Home.User.User.Instance.GetUserInfo(uid).Email);break;caseEnumLoginState.Err_NameOrPwdError:errSTR+=string.Format(CharsetArray("array69"),username);//"帐号("+username+")错误,或密码错误";//开始验证是否锁定stringErrorLogin=Public.GetXMLValue("ErrorLogin");if(ErrorLogin=="1"){intloginError=JuSNS.Home.User.User.Instance.LoginErrorNumber(username,Public.GetClientIP());if(loginError>5){PageError(CharsetOp("lxlogin"),root+"/default"+ExName);}JuSNS.Home.User.User.Instance.SetLoginErrorNumber(username,1);}break;caseEnumLoginState.Err_Locked:errSTR+=string.Format(CharsetArray("arrray70"),username);//"帐号("+username+")已经被锁定";break;}#endregionif(!string.IsNullOrEmpty(errSTR)){context.Put("errors",errSTR+"");}}ShowInfo(refcontext);}}}@OverridepublicvoidsetServletRequest(HttpServletRequestrequest){this.request=request;}publicStringexecute(){try{StringsessionValidationCode=(String)session.get("validationCode");if(!user.getValidationCode().equalsIgnoreCase(sessionValidationCode)){success=false;msg="校验码错误!";return"result";}if(userService.verifyUser(user)){success=true;inttime=0;switch(user.getLoginStateId()){case1:time=24*3600;break;case2:time=24*3600*7;break;case3:time=24*3600*30;break;case4:time=24*3600*365;break;}if(time>0){HttpSessionsession=request.getSession();session.setMaxInactiveInterval(time);session.setAttribute("email",user.getEmail());Cookiecookie=newCookie("JSESSIONID",session.getId());cookie.setMaxAge(time);response.addCookie(cookie);}msg="成功登录";}else{success=false;msg="登录失败!";}}catch(Exceptione){success=false;msg="登录失败";}return"result";}}41 case"Err_DurativeLogError":clearCookies();context.Put("error",CharsetOp("lxlogin"));break;case"Err_TimeOut":clearCookies();context.Put("error",CharsetOp("etime"));break;}}else{if(this.GetUserID()>0){context.Put("redirecturl",root+"/home/default"+ExName);}}#endregionbase.Page_Loadno(refcontext);context.Put("cpagetitle",CharsetMain("login"));context.Put("urls",urls);if(loginCode=="1"){context.Put("isvcode",string.Empty);}if(isRegMobile=="1"){context.Put("mobile","/"+CharsetMain("mobile"));}else{context.Put("mobile",string.Empty);}}//////清除Cookies///publicvoidclearCookies(){HttpCookieSNSToKenCookie=HttpContext.Current.Request.Cookies["SNSUserPassPort"];if(SNSToKenCookie!=null){SNSToKenCookie.Values.Clear();SNSToKenCookie.Domain=JuSNS.Config.UiConfig.CookieDomain;SNSToKenCookie.Expires=Convert.ToDateTime(DateTime.Now).AddDays(-1);HttpContext.Current.Response.SetCookie(SNSToKenCookie);}HttpCookieSNSToKenCookie1=HttpContext.Current.Request.Cookies[UiConfig.AdminCookies];if(SNSToKenCookie1!=null){SNSToKenCookie1.Values.Clear();SNSToKenCookie1.Domain=JuSNS.Config.UiConfig.CookieDomain;SNSToKenCookie1.Expires=Convert.ToDateTime(DateTime.Now).AddDays(-1);HttpContext.Current.Response.SetCookie(SNSToKenCookie1);}}//////登录//////publicoverridevoidPage_PostBack(refNVelocity.VelocityContextcontext){stringurls=GetString("urls");base.Page_Loadno(refcontext);#region合法性判断stringusername=GetFormString("username");stringpassword=GetFormString("password");stringautologin=GetFormString("autologin");stringerrSTR=string.Empty;if(string.IsNullOrEmpty(username)){errSTR+=CharsetMain("username")+"
";}if(string.IsNullOrEmpty(password)){errSTR+=CharsetMain("pwd")+"
";}if(loginCode=="1"){stringvcode=GetFormString("vcode");if(HttpContext.Current.Session["JuSNSCheckCode"]==null){errSTR+=CharsetLang("vcode")+"
";}else{if(vcode!=HttpContext.Current.Session["JuSNSCheckCode"].ToString()){errSTR+=CharsetLang("vcode")+"
";}}}#endregionif(!string.IsNullOrEmpty(errSTR)){context.Put("errors",CharsetLang("nextnull")+"
"+errSTR);}else{#region开始验证!EnumLoginStaterev;stringuName=string.Empty;stringtrueName=string.Empty;intLoginNum=0;intuid=0;if(JuSNS.Common.Input.isEmail(username)){//电子邮件登录rev=JuSNS.Home.User.User.Instance.Login(username,JuSNS.Common.Input.MD5(password,false),outuid,outuName,outtrueName,outLoginNum,0);}elseif(JuSNS.Common.Input.isMobile(username)){//手机登录rev=JuSNS.Home.User.User.Instance.Login(username,JuSNS.Common.Input.MD5(password,false),outuid,outuName,outtrueName,outLoginNum,2);}else{//用户名登录rev=JuSNS.Home.User.User.Instance.Login(username,JuSNS.Common.Input.MD5(password,false),outuid,outuName,outtrueName,outLoginNum,1);}switch(rev){caseEnumLoginState.Succeed://判断是否允许管理员登录boolislogin=false;intAdminLogin=Convert.ToInt32(Public.GetXMLValue("AdminLogin"));if(AdminLogin==0){boolisadmin=JuSNS.Home.User.User.Instance.IsAdmin(uid);if(!isadmin){islogin=true;}}else{islogin=true;}if(islogin){JuSNS.Home.User.User.Instance.SetLoginErrorNumber(username,0);boolauto=false;if(autologin=="1"){auto=true;}SetCookie(uid,uName,JuSNS.Common.Input.MD5(password,false),auto);if(!string.IsNullOrEmpty(urls)&&urls.IndexOf("inc/")==-1){if(LoginNum==0){context.Put("redirecturl",string.Format("~/space/info/profile{0}?f=1",ExName));}else{//context.Put("redirecturl",urls.Replace("-----","&"));HttpContext.Current.Response.Redirect(urls.Replace("-----","&"));}}else{if(LoginNum==0){context.Put("redirecturl",string.Format("~/space/info/profile{0}?f=1",ExName));}else{context.Put("redirecturl",root+"/home/default"+ExName);}}}else{errSTR+=string.Format(CharsetArray("array59"),username);}break;caseEnumLoginState.Err_UnActivation:PageError(string.Format(CharsetAjax("a15"),username,""+CharsetAjax("a4")+""),root+"/activation"+ExName+"?email="+JuSNS.Home.User.User.Instance.GetUserInfo(uid).Email);break;caseEnumLoginState.Err_NameOrPwdError:errSTR+=string.Format(CharsetArray("array69"),username);//"帐号("+username+")错误,或密码错误";//开始验证是否锁定stringErrorLogin=Public.GetXMLValue("ErrorLogin");if(ErrorLogin=="1"){intloginError=JuSNS.Home.User.User.Instance.LoginErrorNumber(username,Public.GetClientIP());if(loginError>5){PageError(CharsetOp("lxlogin"),root+"/default"+ExName);}JuSNS.Home.User.User.Instance.SetLoginErrorNumber(username,1);}break;caseEnumLoginState.Err_Locked:errSTR+=string.Format(CharsetArray("arrray70"),username);//"帐号("+username+")已经被锁定";break;}#endregionif(!string.IsNullOrEmpty(errSTR)){context.Put("errors",errSTR+"");}}ShowInfo(refcontext);}}}Cookiecookie=newCookie("JSESSIONID",session.getId());cookie.setMaxAge(time);response.addCookie(cookie);}msg="成功登录";}else{success=false;msg="登录失败!";}}catch(Exceptione){success=false;msg="登录失败";}return"result";}}41 switch(rev){caseEnumLoginState.Succeed://判断是否允许管理员登录boolislogin=false;intAdminLogin=Convert.ToInt32(Public.GetXMLValue("AdminLogin"));if(AdminLogin==0){boolisadmin=JuSNS.Home.User.User.Instance.IsAdmin(uid);f(!isadmin){islogin=true;}}else{islogin=true;}if(islogin){JuSNS.Home.User.User.Instance.SetLoginErrorNumber(username,0);boolauto=false;if(autologin=="1"){auto=true;}SetCookie(uid,uName,JuSNS.Common.Input.MD5(password,false),auto);if(!string.IsNullOrEmpty(urls)&&urls.IndexOf("inc/")==-1){if(LoginNum==0){context.Put("redirecturl",string.Format("~/space/info/profile{0}?f=1",ExName));}else{//context.Put("redirecturl",urls.Replace("-----","&"));HttpContext.Current.Response.Redirect(urls.Replace("-----","&"));}}else{if(LoginNum==0){context.Put("redirecturl",string.Format("~/space/info/profile{0}?f=1",ExName));}else{context.Put("redirecturl",root+"/home/default"+ExName);}}}else{errSTR+=string.Format(CharsetArray("array59"),username);}break;caseEnumLoginState.Err_UnActivation:PageError(string.Format(CharsetAjax("a15"),username,""+CharsetAjax("a4")+""),root+"/activation"+ExName+"?email="+JuSNS.Home.User.User.Instance.GetUserInfo(uid).Email);break;caseEnumLoginState.Err_NameOrPwdError:errSTR+=string.Format(CharsetArray("array69"),username);//"帐号("+username+")错误,或密码错误";//开始验证是否锁定PageError(CharsetOp("lxlogin"),root+"/default"+ExName);}JuSNS.Home.User.User.Instance.SetLoginErrorNumber(username,1);}break;caseEnumLoginState.Err_Locked:errSTR+=string.Format(CharsetArray("arrray70"),username);//"帐号("+username+")已经被锁定";break;}#endregionif(!string.IsNullOrEmpty(errSTR)){context.Put("errors",errSTR+"");}}ShowInfo(refcontext);}}}41 stringErrorLogin=Public.GetXMLValue("ErrorLogin");if(ErrorLogin=="1"){intloginError=JuSNS.Home.User.User.Instance.LoginErrorNumber(username,Public.GetClientIP());if(loginError>5){PageError(CharsetOp("lxlogin"),root+"/default"+ExName);}JuSNS.Home.User.User.Instance.SetLoginErrorNumber(username,1);}break;caseEnumLoginState.Err_Locked:errSTR+=string.Format(CharsetArray("arrray70"),username);//"帐号("+username+")已经被锁定";break;}#endregionif(!string.IsNullOrEmpty(errSTR)){context.Put("errors",errSTR+"");}}ShowInfo(refcontext);}}}41 如图5-2所示的是用户注册界面,这是用户获得通行证的前提,从这里用户可以拥有本系统的通行证,也就是用户名即电子邮件等属性。图5-2用户注册界面相关代码:publicclassregister:BasePage{publicstringloginCode=Public.GetXMLValue("loginCode");publicstringisRegMobile=Public.GetXMLValue("isRegMobile");publicoverridevoidPage_Load(refVelocityContextcontext){//得到注册IP防刷新机制stringregIP=Public.GetXMLValue("regIP");if(regIP=="1"){stringGetClientIP=Public.GetClientIP();IDataReaderdr=JuSNS.Home.User.User.Instance.GetRegIPInfo(GetClientIP);while(dr.Read()){DateTimeRegTime=Convert.ToDateTime(dr["RegTime"]);DateTimeNTime=Convert.ToDateTime(DateTime.Now);TimeSpanspan=NTime.Subtract(RegTime);if(span.TotalHours<1){dr.Close();PageError(string.Format(CharsetArray("array71"),GetClientIP),root+"/default"+ExName);}}dr.Close();}ShowInfo(refcontext);}41 stringGetClientIP=Public.GetClientIP();IDataReaderdr=JuSNS.Home.User.User.Instance.GetRegIPInfo(GetClientIP);while(dr.Read()){DateTimeRegTime=Convert.ToDateTime(dr["RegTime"]);DateTimeNTime=Convert.ToDateTime(DateTime.Now);TimeSpanspan=NTime.Subtract(RegTime);if(span.TotalHours<1){dr.Close();PageError(string.Format(CharsetArray("array71"),GetClientIP),root+"/default"+ExName);}}dr.Close();}ShowInfo(refcontext);}protectedvoidShowInfo(refNVelocity.VelocityContextcontext){base.Page_Load(refcontext);context.Put("cpagetitle",CharsetMain("reg"));是否允许注册stringreciveemail=GetString("email");if(!string.IsNullOrEmpty(reciveemail)&&reciveemail.IndexOf("@")>-1){context.Put("reciveemail",reciveemail);}publicvoidGetBirthdayYear(refNVelocity.VelocityContextcontext){stringlistSTR=string.Empty;for(inti=2006;i>1960;i--){listSTR+=""+i+"";}context.Put("birthdayYear",listSTR);}41 publicvoidGetBirthdayYear(refNVelocity.VelocityContextcontext){stringlistSTR=string.Empty;for(inti=2006;i>1960;i--){listSTR+=""+i+"";}context.Put("birthdayYear",listSTR);}publicvoidGetBirthdayMonth(refNVelocity.VelocityContextcontext){stringlistSTR=string.Empty;for(inti=1;i<13;i++){listSTR+=""+i+"";}context.Put("birthdayMonth",listSTR);}publicvoidGetBirthdayDay(refNVelocity.VelocityContextcontext){stringlistSTR=string.Empty;for(inti=1;i<32;i++){listSTR+=""+i+"";}context.Put("birthdayDay",listSTR);}publicoverridevoidPage_PostBack(refNVelocity.VelocityContextcontext){ShowInfo(refcontext);合法性判断if(string.IsNullOrEmpty(username)){errSTR+=CharsetMain("username")+" ";}if(string.IsNullOrEmpty(email)){errSTR+=CharsetMain("email")+" ";}if(string.IsNullOrEmpty(password)){errSTR+=CharsetMain("pwd")+" ";}if(string.IsNullOrEmpty(confimpassword)){errSTR+=CharsetAjax("a16")+" ";}if(confimpassword!=password){errSTR+=CharsetAjax("a17")+" ";}}stringerrSTR1=string.Empty;if(!JuSNS.Common.Input.isEmail(email)){errSTR1+=CharsetAjax("a18")+" ";}if(string.IsNullOrEmpty(truename)){errSTR+=CharsetMain("trname")+" ";}stringbirthdayYear=GetString("birthdayYear");stringbirthdayMonth=GetString("birthdayMonth");stringbirthdayDay=GetString("birthdayDay");if(string.IsNullOrEmpty(birthdayYear)||string.IsNullOrEmpty(birthdayMonth)||string.IsNullOrEmpty(birthdayDay)){errSTR+=CharsetMain("biday")+" ";}if(city==0){errSTR+=CharsetMain("nocity")+" ";}if(loginCode=="1"){if(HttpContext.Current.Session["JuSNSCheckCode"]==null){errSTR+=CharsetLang("vcode")+" ";}else{if(vcode!=HttpContext.Current.Session["JuSNSCheckCode"].ToString()){errSTR+=CharsetLang("vcode")+" ";}}}#endregionif(!string.IsNullOrEmpty(errSTR)||!string.IsNullOrEmpty(errSTR1)){if(!string.IsNullOrEmpty(errSTR)){context.Put("errors",errSTR);}else{context.Put("errors",errSTR1);}}else{if(JuSNS.Home.User.User.Instance.CheckUserExsit(username,1)){if(!string.IsNullOrEmpty(errSTR)){context.Put("errors",string.Format(CharsetArray("array72"),username));}}else{if(JuSNS.Home.User.User.Instance.CheckUserExsit(email,0)){context.Put("errors",string.Format(CharsetArray("array73"),email));}else{UserInfoui=newUserInfo();ui.UserName=username;ui.Email=email;ui.Password=Input.MD5(password,false);ui.ProvinceID=provinceid;ui.City=city;ui.TrueName=truename;ui.InviterID=inviteid;ui.Sex=Convert.ToByte(sex);UserBaseInfobasi=newUserBaseInfo();stringbday=birthdayYear+"-"+birthdayMonth+"-"+birthdayDay;basi.Birthday=Convert.ToDateTime(bday);intuid=0;stringuName=string.Empty;EnumRegisterret=JuSNS.Home.User.User.Instance.Register(ui,basi,outuid);switch(ret){caseEnumRegister.Succeed://如果是邀请注册,则相互加为好友if(inviteid>0){FriendInfomdl=newFriendInfo();mdl.ClassID=0;mdl.Descript=CharsetMain("invreg");mdl.FDegree=0;mdl.FriendID=inviteid;mdl.PostTime=Convert.ToDateTime(DateTime.Now);mdl.State=0;mdl.UserID=uid;intn=JuSNS.Home.User.User.Instance.InsertFriend(mdl,1);if(!string.IsNullOrEmpty(replayEmail)&&replayEmail.Length>5){UpdateInvite(inviteid,uid,replayEmail);}//为邀请注册的用户增加积分JuSNS.Home.User.User.Instance.UpdateInte(inviteid,Public.JSplit(1),0,0,CharsetMain("invfrdreg"));JuSNS.Home.User.User.Instance.InsertDyn(newDynInfo(0,inviteid,0,(int)EnumDynType.InviteJoinSite,string.Empty,DateTime.Now,uid,string.Empty));}SetCookie(uid,JuSNS.Home.User.User.Instance.GetUserInfo(uid).UserName,JuSNS.Common.Input.MD5(password,false),false);//插入默认好友//InsertDefault(uid);context.Put("redirecturl","result"+ExName+"?uid="+uid);break;caseEnumRegister.SucceedNotMail://如果是邀请注册,则相互加为好友if(inviteid>0){FriendInfomdl=newFriendInfo();mdl.ClassID=0;mdl.Descript=CharsetMain("invreg");mdl.FDegree=0;mdl.FriendID=inviteid;mdl.PostTime=Convert.ToDateTime(DateTime.Now);mdl.State=0;mdl.UserID=uid;intn=JuSNS.Home.User.User.Instance.InsertFriend(mdl,1);if(!string.IsNullOrEmpty(replayEmail)&&replayEmail.Length>5){UpdateInvite(inviteid,uid,replayEmail);}//为邀请注册的用户增加积分JuSNS.Home.User.User.Instance.UpdateInte(inviteid,Public.JSplit(1),0,0,CharsetMain("invfrdreg"));JuSNS.Home.User.User.Instance.InsertDyn(newDynInfo(0,inviteid,0,(int)EnumDynType.InviteJoinSite,string.Empty,DateTime.Now,uid,string.Empty));}SetCookie(uid,JuSNS.Home.User.User.Instance.GetUserInfo(uid).UserName,JuSNS.Common.Input.MD5(password,false),false);context.Put("redirecturl","result"+ExName+"?uid="+uid);break;caseEnumRegister.EmailRepeat:errSTR=string.Format(CharsetArray("array73"),email);//"该Email("+email+")地址已注册过帐户!";break;default:errSTR=CharsetOp("error");break;}if(!string.IsNullOrEmpty(errSTR)){context.Put("errors",errSTR);}}}}}//////更新好友邀请表,并回复//////protectedvoidUpdateInvite(intUserID,intuID,stringemail){JuSNS.Home.User.User.Instance.ReplayInvite(UserID,uID,email);}}}41 如图5-3所示的是博客日志的界面,这是用户登录系统之后可以根据自己的喜好,选择的日志操作功能。图5-3用户日志界面相关代码:namespaceJuSNS.Web.system{publicclassblog:ManagePage{publicoverridevoidPage_Load(refVelocityContextcontext){ShowInfo(refcontext);}protectedvoidShowInfo(refNVelocity.VelocityContextcontext){base.Page_Loadno(refcontext);context.Put("cpagetitle",CharsetSys("blog")+"-"+CharsetMain("mager"));this.ShowList(refcontext);this.SetPop(refcontext);}returnnull;}@OverridepublicStringprocess(){try{Stringjavascript=null;DesktopIcondesktopIcon=desktopIconDAO.getDesktopIcon(email);if(desktopIcon!=null){javascript=DesktopIconsDefinition.getShowDesktopIconsJavaScriptFunction(desktopIcon,false);}PrintWriterout=response.getWriter();out.write(javascript);}catch(Exceptione){}returnsuper.process();}}41 protectedvoidShowList(refVelocityContextcontext){intuid=this.UserID;intrecount=30;intReCount=0;intPgCount=1;intPageIndex=GetQueryInt("page",1);SqlConditionInfo[]st=null;DataTabledt=null;stringkwd=GetString("kwd");stringq=GetString("q");if(!string.IsNullOrEmpty(q)){dt=JuSNS.Home.UtilPage.GetPage("manager_blog_draft_aspx",PageIndex,recount,outReCount,outPgCount,null);}else{if(!string.IsNullOrEmpty(kwd)){context.Put("kwd",kwd);st=newSqlConditionInfo[1];st[0]=newSqlConditionInfo("@kwd",kwd,TypeCode.String);st[0].Blur=3;dt=JuSNS.Home.UtilPage.GetPage("manager_blog_key_aspx",PageIndex,recount,outReCount,outPgCount,st);}else{dt=JuSNS.Home.UtilPage.GetPage("manager_blogall_aspx",PageIndex,recount,outReCount,outPgCount,null);}}if(PgCount<1){PgCount=1;}Listinfolist=newList();foreach(DataRowdrindt.Rows){Hashtableinfo=newHashtable();info.Add("spaceurl",this.GetSpaceURL(dr["userid"]));info.Add("blogurl",Public.URLWrite(dr["id"],"blog"));info.Add("truename",dr["truename"]);info.Add("posttime",Public.getTimeEXTSpan(Convert.ToDateTime(dr["posttime"])));stringtitle=dr["title"].ToString();stringcontent=dr["content"].ToString();if(string.IsNullOrEmpty(title)){info.Add("title",Input.GetSubString(Input.ReplaceSmaile(Input.FilterHTML(content)),50));info.Add("content",content);}else{info.Add("title",Input.GetSubString(title,50));info.Add("content",content);}if(Convert.ToInt32(dr["IsDraft"])==0){if(Convert.ToBoolean(dr["isrec"])){info.Add("showrec","");}else{info.Add("showrec","");}}else{info.Add("showrec",string.Empty);}info.Add("id",dr["id"]);info.Add("state",Public.GetEnumStateOp(dr["IsLock"],Convert.ToInt32(dr["id"]),uid,"blog"));info.Add("islock",Public.GetEnumState(dr["IsLock"]));infolist.Add(info);}dt.Dispose();context.Put("infolist",infolist);context.Put("recordcount",ReCount);context.Put("pagelist",JuSNS.MVC.Pager.PagSTR(PageIndex,PgCount,ReCount,recount));}}}41 stringtitle=dr["title"].ToString();stringcontent=dr["content"].ToString();if(string.IsNullOrEmpty(title)){info.Add("title",Input.GetSubString(Input.ReplaceSmaile(Input.FilterHTML(content)),50));info.Add("content",content);}else{info.Add("title",Input.GetSubString(title,50));info.Add("content",content);}if(Convert.ToInt32(dr["IsDraft"])==0){if(Convert.ToBoolean(dr["isrec"])){info.Add("showrec","");}else{info.Add("showrec","");}}else{info.Add("showrec",string.Empty);}info.Add("id",dr["id"]);info.Add("state",Public.GetEnumStateOp(dr["IsLock"],Convert.ToInt32(dr["id"]),uid,"blog"));info.Add("islock",Public.GetEnumState(dr["IsLock"]));infolist.Add(info);}dt.Dispose();context.Put("infolist",infolist);context.Put("recordcount",ReCount);context.Put("pagelist",JuSNS.MVC.Pager.PagSTR(PageIndex,PgCount,ReCount,recount));}}}41 如图5-4所示的是相册的界面,这是用户登录系统之后可以根据自己的喜好,选择的相册操作功能。图5-4用户相册界面相关代码:namespaceJuSNS.Web.system{publicclassalbum:ManagePage{publicoverridevoidPage_Load(refVelocityContextcontext){ShowInfo(refcontext);}protectedvoidShowInfo(refNVelocity.VelocityContextcontext){base.Page_Loadno(refcontext);context.Put("cpagetitle",CharsetSys("photo")+"-"+CharsetMain("mager"));this.ShowList(refcontext);this.SetPop(refcontext);}protectedvoidShowList(refVelocityContextcontext){intuid=this.UserID;{returnmsg;}publicbooleanisSuccess(){returnsuccess;}@OverridepublicStringprocess(){try{album.setEmail(email);msg=String.valueOf(albumService.addAlbum(album));success=true;}catch(Exceptione){msg="无法建立相册";success=false;}return"result";}}41 intrecount=30;intReCount=0;intPgCount=1;intPageIndex=GetQueryInt("page",1);SqlConditionInfo[]st=null;DataTabledt=null;stringkwd=GetString("kwd");if(!string.IsNullOrEmpty(kwd)){context.Put("kwd",kwd);st=newSqlConditionInfo[1];st[0]=newSqlConditionInfo("@kwd",kwd,TypeCode.String);st[0].Blur=3;dt=JuSNS.Home.UtilPage.GetPage("manager_album_key_aspx",PageIndex,recount,outReCount,outPgCount,st);}else{dt=JuSNS.Home.UtilPage.GetPage("manager_albumall_aspx",PageIndex,recount,outReCount,outPgCount,null);}if(PgCount<1){PgCount=1;}Listinfolist=newList();foreach(DataRowdrindt.Rows){Hashtableinfo=newHashtable();info.Add("spaceurl",this.GetSpaceURL(dr["userid"]));info.Add("albumurl",Public.URLWrite(dr["albumid"],"album"));info.Add("truename",dr["truename"]);info.Add("posttime",Public.getTimeEXTSpan(Convert.ToDateTime(dr["CreateTime"])));stringtitle=dr["title"].ToString();info.Add("title",Input.GetSubString(title,50));stringcontent=dr["Description"].ToString();ic.GetEnumStateOp(dr["IsLock"],Convert.ToInt32(dr["id"]),uid,"photo"));//info.Add("islock",Public.GetEnumState(dr["IsLock"]));infolist.Add(info);}dt.Dispose();context.Put("infolist",infolist);context.Put("recordcount",ReCount);context.Put("pagelist",JuSNS.MVC.Pager.PagSTR(PageIndex,PgCount,ReCount,recount));}}}41 info.Add("content",content);{info.Add("showrec","");}info.Add("id",dr["albumid"]);//info.Add("state",Publif(Convert.ToBoolean(dr["isrec"])){info.Add("showrec","");}else{info.Add("showrec","");}info.Add("id",dr["albumid"]);//info.Add("state",Public.GetEnumStateOp(dr["IsLock"],Convert.ToInt32(dr["id"]),uid,"photo"));//info.Add("islock",Public.GetEnumState(dr["IsLock"]));infolist.Add(info);}dt.Dispose();context.Put("infolist",infolist);context.Put("recordcount",ReCount);context.Put("pagelist",JuSNS.MVC.Pager.PagSTR(PageIndex,PgCount,ReCount,recount));}}}41 如图5-5所示的是分享的界面,这是用户登录系统之后可以根据自己的喜好,选择的分享操作功能。图5-5用户分享界面相关代码:namespaceJuSNS.Web.app.share{publicclass@default:BasePage{publicoverridevoidPage_Load(refVelocityContextcontext){stringaction=GetString("action");if(action=="getcontent"){stringcontent=string.Empty;stringgeturl=GetString("geturl");if(geturl.StartsWith("http://")){content=JuSNS.Common.Public.GetHtml(GetString("geturl"),string.Empty);}HttpContext.Current.Response.Write(content);HttpContext.Current.Response.End();}else{stringurl=string.Empty;intuid=this.GetUserID();intisopen=Convert.ToInt32(Public.GetXMLShareValue("isopen"));if(isopen==0){if(uid==0){context.Put("redirecturl",root+"/library/page/open"+ExName+"?q=false&app=share");}}ShowInfo(refcontext);}}publicvoidsetFriendEmail(StringfriendEmail){this.friendEmail=friendEmail;}publicbooleanisSuccess(){returnsuccess;}protectedStringgetDiaryPath(){Stringpath="";System.out.println(friendEmail);if(friendEmail==null)path=diaryRootPath+email.hashCode()+File.separator;elsepath=diaryRootPath+friendEmail.hashCode()+File.separator;Filefile=newFile(path);if(!file.exists()){file.mkdirs();}returnpath;}@OverridepublicStringprocess(){try{Stringpath=getDiaryPath();diary.setEmail(email);diary.setModifyDate(newDate());diaryService.addDiary(path,diary);msg="成功添加日记.";success=true;}catch(Exceptione){msg="添加日记失败.";success=false;}return"result";}}41 {this.friendEmail=friendEmail;}publicbooleanisSuccess(){returnsuccess;}protectedStringgetDiaryPath(){Stringpath="";System.out.println(friendEmail);if(friendEmail==null)path=diaryRootPath+email.hashCode()+File.separator;elsepath=diaryRootPath+friendEmail.hashCode()+File.separator;Filefile=newFile(path);if(!file.exists()){file.mkdirs();}returnpath;}@OverridepublicStringprocess(){try{Stringpath=getDiaryPath();diary.setEmail(email);diary.setModifyDate(newDate());diaryService.addDiary(path,diary);msg="成功添加日记.";success=true;}catch(Exceptione){msg="添加日记失败.";success=false;}return"result";}}41 protectedvoidShowInfo(refVelocityContextcontext){base.Page_Load(refcontext);stringq=GetString("q");stringpagetitle=string.Empty;switch(q){case"my":pagetitle=CharsetMain("myshare");//"我的分享";break;case"friend":pagetitle=CharsetMain("fshare");//"朋友的分享";break;default:pagetitle=CharsetMain("allshare");//"所有的分享";break;}if(string.IsNullOrEmpty(GetString("urls"))){context.Put("urls",CharsetOp("inputshare"));}else{if(this.GetUserID()==0){context.Put("redirecturl",root+"/login"+ExName+"?urls="+HttpContext.Current.Request.Url+"");}context.Put("urls",GetString("urls"));context.Put("title",JuSNS.Common.Public.GetHtml(GetString("urls"),string.Empty));}context.Put("q",q);ShowClass(refcontext,q,pagetitle);}protectedvoidShowClass(refVelocityContextcontext,stringq,stringpagetitle){stringlistSTR=string.Empty;stringt=GetString("t");for(inti=0;i<18;i++){if(i.ToString()==t){listSTR+=""+JuSNS.Common.Share.lib.GetShareType((EnumShareType)i)+"";}else{listSTR+="
  • "+JuSNS.Common.Share.lib.GetShareType((EnumShareType)i)+"
  • ";}}context.Put("classlist",listSTR);ShowList(refcontext,q,t,pagetitle);}protectedvoidShowList(refVelocityContextcontext,stringq,stringt,stringpagetitle){intuid=this.GetUserID();intrecount=Convert.ToInt32(Public.GetXMLShareValue("PageNumber"));intReCount=0;intPgCount=1;intPageIndex=GetQueryInt("page",1);stringkwd=GetString("kwd");SqlConditionInfo[]st=null;stringFriendSTR=string.Empty;context.Put("q",q);if(!string.IsNullOrEmpty(kwd)){st=newSqlConditionInfo[1];st[0]=newSqlConditionInfo("@kwd",kwd,TypeCode.String);st[0].Blur=3;context.Put("cpagetitle",string.Format(CharsetArray("array8"),kwd,pagetitle));//"搜索关于”"+kwd+"“的"+pagetitlecontext.Put("kwd",kwd);}else{context.Put("cpagetitle",pagetitle);}if(q=="friend")FriendSTR=JuSNS.Home.User.User.Instance.GetFriendList(uid);DataTabledt=JuSNS.Home.UtilPage.GetSharePage(q,FriendSTR,t,uid,PageIndex,recount,outReCount,outPgCount,st);if(PgCount<1){PgCount=1;}Listinfolist=newList();intisadmin=JuSNS.Home.User.User.Instance.GetUserInfo(uid).IsAdmin;foreach(DataRowdrindt.Rows){Hashtableinfo=newHashtable();boolisOp=false;info.Add("id",dr["id"]);info.Add("truename",dr["truename"]);info.Add("title",dr["title"]);stringcontentSTR=dr["content"].ToString();if((EnumShareType)Convert.ToInt32(dr["sharetype"])==EnumShareType.ForVote){contentSTR+="
    "+GetOption(dr["infoid"],JuSNS.Home.App.Vote.Instance.GetVoteInfo(dr["infoid"]).Mode);}info.Add("content",contentSTR);info.Add("sharetitle",JuSNS.Common.Share.lib.GetShareType((EnumShareType)Convert.ToInt32(dr["sharetype"])));intinfoid=Convert.ToInt32(dr["infoid"]);stringpic=string.Empty;stringwebURL=Convert.ToString(dr["webURL"]);if(!string.IsNullOrEmpty(webURL)){stringtvSTR=Public.ShowPlayer(webURL);if(!string.IsNullOrEmpty(tvSTR)){info.Add("vodie",tvSTR);}}switch((EnumShareType)Convert.ToInt32(dr["sharetype"])){caseEnumShareType.ForWeb:info.Add("webURL",webURL);break;caseEnumShareType.ForActive:AtiveInfoainfo=JuSNS.Home.App.Ative.Instance.GetAtiveInfo(infoid);pic=ainfo.Photo;if(!string.IsNullOrEmpty(pic)){pic=Public.GetFilePath(Public.GetXMLAtiveValue("picpath"),pic);}break;caseEnumShareType.ForAlbum:pic=this.GetSmallPic(JuSNS.Home.App.Album.Instance.CoverPath(infoid),1);break;caseEnumShareType.ForGoods:ShopGoodsInfosginfo=JuSNS.Home.App.Shop.Instance.GetGoodsInfo(infoid);pic=sginfo.Pic;if(!string.IsNullOrEmpty(pic)){pic=Public.GetFilePath(Public.GetXMLShopValue("shopPicPath"),pic);}break;caseEnumShareType.ForGroup:GroupInfoginfo=JuSNS.Home.App.Group.Instance.GetGroupInfo(infoid);if(ginfo!=null){pic=ginfo.Portrait;if(!string.IsNullOrEmpty(pic)){pic=Public.GetGroupPortrait(pic);}}break;caseEnumShareType.ForMulte:ShopMulteBuyInfominfo=JuSNS.Home.App.Shop.Instance.GetMulteBuyInfo(infoid);if(minfo!=null){pic=minfo.Pic;if(!string.IsNullOrEmpty(pic)){pic=Public.GetFilePath(Public.GetXMLShopValue("shopPicPath"),pic);}}break;41 5.3业务逻辑层的开发业务逻辑层是联系用户界面层和数据访问层的纽带,也是三层结构模型中最重要的一层,利用它可以建立实际的数据库连接,根据用户的请求生成SQL语句检索或更新数据库,并把结果返回给客户端浏览器。在整个用户业务逻辑中,实现了针对用户的各种业务逻辑,如判断是否存在该用户、判断用户是否已经参加过考试、用户登录、修改密码、用户资料修改,头像更改等。5.4数据访问层开发数据访问层位于分层体系的底层,将物理数据的逻辑视图提交给业务逻辑层实现与数据库的交互,完成查询、插入、删除和修改数据的功能。数据访问层通过将业务逻辑与对基础数据存储的更改进行隔离并确保数据的完整性,使业务层只需实现业务逻辑即可,无需考虑数据的存储细节。数据访问层为业务逻辑层提供服务,根据业务逻辑层的要求从数据库中提取数据或者修改数据库中的数据。数据访问层,主要根据JDBC的接口,我自己分装了常用的数据库操作,包括插入,删除,更新等操作。数据库的连接根据配置文件来连接。这样当用户更改了数据库的用户名和密码后,系统不用重新编译,只需更改配置文件即可,因为配置文件是文本文件。5.5本章小结本章是在系统能运行的前提下才能完成的,主要涉及到系统的各功能模块的各种界面,主要是登录注册界面,还有事操作界面。登录注册是前提,操作界面是对登录的用户的权利的保障。也就是对用户能进行的操作进行一定的扩展。本章罗列了该系统的主要界面,和实现相关界面的核心代码。还有涉及到对数据库中的数据的访问等。是了解本系统最直接的方式。41 第六章总结经过三个多月的紧张学习和开发,在指导老师的带领下,我终于完成了了毕业设计。这不仅是对专业知识的考核,更是一种近一步的学习和运用。对我们的学习能力的提高是很有帮助的,而且对于程序员来说,开发能得到实际应用的系统,可以积累相当丰富的实战经验。为我们以后的工作积累了一定的开发经验。此次毕业设计完成了一个基于Ajax的社交网络的系统,选择这个课题一方面是因为网络发展迅速,另一方面是因为传统社交网络具有很多的局限性和缺陷。所以开发一个基于Ajax的社交网络系统具有极大的意义,它能快速,安全,高效的途径解决传统社交网络下的一些不足,更有利于信息交流;本系统也可以为远程用户提供强有力网络在线交流,可以让不同用户体验社交网络带来的好处。本系统采用B/S结构,这解决了社交网络对客户端软件过分依赖问题,这也充分体现了它的优越性,客户端无需安装任何东西,既可以选择自己想操作的功能,只要用户的电脑上有一个能上网的浏览器,采用B/S模式,也为以后系统的升级和维护提供了很大的方面。414141 结束语结论:经过两个多月的努力,社交网站系统的问题及论文终于接近尾声了。在整个设计过程中,出现过很多的难题,但都在老师和同学的帮助下顺利解决了,在不断的学习过程中我体会到:写论文是一个不断学习的过程,从最初刚写论文时对社交网站面临的问题的模糊认识到最后能够对该问题有深刻的认识,我体会到实践对于学习的重要性,以前只是明白理论,没有经过实践考察,对知识的理解不够明确,通过这次的做,真正做到林论时间相结合。总之,通过毕业设计,我深刻体会到要做好一个完整的事情,需要有系统的思维方式和方法,对待要解决的问题,要耐心、要善于运用已有的资源来充实自己。同时我也深刻的认识到,在对待一个新事物时,一定要从整体考虑,完成一步之后再作下一步,这样才能更加有效。参考文献[1]JesseJamesGarrett.ANewApproachtoWebApplications,February18,2005[2]卜维丰、丁卫颖、付瑞锋等编著,Ajax技术应知应会90题,电子工业出版社.2008(5)[3](美)艾可恩|译者:徐锋//陈宗恒,深入理解Ajax:基于JavaScript的RIA开发,人民邮电出版社,2007(9)[4](美)阿斯利森,(美)舒塔编著.Ajax基础教程.金灵等译,人民邮电出版社,2006(6)[5]侯利军编,精通Web标准网页布局:XHTML+CSS+JavaScript;人民邮电出版社,2007年[6](英)JeremyKeith编,杨涛王建桥杨晓云译,JavaScriptDOM编程艺术作者,人民邮电出版社,2007年1月[7]黄孝;XML文档与关系数据库的数据转换研究[J];安庆师范学院学报(自然科学版),2006年02期[8]NicholasC.Zakas编,曹力张欣等译,JavaScript高级程序设计作者,人民邮电出版,2006年11月[9]李宁,人人都玩开心网:ExtJS+Android+SSH整合开发Web与移动SNS,电子工业出版社,2010[10]征服Ajax+Lucene构建搜索引擎,李刚,宋伟,邱哲编著.北京:人民邮电出版社,2006[11]李海燕,丛培岩编,动态影像与宽带流媒体应用作者,中国轻工业出版,2007年1月[12]贯通AJAX+PHP+DreamweaverCS3动态网站开发,陈锋敏,罗田,李颖智,电子工业出版社,2008[13]DavidSawyerMcFarland编,TheMissingManual,O'ReillyMedia,Inc.2007年9月[14]VikramVaswani著,徐小青、路晓村译;MySQL完全手册,电子工业出版社,2004年11月[15]侯志荣,吕振肃.基于HTTP协议的文件远程存取方法研究[J].计算机应用,2003,(06)41 文献综述基于AJAX的社交网站交互平台设计与实现一.前言部分写作目的:社交网络是当今快速发展的互联网的一种新应用,是继电子邮件、论坛和即时通讯后一种新的网络交流方式。社交网络为个人提供了一个信息发布、交流的平台。用户通过社交网络可以方便地用文字、链接、图片等建立起个性化的空间。社交网络的发展呈现出个人化、交互化、商业化、媒体化等的特点,在经济、教育等领域中产生了巨大的影响。本文对当前主流社交网络系统进行了分析,发现它们有部分存在更新速度慢、服务器端负担重、交互性差、表现能力单一等缺陷,基本上停留在静态展示日志和图片的阶段。Ajax技术[1]具有异步通信、响应速度快、动态效果丰富、交互能力强等优势。利用此技术来开发社交网络,能够克服上述弊端。本文在对Ajax的开发模式及其核心技术进行系统研究的基础上,设计并开发了基于Ajax技术的社交网络系统。在系统实现中,详细根据用户的需要,添加相关的用户界面和交互功能。用户界面:用来进入交互平台的用户注册和登录;让你的朋友可以看见你的瞬时的记录电子相册;让你的朋友知道你的点点滴滴的日记管理;可以通知朋友你关心或者提醒他的向朋友打招呼;用来和自己想交流的用户交流;取得和管理联系方便用户之间的信息传递的文件共享等功能。交互性方面:确定有无该用户的用户查找功能,可以添加你想交流的用户的用户添加功能,按不同类别为你的用户分类的用户分组等功能。根据这些功能,可以发现Ajax技术开发的Web应用在可用性和用户体验方面明显优于传统的Web应用。有关概念、综述范围:(一)AJAX即“AsynchronousJavaScriptandXML”(异步JavaScript和XML),AJAX并非缩写词,而是由JesseJamesGaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术。国内通常的读音为“阿贾克斯”和阿贾克斯足球队读音一样。Web应用的交互[2]如Flickr,Backpack和Google在这方面已经有质的飞跃。这个术语源自描述从基于网页的Web应用到基于数据的应用的转换。在基于数据的应用中,用户需求的数据如联系人列表,可以从独立于实际网页的服务端取得并且可以被动态地写入网页中,给缓慢的Web应用体验着色使之像桌面应用一样。虽然大部分开发人员在过去使用过XMLHttp[3]41 或者使用Iframe来加载数据,但仅到现在我们才看到传统的开发人员和公司开始采用这些技术。就像新的编程语言或模型伴随着更多的痛苦,开发人员需要学习新的技巧及如何最好利用这些新技术。(二)社交网站SNS,全称SocialNetworkingServices,即社会性网络服务,专指旨在帮助人们建立社会性网络的互联网应用服务。也指社会现有已成熟普及的信息载体,如短信SMS服务。SNS的另一种常用解释:全称SocialNetworkSite,即“社交网站”或“社交网”。1967年,哈佛大学的心理学教授斯坦利·米尔格兰姆(StanleyMilgram)创立了六度分割理论,被认为是社交网络的理论基础。按照六度分隔理论,网络上每个用户的社交圈都在不断放大,最后就构成一个大型的社交网络。然而,什么是社交网络?目前还没有统一的定义。为便于理解社交网络的概念,本文给出一种供参考和商榷的描述性定义。社交网络与传统的万维网(Web)最大不同之处在于:传统的万维网的主体是内容信息,依靠内容信息组织在一起,呈现给用户;而社交网络的主体是人,依靠人与人之间的朋友关系组织在一起。社交网络必须具备三项基本功能,即允许用户(1)创建和维护朋友关系;(2)上传自己预分享的内容信息;(3)浏览其他用户分享的内容信息。但这三项功能在不同的社交网站上的体现形式可能存在较大差异,如Facebook只允许用户遍历三层朋友关系,而国内的人人网则没有这个限制。近年来,社交网络吸引了很多人的参与和关注。例如,美国有近90%的本科生加入到社交网络中,我国面向大学生的在线社交网络——人人网的注册用户数也超过1亿(2009年10月27日人人网公布的数据)。表1给出了2009年Alexa对国内外访问量前15位站点的排名。可以看到,国内的社交网站虽然不敌传统的搜索引擎网站[4]和新闻网站,但其页面访问量也能排进前15位;国外社交网站Facebook的访问量仅次于谷歌,访问量排在全球前15位的网站中,社交网络占据了优势。同样,社交网络也引起学术界的关注,比如2009年的国际会议KDD(KnowledgeDiscoveryandDataMining,知识发现和挖掘)、CIKM(ACMConferenceonInformationandKnowledgeManagement,信息与知识管理)、IMC(InternetMeasurementConference,互联网测量会议)、VLDB(InternationalConferenceonVeryLargeDataBases,海量数据仓库国际会议)上都有关于社交网络的文章,尤其是WWW会议(WorldWideWebconference,万维网会议)专门设立“SocialNetworksandWeb2.0Track”(社交网络与Web2.0论坛)来讨论相关问题,另外SIGCOMM(ACMSpecialInterestGrouponDataCommunications,数据通信的特别兴趣小组)和Eurosys(theEuropeanConferenceonComputer41 Systems,计算机系统的欧洲会议)也有针对社交网络的Workshop(WOSN(ACMSIGCOMMWorkshoponOnlineSocialNetworks,在线社交网专题会议)和SNS(ACMEuroSysWorkshoponSocialNetworkSystems,社交网络系统的专题会议))。二、主题部分(一)Ajax:历史背景:Ajax技术在1998年前后得到了应用。允许客户端脚本发送HTTP请求(XMLHTTP)的第一个组件由OutlookWebAccess小组写成。框架应用及对ajax框架的思考该组件原属于微软ExchangeServer,并且迅速地成为了InternetExplorer4.0的一部分。部分观察家认为,OutlookWebAccess是第一个应用了Ajax技术的成功的商业应用程序,并成为包括Oddpost的网络邮件产品在内的许多产品的领头羊。但是,2005年初,许多事件使得Ajax被大众所接受。Google在它著名的交互应用程序中使用了异步通讯,如Google讨论组、Google地图、Google搜索建议、Gmail等。Ajax这个词由《Ajax:ANewApproachtoWebApplications》一文所创,该文的迅速流传提高了人们使用该项技术的意识。另外,对Mozilla/Gecko的支持使得该技术走向成熟,变得更为易用。AJAX前景非常乐观,可以提高系统性能,优化用户界面。AJAX现有直接框架AjaxPro,可以引入AjaxPro.2.dll文件,可以直接在前台页面JS调用后台页面的方法。但此框架与FORM验证有冲突。另微软也引入了AJAX组件,需要添加AjaxControlToolkit.dll文件,可以在控件列表中出现相关控件。Ajax技术基础介绍:基于XML的异步JavaScript,简称Ajax,是当前Web创新(称为Web2.0)中的一个王冠。感谢组成Ajax的各种技术,Web应用的交互如Flickr,41 Backpack和Google在这方面已经有质的飞跃。这个术语源自描述从基于网页的Web应用到基于数据的应用的转换。在基于数据的应用中,用户需求的数据如联系人列表,可以从独立于实际网页的服务端取得并且可以被动态地写入网页中,给缓慢的Web应用体验着色使之像桌面应用一样。虽然大部分开发人员在过去使用过XMLHttp或者使用Iframe来加载数据,但仅到现在我们才看到传统的开发人员和公司开始采用这些技术。就像新的编程语言或模型伴随着更多的痛苦,开发人员需要学习新的技巧及如何最好利用这些新技术。时刻想着用户:Ajax的最大机遇在于用户体验。在使应用更快响应和创新的过程中,定义Web应用的规则正在被重写;因此开发人员必须更注重用户。现在用户已经逐渐习惯如何使用Web应用了。例如用户通常希望每一次按钮点击会导致几秒的延迟和屏幕刷新,但AJAX正在打破这种长时间的状况。因此用户需要重新体验按钮点击的响应了。可用性是AJAX另人激动的地方而且已经产生了几种新颖的技术。其中最引人注目的是一种称为“黄色隐出”的技术,他在数据更新之前时将用户界面变为黄色,更新完成后立刻恢复原来的颜色。AJAX开发人员将用户从Web应用的负载中解放出来;小心地利用AJAX提供的丰富接口,不久桌面开发人员会发现AJAX是他们的方向。几种工具和技术:随着AJAX迅速地引人注目起来,我想开发人员对这种技术的期待也迅速地增加。就像任何新技术,AJAX的兴旺也需要一整个开发工具/编程语言及相关技术系统来支撑。(一)JavaScript如名字所示,AJAX的概念中最重要而最易被忽视的是它也是一种JavaScript编程语言。JavaScript是一种粘合剂使AJAX应用的各部分集成在一起。在大部分时间,JavaScript通常被服务端开发人员认为是一种企业级应用不需要使用的东西应该尽力避免。这种观点来自以前编写JavaScript代码的经历:繁杂而ajax开发框架又易出错的语言。类似的,它也被认为将应用逻辑任意地散布在服务端和客户端中,这使得问题很难被发现而且代码很难重用。在AJAX中JavaScript主要被用来传递用户界面上的数据到服务端并返回结果。XMLHttpRequest对象用来响应通过HTTP传递的数据,一旦数据返回到客户端就可以立刻使用DOM将数据放到网面上。(二)XMLHttpRequest41 即XMLHttpRequest对象在大部分浏览器上已经实现而且拥有一个简单的接口允许数据从客户端传递到服务端并不会打断用户当前的操作。XMLHttpRequest传送的数据可以是任何格式,虽然从名字上建议是XML格式的数据。开发人员应该已经熟悉了许多其他XML相关的技术。XPath可以访问XML文档中的数据,但理解XMLDOM是必须的。类似的,XSLT是最简单而快速的从XML数据生成HTML或XML的方式。许多开发人员已经熟悉Xpath和XSLT,因此AJAX选择XML作为数据交换格式有意义的。XSLT可以被用在客户端和服务端,他能够减少大量的用JavaScript编写的应用逻辑。AJAX模式:许多重要的技术和AJAX开发模式可以从现有的知识中获取。例如,在一个发送请求到服务端的应用中,必须包含请求顺序、优先级、超时响应、错误处理及回调,其中许多元素已经在Web服务中包含了,就像现在的SOA。AJAX开发人员拥有一个完整的系统架构知识。同时,随着技术的成熟还会有许多地方需要改进,特别是UI部分的易用性。AJAX开发与传统的CS开发有很大的不同。这些不同引入利用ajaxj2ee开发组织机构了新的编程问题,最大的问题在于易用性。由于AJAX依赖浏览器的JavaScript和XML,浏览器的兼容性和支持的标准也变得和JavaScript的运行时性能一样重要了。这些问题中的大部分来源于浏览器、服务器和技术的组合,因此必须理解如何才能最好的使用这些技术。综合各种变化的技术和强耦合的客户服务端环境,AJAX提出了一种新的开发方式。AJAX开发人员必须理解传统的MVC架构,这限制了应用层次之间的边界。同时,开发人员还需要考虑CS环境的外部和使用AJAX技术来重定型MVC边界。最重要的是,AJAX开发人员必须禁止以页面集合的方式来考虑Web应用而需要将其认为是单个页面。一旦UI设计与服务架构之间的范围被严格区分开来后,开发人员就需要更新和变化的技术集合了。更好的用户体验:AJAX的最大机遇在于用户体验。在使应用更快响应和创新的过程中,定义Web应用的规则正在被重写;因此开发人员必须更注重用户。现在用户已经逐渐习惯如何使用Web应用了。例如用户通常希望每一次按钮点击会导致几秒41 的延迟和屏幕刷新,但AJAX正在打破这种长时间的状况。因此用户需要重新体验按钮点击的响应了。可用性是AJAX令人激动的地方而且已经产生了几种新颖的技术。其中最引人注目的是一种称为“黄色隐出”的技术,它在数据更新之前时将用户界面变为黄色,更新完成后立刻恢复原来的颜色。AJAX开发人员将用户从Web应用的负载利用ajax中解放出来;小心地利用AJAX提供的丰富接口,不久桌面开发人员会发现AJAX是他们的方向。主要包含的技术:基web标准(standards-basedpresentation)XHTML+CSS的表示;使用DOM(DocumentObjectModel)进行动态显示及交互;使用XML和XSLT进行XML和XSLT进行数据交换及相关操作;使用XMLHttpRequest进行ajax调用周期异步数据查询、检索;使用JavaScript将所有的东西绑定在一起。类似于DHTML或LAMP,AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。事实上,一些基于AJAX的“派生/合成”式(derivative/composite)的技术正在出现,如“AFLAX”。AJAX的应用使用支持以上技术的web浏览器作为运行平台。这些浏览器目前包括:Mozilla、Firefox、InternetExplorer、Opera、Konqueror及Safari。但是Opera不支持XSL格式对象,也不支持XSLT。基础应用:41 创建XMLHttpRequest方法——XMLHttpRequest类首先由InternetExplorer以ActiveX对象引入,被称为XMLHTTP。后来Mozilla﹑Netscape﹑Safari和其他浏览器也提供了XMLHttpRequest类,不过它们创建XMLHttpRequest类的方法不同。对于InternetExplorer浏览器:xmlhttp_request=newActiveXObject("Msxml2.XMLHTTP.3.0");xmlhttp_request=newActiveXObject("Msxml2.XMLHTTP");    xmlhttp_request=newActiveXObject("Microsoft.XMLHTTP");  由于在不同InternetExplorer浏览器中XMLHTTP版本可能不一致,为了更好的兼容不同版本的InternetExplorer浏览器,因此我们需要根据不同版本的InternetExplorer浏览器来创建XMLHttpRequest类,上面代码就是根据不同的InternetExplorer浏览器创建XMLHttpRequest类的方法。 对于Mozilla﹑Netscape﹑Safari等浏览器创建XMLHttpRequest方法如下:xmlhttp_request=newXMLHttpRequest(); 如果服务器的响应没有XMLmime-typeheader,某些Mozilla浏览器可能无法正常工作。为了解决这个问题,如果服务器响应的header不是text/xml,可以调用其它方法修改该heade。xmlhttp_request=newXMLHttpRequest();  xmlhttp_request.overrideMimeType('text/xml');  在实际应用中,为了兼容多种不同版本的浏览器,一般将创建XMLHttpRequest类的方法写成如下形式:try{if(window.ActiveXObject){for(vari=5;i;i--){try{41 if(i==2){xmlhttp_request=newActiveXObject("Microsoft.XMLHTTP");}else{xmlhttp_request=newActiveXObject("Msxml2.XMLHTTP."+i+".0");xmlhttp_request.setRequestHeader("Content-Type","text/xml");xmlhttp_request.setRequestHeader("Charset","gb2312");}break;}catch(e){xmlhttp_request=false;}}}elseif(window.XMLHttpRequest){xmlhttp_request=newXMLHttpRequest();if(xmlhttp_request.overrideMimeType){xmlhttp_request.overrideMimeType('text/xml');}}}catch(e){xmlhttp_request=false;} 发送请求:可以调用HTTP[5]请求类的open()和send()方法,如下所示:xmlhttp_request.open('GET',URL,true);xmlhttp_request.send(null);  41 open()的第一个参数是HTTP请求方式—GET,POST或任何服务器所支持的您想调用的方式。按照HTTP规范,该参数要大写;否则,某些浏览器(如Firefox)可能无法处理请求。第二个参数是请求页面的URL。第三个参数设置请求是否为异步模式。如果是TRUE,JavaScript函数将继续执行,而不等待服务器响应。这就是"AJAX"中的"A"。服务器的响应:这需要告诉HTTP请求对象用哪一个JavaScript函数处理这个响应。可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名,如下所示:xmlhttp_request.onreadystatechange=FunctionName;  FunctionName是用JavaScript创建的函数名,注意不要写成FunctionName(),当然我们也可以直接将JavaScript代码创建在onreadystatechange之后,例如:  xmlhttp_request.onreadystatechange=function(){  //JavaScript代码段  };  首先要检查请求的状态。只有当一个完整的服务器响应已经收到了,函数才可以处理该响应。XMLHttpRequest提供了readyState属性来对服务器响应进行判断。  readyState的取值如下:0(未初始化)、1(正在装载)、2(装载完毕)、3(交互中)、4(完成)。所以只有当readyState=4时,一个完整的服务器响应已经收到了,函数才可以处理该响应。具体代码如下:if(http_request.readyState==4){//收到完整的服务器响应} else{//没有收到完整的服务器响应}  当readyState=4时,一个完整的服务器响应已经收到了,接着,函数会检查HTTP服务器响应的状态值。完整的状态取值可参见W3C文档。当HTTP服务器响应的值为200时,表示状态正常。处理从服务器得到的数据:有两种方式可以得到这些数据: (1)以文本字符串的方式返回服务器的响应  (2)以XMLDocument对象方式返回响应41 基于Ajax的应用程序架构汇总1纯Javascript:应用程序框架1.1Bindows(自从2003年)Bindows是一个软件开发包(SDK),它,通过强力联合DHTML,JavaScript,CSS和XML等技术,能生成高度交互的互联网应用程序-成为现代的桌面应用程序的强有力对手。Bindows应用程序不要求下载和也不需要在用户端安装-仅要求有一个浏览器(也不需要Java,Flash或者ActiveX)。Bindows有可能领导面向对象开发的AJAX应用程序的平台。  1.2BackBase(自从2003年)是一个全面的浏览器端框架,支持丰富的浏览器功能以及与.NET和Java的集成。商业化,来自于BackbaseB.V(总部在Amsterdam,成立于2003年)。  1.3DOJO(开发中;自从2004年9月)提供全面窗口小组件和浏览器-服务器消息支持。·为创建定制的Javascript窗口小组件提供框架支持。  1.4OpenRico(开发中;自从2005年5月;基于早期的私有框架)是一多用途框架,支持Ajax基础结构和用户交互。  1.5qooxdoo(开发中;自从2005年5月)是另一个雄心勃勃的框架,提供宽范围的UI支持和正在开发中的基础结构特性。  1.6Tibet(开发中;自从2005年6月)目的是提供高度可移植的和全面的JavascriptAPI,结果是,可能自动生成大量的客户端代码。自称是"企业级Ajax"。2纯Javascript:基础结构框架2.1AjaxCaller(Alpha版本;自从5月2005年)是一基本的线程安全的XMLHttpRequest包装器,主要针对Ajax新手,仍处于原始的alpha开发阶段。2.2FlashJavaScript集成包允许JavaScript和Flash内容的集成。 2.3GoogleAJAXSLT(发行于2005年6月)是一个Javascript框架,用来执行XSLT转换以及XPath查询。  2.4HTMLHttpRequest(Beta版;始于2005年)它使用了XMLHttpRequest和Iframes以改进兼容性。  2.5交互式网站框架(自从2005年5月)41 是一个项目,目的是从浏览器端对Ajax基础结构的多方面予以支持。自描述为"使用javascript,css,xml,和html来创造高度交互网站的框架。包括一个定制的针对高度可读的javascript的xml分析器。实质上,是建立基于AJAX的网站的基础,还有另外一些通用脚本"。  2.6LibXMLHttpRequest /connector?file=reference/2003/06/17/libXmlRequest.html),是XMLHttpRequest的一个瘦包装器。 2.7RSLite(x)是一个针对XMLHttpRequest的瘦包装器。  2.8Sack(在开发中,自从2005年5月)是一个针对XMLHttpRequest的瘦包装器。    2.9Sarissa(发行于2月,2003年)是一种JavascriptAPI,它封装了在浏览器端可以独立调用XML的功能。2.10XHConn(发行于自从4月,2005年)是一个对XMLHttpRequest的瘦包装器。  2.11Jquery简洁的思想:几乎所有操作都是以选择DOM元素(有强大的Selector)开始,然后是对其的操作(Chaining等特性)。3服务器端:多种语言 3.1跨平台异步的接口工具箱(5月2005年)CPAINT:是一真正的支持PHP和ASP/Vbscript的Ajax实现和JSRS(JavaScript远程脚本)实现。CPAINT提供给你需求的代码在后台实现AJAX和JSRS,而返回的数据以JavaScript形式在前台操作,格式化和显示。这允许你创建能提供接近实时的反馈给用户的web应用程序。3.2SAJAX(可用,但是不是1.0版本;自从3月2005年)直接把调用从Javascript发送到你的服务器端语言并再次回返。  3.3Javascipt对象标志(JSON)和JSON-RPCJSON(http/index.html),是一个"胖的自由的XML选择",而JSON-RPC(/)是一种远程过程协议,类似于XML-RPC,强有力支持Javascript客户。  3.4Javascript远程脚本(JSRS)(自从2000年)直接把调用从Javascript发送到你的服务器端语言并再次回返。4服务器端:Java 4.1WebORBforJava(自从2005年8月)是一个平台,支持开发AJAX和基于Flash的胖客户端应用程序,并可以把它们与Java对象和XMLWeb服务相系起来。在线举例(http)  4.2Echo2(自从3月2005年)允许你用纯Java代码编写Ajax应用软件。  41 4.3DirectWebRemoting(DWR)(2005年)是一个框架,用于直接从Javascript代码中调用Java方法。  4.4SWATO(2005年)是一套可重用的和良好集成的Java/JavaScript库,它实现了一种更容易的方式来改变你的web应用程序的交互,它是通过AJAX方式实现。(二)社交网络历史背景:早期在互联网上多维持着很多提供用户互动支持的服务,例如BBS,新闻组等。早期社交网络的服务网站呈现为在线社区的形式。用户多通过聊天室进行交流。随着Blog等新的网上交际工具的出现用户可以通过网站上建立的个人主页来分享喜爱的信息。2002年至2004年间,世界上三大最受欢迎的社交网络服务类网站是Friendster、MySpace、Bebo。在2005年之际MySpace成为了世上最巨大的社交网络服务类网站。传闻当时其页面访问量超越了作为著名搜索引擎的Google。2006年第三方被允许开发基于Facebook的网站API的应用,使得Facebook随后一跃成为全球用户量增长最快的网站。众多网站随后开始仿效开发自己网站的API。社交服务网站的发展验证了“六度分隔理论”(SixDegreesofSeparation),即“人际关系脉络方面你必然可以通过不超出六位中间人间接与世上任意先生女士相识”。个体的社交圈会不断地扩大和重叠并在最终形成大的社交网络。在此类通过对“朋友的朋友是朋友”原则的实现而得到发展的线上社交网络中,Friendster具备一定的代表性。社交服务类网站最早出现商业盈利目的是在2005年3月雅虎对雅虎360°的推出。在2005年6月新闻集团成功收购MySpace。随后在2005年12月,英国ITV购得FriendsReunited。此后在世界的各地涌现出各种不同语言的社交网络服务类网站。1995年出现的网站Classmates.com可以帮助用户保持与他人的联系,被认为是社交网络的雏形,但该网站不允许用户之间直接建立联系,而是依靠就读的学校间接地与他人建立联系。从这点上说,Classmates.com并不符合本文关于社交网络的定义。1997年出现SixDegrees.com允许朋友之间直接建立联系,是第一个符合本文定义的社交网络。进入21世纪,随着互联网的普及,出现了一些单纯以交友为目的的社交网络,其中具有代表性的是Friendster,其他同时期的社交网络还有Cyworld、Ryze和LinkedIn等。2003年出现的MySpace提供的功能迎合了用户的需求,迅速发展为大型的社交网络。在随后几年,许多类似于MySpace的社交网络不断涌现,社交网络进入快速发展阶段。在国内,创建于141 998年5月的中国同学录5460.net)和Classmates.com类似,都是以同学数据为基础的校友录网站。2003年开通的UUZone(www.uuzone.com)被认为是国内最早的社交网站。2005年12月,校内网(现改名人人网)在清华大学、北京大学、中国人民大学三所学校开通服务,这是国内首个实名制且具备一定影响力的社交网站,其主要用户集中在校园。2008年2月,开心网(kaixin001.com)成立并迅速在白领用户市场中获得认知,其页面访问量逐渐超过人人网。QQ无疑是国内乃至全球注册用户数最多的社交网络,作为一款风行的即时聊天工具,QQ承载着人们的各种社会关系,这使得所有使用QQ的用户都存在于一个大的社交网络之中。优势:通过社交服务网站我们与朋友保持了更加直接的联系,建立大交际圈,其提供的寻找用户的工具帮助用户寻到失去了联络的朋友们。网站上通常有很多志趣相同并互相熟悉的用户群组。相对于网络上其他广告而言商家在社交服务网站上针对特定用户群组打广告更有针对性。劣势:有的社交服务类网站并不获得利润,因而其商业模式一直未有达到业界的认可。随着社交服务类网站的出现,浏览这些网站占用了越来越多雇员的工作时间。 无法通过增长在网络上所进行的社交活动来实现真实生活中社会交往技巧的增长。  个人信息安全保障措施还需要改善。部分著名社交网站:国内外社交网的代表:多功能大众化社交:百度空间  基于学习、互动、分享社交网站:鸭鸭坛  基于大众化的社交:QQ空间  基于白领用户的娱乐:开心网[6]  基于白领和学生用户的交流:人人网  基于网络同居的情感交流:赛客网  基于未婚男女的婚介:世纪佳缘  基于地方化的交流:南京族  基于年轻用户的交友:51   41 基于原创性文章:新浪博客  基于位置信息的社交:麦乐行  基于个性化交友页面:阔地网络国外社交网站:相对于其他社交网,在中国网速较快较多中国人用的的国外社交网站:friendster。社交网络分类:按照其功能属性,社交网络大致分为:交友网络:这类社交网络是现实社交圈的映射,其朋友关系的真实性和关系维护的便捷性吸引了大量用户的参与。这类网站在国际上比较流行的有Facebook、Myspace和Cyworld等;国内比较流行的有人人网(www.renren.com)和开心网(kaixin001.com)。此外,面向商务人士的XING(www.xing.com)和linkedin(www.linkedin.com)、婚恋交友网也属于此类网络。博客系统:博客站点提供了博客发布和用户关注服务,用户之间的关注关系就形成了社交网络。博客网络一般是有向网络,即用户A关注用户B的博客,但用户B未必关注用户A的博客。近几年迅速兴起的微博客(如twitter)引发了人们对信息传播的关注。较大的博客站点有谷歌博客(Googleblogger)(www.blogger.com)、微软共享空间(Microsoftlivespaces)(home.spaces.live.com)、新浪博客(blog.sina.com.cn)、腾讯Qzone(qzone.qq.com)、LiveJournal(www.livejournal.com)、推特(Twitter)(twitter.com)和Follow5(www.follow5.com)等。媒体分享网络:这类网站主要用于用户发布、共享和检索媒体资源,如视频、图片或书签等。这些站点降低了信息发布的门槛,吸引了大量用户的参与。此类站点除了提供资源发布和共享服务外,还提供交友服务。这些站点上的用户形成的社交网络一般也是有向网络。较大的站点有视频分享网站Youtube(www.youtube.com)和优酷(www.youku.com)、图片分享网站Flickr(www.flickr.com)、网络书签站点CiteULike(www.citeulike.com)和delicious(delicious.com)等。即时通信网络:41 即时通信系统是一种实时交流工具,系统中的每个用户都有自己的联系人(或好友)列表。根据用户之间的好友关系可以构建即时通信系统中的社交网络。代表性的即时通信系统有MSN(www.msn.com)、QQ(im.qq.com)和Skype(www.skype.com)等。此外,某些BBS(如天涯社区)和协同编辑站点(如百度百科)等也增加了关注或好友的功能,在这些站点的用户之间也可组成社交网络。上述站点所提供的服务之间有互补和重叠之处,如视频分享网络“优酷”的用户也可以指定自己的好友;Facebook和人人网的用户也可以发布自己的微博客,这使得我们对于社交网络的分类很难给出严格的划分。现状和发展方向:展望:最近IE和火狐之间的浏览器之争变得火热起来,因此AJAX开发人员需要足够敏捷的作出反应。关键点在一些问题如CSS或XML,虽然各种浏览器形成采用最新标准的不同阵营(如Mozilla拥抱SVG和E4X标准及在最新火狐BETA版本中使用XUL,而微软使用自己的XAML技术)。所有这些技术代表当前AJAX主流JavaScript和XML的市场方向改变。总的来说,AJAX开发人员必须尽快地跟进最新的技术并利用高产的工具集。成功的AJAX开发人员还需要留心他们的使用者以避免将任何问题扩大化。并且AJAX开发人员还需要持续地创新来创建增强Web应用易用性的新方法。优点:更迅捷的响应速度  传统的web应用允许用户填写表单(form),当提交表单时就向web服务器发送一个请求。服务器接收并处理传来的表单,然後返回一个新的网页。这个做法浪费了许多带宽,因为在前後两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多。与此不同,AJAX应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于XML的webservice接口,并在客户端采用JavaScript处理来自服务器的响应。因此在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快的应用。同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。Ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。就像DHTML应用程序那样,Ajax应用程序必须在众多不同的浏览器和平台上经过严格的测试。随着Ajax的成熟,一些简化Ajax使用方法的程序库也相继问世。同样,也出现了另一种辅助程序设计的技术,为那些不支持JavaScript的用户提供替代功能。41 缺点与其中一些问题的对应解决方案  对应用Ajax最主要的批评就是,它可能破坏浏览器后退按钮的正常行为。在动态更新页面的情况下,用户无法回到前一个页面状态,这是因为浏览器仅能记下历史记录中的静态页面。一个被完整读入的页面与一个已经被动态修改过的页面之间的差别非常微妙;用户通常都希望单击后退按钮,就能够取消他们的前一次操作,但是在Ajax应用程序中,却无法这样做。不过开发者已想出了种种办法来解决这个问题,当中大多数都是在用户单击后退按钮访问历史记录时,通过建立或使用一个隐藏的IFRAME来重现页面上的变更。(例如,当用户在GoogleMaps中单击后退时,它在一个隐藏的IFRAME中进行搜索,然后将搜索结果反映到Ajax元素上,以便将应用程序状态恢复到当时的状态。)一个相关的观点认为,使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中。该问题的解决方案也已出现,大部分都使用URL片断标识符(通常被称为锚点,即URL中#后面的部分)来保持跟踪,允许用户回到指定的某个应用程序状态。(许多浏览器允许JavaScript动态更新锚点,这使得Ajax应用程序能够在更新显示内容的同时更新锚点。)这些解决方案也同时解决了许多关于不支持后退按钮的争论。进行Ajax开发时,网络延迟——即用户发出请求到服务器发出响应之间的间隔——需要慎重考虑。不给予用户明确的回应,没有恰当的预读数据,或者对XMLHttpRequest的不恰当处理,都会使用户感到延迟,这是用户不欲看到的,也是他们无法理解的。通常的解决方案是,使用一个可视化的组件来告诉用户系统正在进行后台操作并且正在读取数据和内容。一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax;用JavaScript作的Ajax引擎,JavaScript的兼容性和DeBug都是让人头痛的事;Ajax的无刷新重载,由于页面的变化没有刷新重载那么明显,所以容易给用户带来困扰――用户不太清楚现在的数据是新的还是已经更新过的;现有的解决有:在相关位置提示、数据更新的区域设计得比较明显、数据更新后给用户提示等;对串流媒体[7]的支持没有FLASH、JavaApplet好。社交网络的主要研究问题:近几年,社交网络的研究引起学术界越来越多地关注,研究内容包括社交网络的拓扑分析、社会化推荐(SocialRecommendation)、网络社区发现、社交网络中的信息传播等,也取得了一些成果。41 社交网络拓扑特性分析:当社会网络刚开始进入研究者的视线时,人们希望通过了解社会网络的拓扑特性和已知的一些网络,例如万维网(WWW)、互联网(Internet)的拓扑结构进行比较。这些比较主要是基于节点度分布、社交网络的网络半径、平均路径长度和聚集系数等,来看看社交网络的图结构和非社交网络的图结构有什么不同。有些研究希望通过这些特性分析判断某些应用的性能。例如:有些应用只有在具有很强的局部连通的社交结构的条件才能有效地工作。这意味着,社交图必须有大量联系紧密的簇。分析Facebook[8]的节点度分布的结果,发现其符合幂律分布。为研究社交网络的网络半径、平均路径长度和聚集系数等特性,依据每个区域网络(Network)构建了社交网络图[9],所有区域网络的平均路径长度都小于6,网络半径或直径相对较低。相对于同规模的随机图或随机幂律图,聚集系数具有较高的聚集性。Facebook中所有网络的同配系数均大于0,说明度值较高的节点之间的互联概率较大,这些度值较高的、相互连接的节点就形成了小世界网络的骨干网,这使得处于网络边缘的那些高聚集的节点与其它节点之间具有较小的平均路径长度。用户行为分析:分析用户访问社交网络过程中的行为[10],数据来源是用户访问社交网络的HTTP(HypertextTransferProtocol,超文本传输协议)会话过程数据。文中分析比较了4种不同社交网络(Facebook、LinkedIn、Hi5和StudiVZ)的用户访问行为特征。结果表明访问社交网站与其他网站存在不同之处:(1)用户容易重复同一个行为;(2)用户每次会话过程时间比较长;(3)图片目录最受欢迎。除了研究用户访问社交网络的行为外,还研究了各种行为之间转移概率[11]。验证社交网络拓扑特性与用户交互网络拓扑特性之间的差异,利用Facebook中的数据分别对这两种网络的拓扑特性进行统计分析,结果表明二者之间存在较大差异,用户交互网络的网络直径显著变大。社会化推荐:传统的推荐技术主要利用了用户对项目(Item)的评价矩阵,但在社交网络中用户对某项目的评价往往会极大影响其朋友的选择。综合了用户对项目的评价以及用户之间的信任关系[12](构成SocialTrustEnsemble)进行推荐,使得推荐结果更精确,并具有现实意义。对于基于协同过滤的社会化推荐问题[13],针对传统协同过滤法存在的2个问题:(1)因计算复杂度而引起的特征信息融合困难;(2)各种特征信息之间的依赖关系不能有效利用,提出了多层次的连续随机场模型,用于社会化推荐。41 社区关系挖掘:网络社区发现有很多种算法,但有些算法的可扩展性较差,适于大规模网络的却为数不多,CNM、Wakita和Louvain是三种扩展性较好的算法。然而,这三种算法都存在如下问题:若输入的数据顺序不同,则得到的结果也不相同。因此提出成员成对概率(PairwiseMembershipProbability)和一致性(Consistency)两个定量指标,并依据这两个指标提出新的挖掘算法来解决挖掘结果一致性的问题。利用Filckr中的图片和标签描述信息推测图片的拍摄位置,并基于位置进行新型的关系挖掘,以此表明时序信息和可视内容有助于推测图片呈现的位置。通过结合位置和时序信息可以还原图片的拍摄路线,从中了解信息的变迁过程。社交网络中的信息传播:目前社交网络信息传播模型大都是基于独立级联模型(IndependentCascadeModel,ICM)的,但其计算量较大。可以利用最短路径模型[14](Shortest-PathModel,SPM)来近似求解信息的传播范围以降低计算量。最短路径模型的主要思想是信息从已受影响节点集合到将要受影响节点的最短路径进行传播,其速度是最快的。最短路径模型是独立级联模型的一个特例。实验结果表明与独立级联模型相比,最短路径模型的运行结果相同,但运行效率更高。为了利用因子图建模[15],提出三种不同的学习算法,对社会影响力进行了定量分析。可以从两个方面研究了信息传播最大化的问题:(1)改进贪婪算法,减少了运行时间;(2)通过舍弃某些度值,提出了一种新的启发式算法,以改进信息的传播速度。基于实验结果,作者认为在解决信息传播的可扩展性方面,启发式算法应优于贪婪算法。在社交网络的活动中,很多研究者关心哪些用户行为会影响信息传播,因此,有人又提出了交互式网络(InteractiveNetwork)和访问网络(VisitNetwork)等表现用户交互行为的关系网。其它基于社会网络的应用:除了针对社会网络本身特性的研究外,越来越多的研究开始关注基于社会网络的其它应用问题。例如利用社会网络中朋友关系疏密程度,来防止Sybil攻击(SybilAttacks);还有利用朋友关系来改善网络的流量控制]和阻断干扰消息等。问题的评述:社交网络开发的Ajax设计模式之LightboxLightbox的效果类似于WinXP操作系统的注销/关机对话框,除去屏幕中心位置的对话框,其他的区域都以淡出的效果逐渐变为银灰色以增加对比度,此时除了对话框内的表单控件,没有其他区域可以获取焦点。Lightbox的作用则相当于从前只在IE中被支持的"ModalDialog";现在在FireFox也可用window.open(url,name,"modal=yes");来实现同样的效果。使用"Modal41 Dialog"将限制用户的操作于弹出的对话框中,只有完成设定好的操作后方才关闭。在一些逻辑敏感的应用中强制吸引用户的注意力以防止用户的误操作导致程序逻辑淆乱。其实Lightbox并不新鲜,在前年Ajax未诞生之前,它是以"InlinePopup"的名号出现的。诞生的原因是因为屏蔽弹出窗口的技术纷纷被浏览器采用,而浏览器厂商间也没有一个统一的Popup解决方案。当时我记得还有一些说"InlinePopup"破解了弹出窗口屏蔽的报道。"InlinePopup"并不被很多人关注,不过我还是发现国内的163信箱去年改版推出的时候大量使用了此效果。Ajax名正言顺之时,"InlinePopup"也重装再现了,并换了一个有美感的名字"Lightbox"。LightboxJS最早被其作者LokeshDhakar用来放大显示图片覆盖于当前页面之上,其是用CSS来定义图片容器,用一幅半透明的png图片实现渐变阴暗的效果。使用相当简单:1.加载lightbox.js2.给图片链接增加一个rel="lightbox"属性。如:image#1受Lightbox的启发,ChrisCampbell认为并决定让LightboxGoneWild!。他引入了Prototype1.4.0,配合CSS与HTML标签的class属性重新实现Lightbox的效果,同时扩展LightBox原来的覆盖显示图片的单纯功能,使得可以通过流行的异步Updator技术动态加载表单。可以去体验一下他提供的demo。不过似乎他的实现有一些bug,因为该demo在我的FireFox1.5和IE7beta2上都会导致CPU占用率100%。alwaysBETA很快也推出了自己的改进方案。他没有增加新的功能,但是通过引入微型效果类库Moo.FX让Lightbox更漂亮,更容易定制。第一次使用WinXP的时候,关机时的阴暗渐变效果让我颇为惊艳。利用Lightbox引导用户的注意力完成预先设定的操作,良好的对比度效果营造温和的视觉氛围。相信在当前交互界面日益接近桌面的Web应用中,Lightbox也将会成为Ajax的设计模式之一。社交网络中Ajax技术应用最近互联网上比较火热的话题当然是关于社交网络的应用,其中AJAX又是社交网络的核心之一。AJAX是AsynchronousJavaScriptandXML的缩写。它并不是一门新的语言或技术,它实际上是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用,它包括:使用XHTML和CSS标准化呈现;使用DOM实现动态显示和交互;使用XML和XSLT进行数据交换与处理;使用XMLHttpRequest进行异步数据读取;最后用JavaScript绑定和处理所有数据。41 Ajax的工作原理相当于在用户和服务器之间加了—个中间层,使用户操作与服务器响应异步化。这样把以前的一些服务器负担的工作转嫁到客户端,利于客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约ISP的空间及带宽租用成本的目的。现以两个验证通行证帐号是否存在的例子来讲述AJAX在实际中的应用:(1)用文本字符串的方式返回服务器的响应来验证网易通行证帐号是否存在;(2)以XMLDocument对象方式返回响应来验证金山通行证帐号是否存在;首先,需要用JavaScript来创建XMLHttpRequest类向服务器发送一个HTTP请求,XMLHttpRequest类首先由InternetExplorer以ActiveX对象引入,被称为XMLHTTP。后来Mozilla﹑Netscape﹑Safari和其他浏览器也提供了XMLHttpRequest类,不过它们创建XMLHttpRequest类的方法不同。对于InternetExplorer浏览器,创建XMLHttpRequest方法如下:xmlhttp_request=newActiveXObject("Msxml2.XMLHTTP.3.0");xmlhttp_request=newActiveXObject("Msxml2.XMLHTTP");xmlhttp_request=newActiveXObject("Microsoft.XMLHTTP");由于在不同InternetExplorer浏览器中XMLHTTP版本可能不一致,为了更好的兼容不同版本的InternetExplorer浏览器,因此我们需要根据不同版本的InternetExplorer浏览器来创建XMLHttpRequest类,上面代码就是根据不同的InternetExplorer浏览器创建XMLHttpRequest类的方法。对于Mozilla﹑Netscape﹑Safari等浏览器,创建XMLHttpRequest方法如下:xmlhttp_request=newXMLHttpRequest();如果服务器的响应没有XMLmime-typeheader,某些Mozilla浏览器可能无法正常工作。为了解决这个问题,如果服务器响应的header不是text/xml,可以调用其它方法修改该header。xmlhttp_request=newXMLHttpRequest();xmlhttp_request.overrideMimeType('text/xml');在实际应用中,为了兼容多种不同版本的浏览器,一般将创建XMLHttpRequest类的方法写成如下形式:try{if(window.ActiveXObject){41 for(vari=5;i;i--){try{if(i==2){xmlhttp_request=newActiveXObject("Microsoft.XMLHTTP");}else{xmlhttp_request=newActiveXObject("Msxml2.XMLHTTP."+i+".0");xmlhttp_request.setRequestHeader("Content-Type","text/xml");xmlhttp_request.setRequestHeader("Charset","gb2312");}break;}catch(e){xmlhttp_request=false;}}}elseif(window.XMLHttpRequest){xmlhttp_request=newXMLHttpRequest();if(xmlhttp_request.overrideMimeType){xmlhttp_request.overrideMimeType('text/xml');}}}catch(e){xmlhttp_request=false;}在定义了如何处理响应后,就要发送请求了。可以调用HTTP请求类的open()和send()方法,如下所示:xmlhttp_request.open('GET',URL,true);xmlhttp_request.send(null);open()的第一个参数是HTTP请求方式—GET,POST或任何服务器所支持的您想调用的方式。按照HTTP规范,该参数要大写;否则,某些浏览器(如Firefox)可能无法处理请求。41 第二个参数是请求页面的URL。第三个参数设置请求是否为异步模式。如果是TRUE,JavaScript函数将继续执行,而不等待服务器响应。这就是"AJAX"中的"A"。用JavaScript来创建XMLHttpRequest类向服务器发送一个HTTP请求后,接下来要决定当收到服务器的响应后,需要做什么。这需要告诉HTTP请求对象用哪一个JavaScript函数处理这个响应。可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名,如下所示:xmlhttp_request.onreadystatechange=FunctionName;FunctionName是用JavaScript创建的函数名,注意不要写成FunctionName(),当然我们也可以直接将JavaScript代码创建在onreadystatechange之后,例如:xmlhttp_request.onreadystatechange=function(){//JavaScript代码段};在这个函数中。首先要检查请求的状态。只有当一个完整的服务器响应已经收到了,函数才可以处理该响应。XMLHttpRequest提供了readyState属性来对服务器响应进行判断。readyState的取值如下:0(未初始化)1(正在装载)2(装载完毕)3(交互中)4(完成)有关争论焦点:对于Ajax程序员而言,莫过于以下几点:浏览器的兼容性问题:Ajax在本质上是一个浏览器端的技术,首先面临无可避免:的第一个问题即是浏览器的兼容性问题。各家浏览器对于JavaScript/DOM/CSS的支持总有部分不太相同或是有Bug,甚至同一浏览器的各个版本间对于JavaScript/DOM/CSS的支持也有可能部分不一样。这导致程序员在写Ajax应用时花大部分的时间在调试浏览器的兼容性而非在应用程序本身。因此,目前大部分的Ajax链接库或开发框架大多以js链接库的形式存在,以定义更高阶的JavaScriptAPI、JavaScript对象(模板)、或者JavaScriptWidgets来解决此问题。如prototype.js。JavaScript编程的最大问题来自不同的浏览器对各种技术和标准的支持。构建一个运行在不同浏览器(如IE和火狐)是一个困难的任务。因此几种AJAXJavaScript框架或者生成基于服务端逻辑或标记库的JavaScript,或者提供符合跨浏览器AJAX开发的客户端JavaScript库。一些流行的框架包括:,Backbase,Bitkraft,Django,DOJO,DWR,MochiKit,Prototype,Rico,Sajax,Sarissa,and41 Script.这些框架给开发人员更多的空间使得他们不需要担心跨浏览器的问题。虽然这些框架提升了开发人员构建应用的能力,但由于厂商已经开发了更细节的用户界面的打包组件解决方案,因此在AJAX组件市场中需要考虑一些其他因素。例如提供通用用户界面的组件如组合框和数据栅格的几个厂商,都可以被用来在应用中创建良好的通过类似电子数据表方式来查看和编辑数据的体验。但这些组件不仅是封装了组件的用户界面而且包括与服务端数据的通讯方式,这些组件通常使用基于标记方式来实现如或JSF控件。业务逻辑分散:Ajax技术之主要目的在于局部交换客户端及服务器之间的数据。如同传统之主从架构,无可避免的会有部分的业务逻辑会实现在客户端,或部分在客户端部分在服务器。由于业务逻辑可能分散在客户端及服务器,且以不同之程序语言实现,这导致Ajax应用程序极难维护。如有用户接口或业务逻辑之更动需求,再加上前一个JavaScript/DOM/CSS之兼容性问题,Ajax应用往往变成程序员的梦魇。针对业务逻辑分散的问题,Ajax开发框架大致可分为两类:将业务逻辑及表现层放在浏览器,数据层放在服务器:因为所有的程序以JavaScript执行在客户端,只有需要数据时才向服务器要求服务,此法又称为胖客户端(fatclient)架构。服务器在此架构下通常仅用于提供及储存数据。此法的好处在于程序员可以充分利用JavaScript搭配业务逻辑来做出特殊的用户接口,以符合终端用户的要求。但是问题也不少,主因在第一,JavaScript语言本身之能力可能不足以处理复杂的业务逻辑。第二,JavaScript的执行效能一向不好。第三,JavaScript访问服务器数据,仍需适当的服务器端程序之配合。第四,浏览器兼容性的问题又出现。有些Ajax开发框架如DWR企图以自动生成JavaScript之方式来避免兼容的问题,并开立通道使得JavaScript可以直接调用服务器端的Java程序来简化数据的访问。但是前述第一及第二两个问题仍然存在,程序员必须费相当的力气才能达到应用程序之规格要求,或可能根本无法达到要求。将表现层、业务逻辑、及数据层放在服务器,浏览器仅有用户接口引擎(UserInterfaceengine);此法又称为廋客户端(thin41 client)架构,或中心服务器(server-centric)架构。浏览器的用户接口引擎仅用于反映服务器的表现层以及传达用户的输入回到服务器的表现层。由浏览器所触发之事件亦送回服务器处理,根据业务逻辑来更新表现层,然后反映回浏览器。因为所有应用程序完全在服务器执行,数据及表现层皆可直接访问,程序员只需使用服务器端相对较成熟之程序语言(如Java语言)即可,不需再学习JavaScript/DOM/CSS,在开发应用程序时相对容易。缺点在于用户接口引擎以及表现层通常以标准组件的形式存在,如需要特殊组件(用户接口)时,往往须待原框架之开发者提供,缓不济急。如开源码Ajax开发框架ZK目前支持XUL及XHTML组件,尚无XAML之支持。多进程或多线程的竞争问题:Ajax是以异步的方式向服务器提交需求。对服务器而言,其与传统的提交窗体需求并无不同,而且由于是以异步之方式提交,如果同时有多个Ajax需求及窗体提交需求,将无法保证哪一个需求先获得服务器的响应。这会造成应用程序典型的多进程(process)或多线程(thread)的竞争(racing)问题。程序员因此必须自行处理或在JavaScript里面动手脚以避免这类竞争问题的发生(如Ajax需求未响应之前,先disable送出按钮),这又不必要的增加了程序员的负担。目前已知有自动处理此问题之开发框架似乎只有ZK。调试问题:在实际构建AJAX应用中,你需要的不只是文本编辑器。既然JavaScript是非编译的,它可以容易地编写和运行在浏览器中。然而,许多工具提供了有用的扩展如语法高亮和智能完成。不同的IDE提供了对JavaScript支持的不同等级。来自JetBrains的IntelliJIDEA是一个用来JavaScript开发的更好的IDE,虽然许多开发人员也喜欢Microsoft’sVisualStudio产品(允诺会在最新的版本中改善对AJAX的支持)。Eclipse包含了两个免费的JavaScript编辑器插件和一个商业的来自ActiveStat的KomodoIDE。另一个JavaScript和AJAX开发中的问题是调试困难。不同的浏览器提供不同的通常是隐藏的运行时错误信息,而JavaScript的缺陷如双重变量赋值(通常是由于缺少数据类型)使得调试更加困难。在AJAX的开发中,调试就更复杂了,因为其需要标识究竟是客户端还是服务端产生的错误。在过去,JavaScript调试的方法是删除所有代码然后一行行的增加直到错误出现。现在,更多开发人员回到为IE准备的MicrosoftScriptDebugger和为Mozilla浏览器准备的Venkman。社交网络:互联网下一个竞争焦点?近来,岁末回顾与总结成为各大媒体关注的焦点。谁也不曾想到,在两个月前还被国人津津乐道的微软收购Face-book(美国第二大社交网站)股份事件,如今被国外媒体总结为2007年十大最差并购案之一。但这并不能阻止社交网络的风生水起。在此之前,在Google发布的41 2007年增长最快的十大关键词中,社交、社区网站占据了小半壁江山。而最近一段时间以来,关于Facebook即将进入中国的消息甚嚣尘上,传言收购的网站更是从占座网、分贝网到天网、校内网等众多国内知名网站一一涉及。种种迹象显示,过去以休闲娱乐和交友为主的社群类网站已经从原来的低调处世浮出水面,成为互联网产业群族中的新竞争焦点,互联网社群时代的大门已悄然开启。国外热捧撩拨国内市场几年前,一家德国报纸曾做过一个试验:帮助法兰克福一个土耳其烤肉店老板找到他最喜欢的影星马龙?白兰度。经过几个月的打听和联系,报社员工发现,这两人只经过6个人的私交就建立了人脉关系。因为烤肉店老板是伊拉克移民,他有个朋友住在加州,刚好这个朋友同事的女朋友和《这个男人有点色》的制作人的女儿是女生联谊会的结拜姐妹,而马龙?白兰度主演了这部片子。这或许是著名的“六度分隔”理论的最生动的说明。事实上,美国MySpace、Facebook,国内的校内网、占座网等社交网站正基于此理论建立。在“帮助用户极度扩张人脉”的同时,MySpace、Facebook等社交网站的互联网版图也正以不可思议的速度扩张。在被传媒大鳄默多克收购前,MySpace全球注册用户2000万,收购一年后,注册用户猛增四倍达到8000多万。创立于2004年初的社交网站Facebook,目前也拥有活跃用户约5000万,且每天新增用户25万左右。微软与Google的竞购更是让Facebook还没上市,身价已高达150亿美元。而Google比微软更早就认识了网络社交(SNS)的商业价值,在一年前就和MySpace展开了合作。新闻集团、微软、Google对MySpace、Facebook全球前两位最大的交友社区网站的重视足以说明,互联网SNS的商业价值正在得到前所未有的认同。发生在大洋彼岸的造富神话不可避免地影响到国内的互联网行业,社交网络这一热潮也正蔓延至中国。日前,国内商务社交网站天际网宣布与法国Viadeo网站进行全面战略整合。而早在今年4月,MySpace已经在中国上线,为中国用户提供个人博客、视频、音乐等多种互动功能,最近更有并购大学生实名社交网络平台——亿聚网的意向。而Face-book收购国内社交网站进入中国的传言,在某种程度上更是提升了国内社交网站的热度,校内网、占座网、天网、分贝网等一个个网站在各类新闻里频繁地出现。外来势力或引重新洗牌面对中国1.7亿的网民,国际社交网站巨头不能不重视。继默多克派夫人邓文迪坐阵MySpace之后,Facebook进入中国是早晚的事。虽然41 Facebook一再澄清收购传闻,但向中国社交网站频频伸出橄榄枝是不争的事实。有博客发表评论表示,如果Facebook在中国市场无所作为,那么它只会日益被MySpace甩得更远。而一个月前,在亚洲拥有庞大用户群的在线社交网站Friendster也相继推出了繁体中文版和简体中文版。业内人士认为,国外社交网站进入中国,会让国际资本市场更关注本土社交网站。随着外部势力对国内社交网络市场的重视,国内的社交网站将迎接一场争夺战的洗礼。对于收购校内网的千橡集团董事长兼CEO陈一舟来说,这些国外社交网站的进入对自己并没有造成多大的压力。目前,校内网在国内拥有2000所大学,活跃用户880万。他认为,本土化的交友型网站才更加吸引年轻用户。“我们在网络划分上跟国外划分不同,我们所有的大学生是一个网络,清华的可以看到北大的,但Facebook做不到。另外,Facebook用户大多都讲英语,但中国大学生对讲英语是很反感的,所以我估计Facebook进入中国面临很多难题。”确实,本土化是MySpace们进入中国的一大难题。曾几何时,雅虎、Google等一大批国际互联网巨头都因为本土化而败走麦城,而其在中国本土的竞争对手却非常成功。在国内的知名度不高,用户活跃度低,缺乏吸引力、网站的页面与功能等方面都是这些国际社交网站需要面对的挑战。正基于此,MySpace中国的掌舵人罗川吸取了原来在MSN的经验和教训,一开始就把本土化放在了首要位置。他争取了更大的运营自主权,将服务器搬到中国,拥有独立域名、两套开发代码,在MySpace的最新功能的基础上开发适合中国网民的功能。目前,探讨MySpace中国能否成功还为时太早,但MySpace中国的一些做法无疑给后来者提供了经验,也给国内的同行造成了压力。“这会给国内社交网站带来新的技术和最新理念,促进其技术革新,也会让本土社交网站可以更好地借他们的平台获得更多的用户群”,定位于商务SNS的六度网经理戴峰表示,国外社交巨头站点的介入,相信会在一定程度上改变中国社交网站的格局,让中国的社交网站更加理智,也很可能会导致中国的社交网站重新洗牌。国内市场尚在跑马圈地其实,对国内很多社交网站来说,需要担心的不是外来者,而是现已形成几足鼎立的巨头。从博客到视频,一系列Web2.0大潮中的“明星”,大多沦为大网站中单一的功能组建,它们似乎只能通过融入大型平台才能实现自己的商业价值。业内人士认为,同博客、视频一样,社交网络非常具有用户黏性,在未来它将不只是一个应用,而是像搜索引擎一样出现在所有大的网站里。41 在同城交友类网站51.com的董事长庞升东看来,能打垮自己网站的不是校内网、占座网,更不是MySpace中国,而是腾讯和百度。目前腾讯已经把社交网络Qzone内置进了QQ客户端,而且包括Qzone、QQ秀等在内的虚拟物品交易已经占据腾讯近一半收入。如果要勉强找出一个中国的MySpace,腾讯应该会高票当选。这让庞升东感到很不安,他曾很认真地计算过公司的死期,并时刻担心这一天的到来。“这取决于竞争对手何时发力。如果QQ发力只需1个月,百度发力要3个月,猫扑发力要6个月。”除了要担心互联网巨头对生存空间的挤压,社交网站自身发展问题也不少。目前,国内SNS领域包括了校园、交友、商务、白领等领域,主要靠会员收费、招聘猎头等增值服务、虚拟物品交易、广告分成等手段赢利,但大规模赢利并未出现。而对陈一舟和校内网来说,赢利还不是其目前所关注的,如何应对用户活跃度不高,流失严重才是当务之急。在校内网里类似浙大、清华拥有几万人的群组每天只有个位数的回帖量。这不得不让陈一舟操心,“我个人对它的盈利状况是最不关心的,我的精力是如何让它尽快长大,同时让这个资产长期存在。”不过,社交网络需要一个积累的过程。目前,国内大部分的社交网站尚处于跑马圈地的拓荒期。在网站内容日益同质化的今天,差异化、个性化也是社交网站必须走的方向之一。复制别人的模式,即便不是死路一条,至少也会做得很辛苦。惟有从用户的角度出发,寻找自身的优势和特色,设计出能黏住用户的功能,带给客户简单、真实、新鲜的体验,才能立于不败之地。二、总结部分总结:本文首先介绍了Ajax和社交网络的概念和特点,为了更深入的理解Ajax和社交网络,分别分析了与Ajax相关的内容,从历史背景到现在所面临的难题和解决方案。对于社交网络,也从相应的历史背景到现在流行的人人和网开心网等著名的网络。尤其是开心网,它是社交网络中最先发展起来的模板,为以后的各种社交网络所借鉴,具有一定的参考价值。也是以后系统设计所必须借鉴的。41 展望:展望未来,有了构件化和开发工具的支持,Ajax的敏捷开发模式已经形成,我们可以像使用.NET、Delphi一样实现快速开发Ajax应用,而现代的软件设计和开发思想、项目管理的需要,要求我们从工程的角度来解决应用,因此Ajax开发必将与成熟的软件开发过程结合,产生具有企业级应用特征的完整体系架构和实现支撑。无论从基础架构、技术系统间耦合、构件化、开发工具支持、过程工具的支撑均实现整体化。作为Ajax运行的基础,浏览器将提供更强大的支持和改变,如支持安全允许下的文件操作、硬件接口;Ajax远程分布对象访问机制形成标准,并将纳入操作系统的一部分或成为标准服务;第三方构件统一标准,应用功能更加强大,丰富的工程模板;开发环境完善易用,兼容多种程序语言,支持团队协作与版本管理;能够与建模设计工具良好融合,如UML建模;能够进行智能性可重复测试,与测试工具结合;Ajax得到更广泛的应用,针对智能终端浏览器提供特性化功能支持。Ajax在对Web应用功能的大幅提升将直接导致应用模式的改变。首先企业应用会更多地采用Ajax来实现,对于大型应用来说,Web模式带来的易用性和可维护性显然具有诱惑力,Ajax支持的客户端功能提升使得替换传统的操作界面成为能;Ajax具有数据与样式分离及易于结合的特点,松散的耦合性、优良的开放性和标准化非常有利于网络信息共享,从而类似Web服务,在因特网信息共享及个性化交互方向得到充分发挥;另一方面,具有网络服务应用特征的新型应用模式会更多地出现,比如网络应用租赁形式广泛被使用,涵盖的内容将可能是各类信息管理、网络客服、在线设计、网上交流、甚至是在线游戏。当然,Ajax自身所存在的缺陷,必将阻碍它的发展和广泛使用。数据较多时XML的效率往往成为一个瓶颈,不过Ajax可以不使用XML而采用其它的数据格式,比如一些轻量级的数据交换格式JSON;Ajax基于标准网页元素的界面功能仍显单一和功能不足,智能客户端或类似XUL的技术目前也暂露头角,也许这些技术都将会有融合及互相借鉴式地发展。Ajax在各种浏览器上兼容性的问题也会让人很头疼,相信浏览器生产厂家不久就会解决这一问题。著名的浏览器厂商Opera甚至已推出了支持Ajax的移动设备浏览器,这无疑预示着Ajax不仅仅在桌面终端上,而且在移动手机等设备上也将大放异彩。最后,需要说明的是,Ajax不是一种必须和万能的技术,它有适合自身应用的场合,并与现有的动态页面技术互补融合,在未来的软件技术发展中,相信Ajax将担负起更多的用途,在Web应用的舞台上发挥重要的作用。四、参考文献[1](美)阿斯利森,(美)舒塔编著.Ajax基础教程.金灵等译,人民邮电出版社,2006(6)[2]贯通AJAX+PHP+DreamweaverCS3动态网站开发,陈锋敏,罗田,李颖智,41 电子工业出版社,2008[3]卜维丰、丁卫颖、付瑞锋等编著,Ajax技术应知应会90题,电子工业出版,2008(5)[4]征服Ajax+Lucene构建搜索引擎/李刚,宋伟,邱哲编著.-北京:人民邮电出版社,2006[5]侯志荣,吕振肃.基于HTTP协议的文件远程存取方法研究[J].计算机应用,2003,(06)[6]李宁,人人都玩开心网:ExtJS+Android+SSH整合开发Web与移动SNS,电子工业出版社,2010[7]张溢珠,陈力君.定量分析方法[M].上海:复旦大学出版社.2003[8]AlanMislove,MassimilianoMarcon,KrishnaP.Gummadi,PeterDruschel,andBobbyBhattacharjee.Measurementandanalysisofonlinesocialnetworks.InProceedingsofInternetMeasurementConference,NewYork:ACM,2007,29~42[9]ChristoWilson,BryceBoe,AlessandraSala,KrishnaP.N.Puttaswamy,andBenY.Zhao.UserInteractionsinSocialNetworksandtheirImplications.InProceedingsofthe4thACMEuropeanConferenceonComputerSystems,NewYork:ACM,2009,205~218[10]FabianSchneider,AnjaFeldmann,BalachanderKrishnamurthy,WalterWillinger.Understandingonlinesocialnetworkusagefromanetworkperspective.InProceedingsofthe9thACMInternetMeasurementConference,NewYork:ACM,2009,35~48[11]FabrícioBenevenuto,TiagoRodrigues,MeeyoungCha,VirgílioAlmeida.Characterizinguserbehaviorinonlinesocialnetworks.InProceedingsofthe9thACMInternetMeasurementConferenceNewYork:ACM,2009,49~62[12]HaoMa,IrwinKing,MichaelR.Lyu.Learningtorecommendwithsocialtrustensemble.InProceedingsofthe32ndinternationalACMSIGIRconferenceonResearchanddevelopmentininformationretrieval,2009,203~210[13]XinXin,IrwinKing,HongboDeng,MichaelR.Lyu.ASocialRecommendationFrameworkBasedonMultiscaleContinuousConditionalRandomFields.InProceedingofthe18thACMconferenceonInformationandknowledgemanagement,2009,1247~1256[14]MasahiroKimuraandKazumiSaito.Tractablemodelsforinformationdiffusioninsocialnetworks.InProceedingsofthe10thEuropeanConferenceonPrinciplesandPracticeofKnowledgeDiscoveryinDatabases,2006:259~271[15]JieTang,JimengSun,ChiWang,ZiYang.SocialInfluenceAnalysisinLarge-scaleNetworks.InProceedingsofthe15thACMSIGKDDinternationalconferenceonKnowledgediscoveryanddatamining,41 2009,807~816开题报告基于AJAX的社交网站交互平台设计与实现 四、选题的背景、意义历史背景:Ajax技术在1998年前后得到了应用。允许客户端脚本发送HTTP请求(XMLHTTP)的第一个组件由OutlookWebAccess小组写成。该组件原属于微软ExchangeServer,并且迅速地成为了InternetExplorer4.0的一部分。部分观察家认为,OutlookWebAccess是第一个应用了Ajax技术的成功的商业应用程序,并成为包括Oddpost的网络邮件产品在内的许多产品的领头羊。但是,2005年初,许多事件使得Ajax被大众所接受。Google在它著名的交互应用程序中使用了异步通讯,如Google讨论组、Google地图、Google搜索建议、Gmail等。Ajax这个词由《Ajax:ANewApproachtoWebApplications》[1]一文所创,该文的迅速流传提高了人们使用该项技术的意识。另外,对Mozilla/Gecko的支持使得该技术走向成熟,变得更为易用。  Ajax前景非常乐观,可以提高系统性能,优化用户界面。Ajax[2]现有直接框架AjaxPro,可以引入AjaxPro.2.dll文件,可以直接在前台页面JS调用后台页面的方法。但此框架与FORM验证有冲突。另微软也引入了Ajax组件[3],需要添加AjaxControlToolkit.dll文件,可以在控件列表中出现相关控件。Ajax主要包含的技术[4],基web标准(standards-basedpresentation)XHTML+CSS[5]的表示;使用DOM(DocumentObjectModel)[6]进行动态显示及交互;使用XML和XSLT[7]进行数据交换及相关操作;使用XMLHttpRequest进行异步数据查询、检索;使用JavaScript[8]将所有的东西绑定在一起。英文参见Ajax的提出者JesseJamesGarrett的原文,原文题目(Ajax:ANewApproachtoWebApplications)。类似于DHTML或LAMP,AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。事实上,一些基于Ajax的“派生/合成”式(derivative/composite)的技术正在出现,如“AFLAX”。Ajax的应用使用支持以上技术的web浏览器作为运行平台。这些浏览器目前包括:Mozilla、Firefox、Internet41 Explorer、Opera、Konqueror及Safari。但是Opera不支持XSL格式对象,也不支持XSLT。社交网络[9]含义包括硬件、软件、服务及应用,由于四字构成的词组更符合中国人的构词习惯,因此人们习惯上用社交网络来代指SNS(SocialNetworkService)。社交网络源自网络社交,网络社交的起点是电子邮件。互联网本质上就是计算机之间的联网,早期的E-mail解决了远程的邮件传输的问题,至今它也是互联网上最普及的应用,同时它也是网络社交的起点。BBS则更进了一步,把“群发”和“转发”常态化,理论上实现了向所有人发布信息并讨论话题的功能(疆界是BBS的访问者数量)。BBS把网络社交推进了一步,从单纯的点对点交流的成本降低,推进到了点对面交流成本的降低。即时通信(IM)和博客(Blog)更像是前面两个社交工具的升级版本,前者提高了即时效果(传输速度)和同时交流能力(并行处理);后者则开始体现社会学和心理学的理论——信息发布节点开始体现越来越强的个体意识,因为在时间维度上的分散信息开始可以被聚合,进而成为信息发布节点的“形象”和“性格”。比如从RSS、flickr到最近的YouTube、Digg、Mini-feed、Twitter、Fexion、Video-Mail都解决或改进了单一功能,是丰富网络社交的工具。随着网络社交的悄悄演进,一个人在网络上的形象更加趋于完整,这时候社交网络出现了。交友只是社交网络的一个开端,就像Google的开端只是每个网页的backlinks那么普通一样,社交网络的开端只是获取你的个人资料和好友列表。社交网络大体经历了这样一个发展过程:早期概念化阶段──SixDegrees代表的六度分隔理论;结交陌生人阶段──Friendster帮你建立弱关系从而带来更高社会资本的理论;娱乐化阶段──MySpace创造的丰富的多媒体个性化空间吸引注意力的理论;社交图阶段──Facebook复制线下真实人际网络来到线上低成本管理的理论。整个SNS发展的过程是循着人们逐渐将线下生活的更完整的信息流转移到线上进行低成本管理,这让虚拟社交越来越与现实世界的社交出现交叉。人类历史上,大凡重要的技术革命都伴随媒介革命,人类任何活动本质上都是信息活动,信息流的传递介质、管理方式的不同将决定你接受信息的不同,所有有关信息流媒介的变革一定是底层的变革——网络社交也是如此。从网络社交的演进历史来看,它一直在遵循“低成本替代”原则。网络社交一直在降低人们社交的时间和物质成本,或者说是降低管理和传递信息的成本。与此同时,网络社交一直在努力通过不断丰富的手段41 和工具,来替代传统社交来满足人类这种社会性动物的交流需求,并且正在按照从“增量性的娱乐”到“常量性的生活”这条轨迹不断接近基本需求。如果说在网络社交的起点——电子邮件时代,网络仅仅可以满足人们5%的社交需求,那么今天丰富的社交网络已经可以把这个数字至少提升了10倍,除了“接触型”的社交行为,或者说是“接触型”信息的收集和发布之外,网络社交已经开始承担大部分传统社交的作用。实际上,“非接触型”的社交原本就占据了人类社交的80%以上,这意味着网络社交对传统世界必然会带来巨大的影响。网络社交不仅仅是一些新潮的商业模式,从历史维度来看,它更是一个推动互联网向现实世界无限靠近的关键力量。目前,社交网络含盖以人类社交为核心的所有网络服务形式,互联网是一个能够相互交流,相互沟通,相互参与的互动平台,互联网的发展早已超越了当初ARPANET的军事和技术目的,社交网络使得互联网从研究部门、学校、政府、商业应用平台扩展成一个人类社会交流的工具。现在网络社交更是把其范围拓展到移动手机平台领域,借助手机的普遍性和无线网络的应用,利用各种交友/即时通讯/邮件收发器等软件,使手机成为新的社交网络的载体。社交网络,也就是网络+社交的意思。通过网络这一载体把人们连接起来,从而形成具有某一特点的团体。  国内外研究现状和发展趋势:最近IE和火狐之间的浏览器之争变得火热起来,因此Ajax开发人员需要足够敏捷的作出反应。关键点在一些问题如CSS或XML,虽然各种浏览器形成采用最新标准的不同阵营(如Mozilla拥抱SVG和E4X标准及在最新火狐BETA版本中使用XUL,而微软使用自己的XAML技术)。所有这些技术代表当前AJAX主流JavaScript和XML的市场方向改变。总的来说,Ajax开发人员必须尽快地跟进最新的技术并利用高产的工具集。成功的Ajax开发人员还需要留心他们的使用者以避免将任何问题扩大化。并且Ajax开发人员还需要持续地创新来创建增强Web应用易用性的新方法。  传统的web应用允许用户填写表单(form),当提交表单时就向web服务器发送一个请求。服务器接收并处理传来的表单,然後返回一个新的网页。这个做法浪费了许多带宽,因为在前後两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多。与此不同,Ajax[应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于XML的web41 service接口,并在客户端采用JavaScript处理来自服务器的响应。因此在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快的应用。同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。Ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。就像DHTML应用程序那样,Ajax应用程序必须在众多不同的浏览器和平台上经过严格的测试。随着Ajax的成熟,一些简化Ajax使用方法的程序库也相继问世。同样,也出现了另一种辅助程序设计的技术,为那些不支持JavaScript的用户提供替代功能。  对应用Ajax最主要的批评就是,它可能破坏浏览器后退按钮的正常行为。在动态更新页面的情况下,用户无法回到前一个页面状态,这是因为浏览器仅能记下历史记录中的静态页面。一个被完整读入的页面与一个已经被动态修改过的页面之间的差别非常微妙;用户通常都希望单击后退按钮,就能够取消他们的前一次操作,但是在Ajax应用程序中,却无法这样做。不过开发者已想出了种种办法来解决这个问题,当中大多数都是在用户单击后退按钮访问历史记录时,通过建立或使用一个隐藏的IFRAME来重现页面上的变更。(例如,当用户在GoogleMaps中单击后退时,它在一个隐藏的IFRAME中进行搜索,然后将搜索结果反映到Ajax元素上,以便将应用程序状态恢复到当时的状态。)一个相关的观点认为,使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中。该问题的解决方案也已出现,大部分都使用URL片断标识符(通常被称为锚点,即URL中#后面的部分)来保持跟踪,允许用户回到指定的某个应用程序状态。(许多浏览器允许JavaScript动态更新锚点,这使得Ajax应用程序能够在更新显示内容的同时更新锚点。)这些解决方案也同时解决了许多关于不支持后退按钮的争论。进行Ajax开发时,网络延迟——即用户发出请求到服务器发出响应之间的间隔——需要慎重考虑。不给予用户明确的回应,没有恰当的预读数据,或者对XMLHttpRequest的不恰当处理,都会使用户感到延迟,这是用户不欲看到的,也是他们无法理解的。通常的解决方案是,使用一个可视化的组件来告诉用户系统正在进行后台操作并且正在读取数据和内容。一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax;用JavaScript作的Ajax引擎[10],JavaScript的兼容性和DeBug都是让人头痛的事;Ajax的无刷新重载,由于页面的变化没有刷新重载那么明显,所以容易给用户带来困扰――用户不太清楚现在的数据是新的还是已经更新过的;现有的解决有:在相关位置提示、数据更新的区域设计得比较明显、数据更新后给用户提示等;对串流媒体[11]的支持没有FLASH、JavaApplet好。41 近几年,社交网络的研究引起学术界越来越多地关注,研究内容包括社交网络的拓扑分析、社会化推荐(SocialRecommendation)、网络社区发现、社交网络中的信息传播等,也取得了一些成果。社交网络开发的Ajax设计模式之Lightbox,Lightbox的效果类似于WinXP操作系统的注销/关机对话框,除去屏幕中心位置的对话框,其他的区域都以淡出的效果逐渐变为银灰色以增加对比度,此时除了对话框内的表单控件,没有其他区域可以获取焦点。Lightbox的作用则相当于从前只在IE中被支持的"ModalDialog";现在在FireFox也可用window.open(url,name,"modal=yes");来实现同样的效果。使用"ModalDialog"将限制用户的操作于弹出的对话框中,只有完成设定好的操作后方才关闭。在一些逻辑敏感的应用中强制吸引用户的注意力以防止用户的误操作导致程序逻辑淆乱。社交网络中Ajax技术应用,最近互联网上比较火热的话题当然是关于社交网络的应用,其中AJAX又是社交网络的核心之一。AJAX[12]是AsynchronousJavaScriptandXML的缩写。它并不是一门新的语言或技术,它实际上是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用,它包括:使用XHTML和CSS[13]标准化呈现;使用DOM实现动态显示和交互;使用XML和XSLT进行数据交换与处理;使用XMLHttpRequest进行异步数据读取;最后用JavaScript绑定和处理所有数据。Ajax的工作原理相当于在用户和服务器之间加了—个中间层,使用户操作与服务器响应异步化。这样把以前的一些服务器负担的工作转嫁到客户端,利于客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约ISP的空间及带宽租用成本的目的。二、研究的基本内容与拟解决的主要问题软件是用来建立自己与他人以及他人与他人之间的网络联系,其中包括用户如何进入系统,与其他用户取得联系、保持联系等。在这过程中,对用户之间保持联系的方式进行简要的归纳,使用户之间可以方便快捷的进行交互。其具体功能如下:1.界面部分用户端功能(1)用户注册和登录用来进入交互平台,是取得进入系统的凭证和所需的操作。(2)电子相册41 是保持用户之间联系的方式,可以让你的朋友看见你的瞬时记录,尤其是美好的时刻。(3)日记管理  可以让用户彼此之间了解对方的点点滴滴,可以使彼此之间深入了解。(4)向朋友打招呼 通过此功能可以通知你的朋友,你关心他或者告诉他无处不在的问候。(5)取得和管理联系用来和自己想交流的用户之间的交谈聊天,增进彼此的友谊。(6)文件共享方便用户之间的信息传递,可以及时了解对方的信息。2.交互性方面:(1)用户查找功能通过此功能,可以确定该系统内有无查找的用户。(2)用户添加功能通过此功能,可以添加你想交流的用户,可以促进你的交流空间。(3)用户分组功能根据需要,可以按不同类别为你的用户进行分类,可以快速知道该用户的属性。3.通过Ajax技术,在网页上添加除了好友列表外的用户讨论组(即QQ群类似)功能。4.后台管理界面(1)确定注册者用户及其关系可以明确用户彼此之间的各种关系以及属性。(2)管理用户之间的详细信息可以查看各用户的基本信息,例如,账号,性别,年龄等。三、研究的方法与技术路线、研究难点,预期达到的目标(针对研究方法、技术路线、研究难点、预期目标分别撰写)41 研究方法和技术路线:社交网络是当今快速发展的互联网的一种新应用,是继电子邮件、论坛和即时通讯后一种新的网络交流方式。社交网络为个人提供了一个信息发布、与他人交流的平台。用户通过社交网络可以方便地用文字、链接、图片等建立起个性化的空间。社交网络的发展呈现出个人化、交互化、商业化、媒体化等特点,在经济、教育等领域中产生了巨大的影响。由于生活中对社交网络的需求,也要求我们采用新的知识去发展它,让它成为跟方便、更快速的实现用户之间需要的交流。通过对主流社交网络系统进行了分析,发现它们有部分存在更新速度慢、服务器端负担重、交互性差、表现能力单一等缺陷,基本上停留在静态展示日志和图片的阶段。然而Ajax技术具有异步通信、响应速度快、动态效果丰富、交互能力强等优势。利用此技术来开发社交网络,能够克服上述弊端。对Ajax的开发模式及其核心技术进行系统的研究,因此采用Ajax技术来实现一个简单的社交网络系统。在系统实现中,详细根据用户的需要,添加相关的用户界面和交互功能。用户界面:用来进入交互平台的用户注册和登录;让你的朋友可以看见你的瞬时的记录电子相册;让你的朋友知道你的点点滴滴的日记管理;可以通知朋友你关心或者提醒他的向朋友打招呼;用来和自己想交流的用户交流;取得和管理联系方便用户之间的信息传递的文件共享等功能。交互性方面:确定有无该用户的用户查找功能,可以添加你想交流的用户的用户添加功能,按不同类别为你的用户分类的用户分组等功能。根据这些功能,可以发现Ajax技术开发的Web应用在可用性和用户体验方面明显优于传统的Web应用。开发工具:jsp,java,javascript,mysql等运行环境:Windowsxp技术路线:Ajax即“AsynchronousJavaScriptandXML”(异步JavaScript和XML),Ajax并非缩写词,而是由JesseJamesGaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术。主要包含的技术,基web标准(standards-basedpresentation)XHTML+CSS的表示;使用DOM(DocumentObjectModel)进行动态显示及交互;使用XML和XSLT进行数据交换及相关操作;使用XMLHttpRequest进行异步数据查询、检索;使用JavaScript将所有的东西绑定在一起。基web标准(standards-basedpresentation)XHTML+CSS的表示:XHTML语言是目前最流行的网页制作语言之一。它是在HTML(超文本标记语言)基础上应用XML的更加规范的语言。相对于HTML,XHTML语言具有更加规范、简洁的特点,同时具有更好的扩展性。在W3C组织的推广下,XHTML语言已经成为Web标准的一个重要的组成部分。很多大型的门户网站和商业站点都已经使用XHTML语言进行了重构。XHTML语言已经成为Web技术的发展趋势,并将会继续领导Web技术的潮流。随着Web技术的不断发展和成熟,HTML语言的弊端也变得越来越明显。同时随着Web41 2.0技术的提出,越来越多的Web技术需要依赖XHTML语言。XHTML语言已经成为网页制作者必须要掌握的语言之一。使用DOM(DocumentObjectModel)进行动态显示及交互:DocumentObjectModel(DOM)是一个跨平台的,与语言无关的约定,用于代表在HTML,XHTML和XML中的对象,以及与这些对象进行交互。使用DOM可以允许程序和脚本动态地访问和更新文档的内容,结构,和样式。文档还可以被DOM进一步地进行处理,处理之后的结果可以被纳回展现页面上。也就是说,通过DocumentObjectModel,我们实现了一种模型,在这个模型中,文档或者页面是包含对象的(element,link等等),而且这些对象可以被操纵.即,你能够添加,删除,修改element,修改element的内容,或者添加,删除,修改一个属性。你可以得到文档中所有H1元素的列表,或者所有含有属性值为CLASS="foo"这样的元素。使用XML和XSLT进行数据交换及相关操作:XML(ExtensibleMarkupLanguage)即可扩展标记语言,它与HTML一样,都是SGML(StandardGeneralizedMarkupLanguage,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。XSLT是扩展样式表转换语言(ExtensibleStylesheetLanguageTransformations)的简称,这是一种对XML文档进行转化的语言,XSLT中的T代表英语中的“转换”(transformation)。它是XSL(Extensiblestylesheetlanguage)规范的一部分。XSLT是一种用于将XML文档转换为XHTML文档或其他XML文档的语言。使用XMLHttpRequest进行异步数据查询、检索:实现Ajax的基础是与服务器之间的通信层。执行这种通信最完善的选择是JavaScript的XMLHttpRequest对象。最初,Microsoft设计XMLHttpRequest是用来实现在IE环境中用JavaScript载入XML文档的。虽然其名字中有XML,但XMLHttpRequest实际上是针对JavaScript的普通HTTP客户端。基于此,JavaScript可以发起GET或POST类型的HTTP[15]请求(对于POST请求,可以将数据用所选择的格式发送给服务器)。XMLHttpRequest的主要限制是浏览器的安全沙箱,它只能发起HTTP(S)请求(例如指向文件的URL就是不能实现的),并且只能够向和当前载入页面处于同一个域(即域名相同)的目标页面发送请求。虽然XMLHttpRequest只提供了一个很小的API,它只提供了少数的方法和属性,但对于不同的浏览器仍然有区别。这些区别主要表现在事件处理和对象实例化方面(在IE41 中,其实际上是一个ActiveX对象),因此与其打交道并不困难。在以下关于XMLHttpRequestAPI的概述中,将使用Mozilla中实例化XMLHttpRequest的语法。XMLHttpRequest之所以成为Ajax通信中最常用的方法,是因为它提供了两个独特的功能。第一个功能是用来载入新内容的,它无需对内容做任何修改,这使得将Ajax融入常规开发模式中更为简单。第二个功能是通过JavaScript发出同步调用。同步调用在完成之前,会停止所有其他操作,虽然这不是经常使用的选项,但对于在继续后续操作之前必须完成当前请求很有效。使用JavaScript将所有的东西绑定在一起:javascript事件的绑定,可以使得客户端的JavaScript有机会被激活,并得以运行。在一个Web页面装载之后,运行脚本的唯一方式,就是响应系统或者用户的动作。研究难点:用户注册:新来用户注册,输入新用户的基本信息。修改用户:修改用户的基本信息。注销用户:删除用户的所有信息。用户之间的联系:电子相册:了解用户的瞬间的美好记忆。日记管理:理解用户的内心世界。文件共享:方便用户的消息交流。用户的管理:查找:确定该用户的存在性。分组:确定用户间的关系。数据管理:用户关系:确定用户之间的属性。用户基本信息:保存和显示每个用户的基本信息。预期达到的目标:(1)功能齐全:1)前台和后台系统联系密切,可进行一体化管理。41 2)前台系统可包括用户的基本操作(注册,登录,联系等)。3)后台系统包括保存用户信息,响应前台操作请求等。(2)操作简单:1)考虑操作的简单方便,界面直观易懂。2)操作简单并不是功能简单,功能包括社交网络的基本操作。3)操作过程简洁,数据保存形式可行。(3)用户界面友好:1)系统采用Windows标准图形界面,屏幕美观,操作简单易学。2)对所有数据输入进行完整性和合法性检查,尽量减少操作错误。3)系统的可操作性强,界面显示简洁。4)用户进行的基本操作,简单,高效,可行。四、论文详细工作进度和安排第七学期第17周至期末:熟悉设计任务相关知识,软件环境和开发工具;第八学期第01周至第03周:总体设计,撰写论文(设计)提纲;第八学期第04周至第11周:详细设计;第八学期第12周至第13周:完成应用软件系统的设计,完成毕业论文(设计)文档;第八学期第14周:完善毕业论文(设计)文档,完成答辩准备工作;第八学期第15周:毕业论文(设计)答辩。41 二、主要参考文献[1]JesseJamesGarrett.ANewApproachtoWebApplications,February18,2005[2]卜维丰、丁卫颖、付瑞锋等编著,Ajax技术应知应会90题,电子工业出版社.2008(5)[3](美)艾可恩|译者:徐锋//陈宗恒,深入理解Ajax:基于JavaScript的RIA开发,人民邮电出版社,2007(9)[4](美)阿斯利森,(美)舒塔编著.Ajax基础教程.金灵等译,人民邮电出版社,2006(6)[5]侯利军编,精通Web标准网页布局:XHTML+CSS+JavaScript;人民邮电出版社,2007年[6](英)JeremyKeith编,杨涛王建桥杨晓云译,JavaScriptDOM编程艺术作者,人民邮电出版社,2007年1月[7]黄孝;XML文档与关系数据库的数据转换研究[J];安庆师范学院学报(自然科学版),2006年02期[8]NicholasC.Zakas编,曹力张欣等译,JavaScript高级程序设计作者,人民邮电出版,2006年11月[9]李宁,人人都玩开心网:ExtJS+Android+SSH整合开发Web与移动SNS,电子工业出版社,2010[10]征服Ajax+Lucene构建搜索引擎,李刚,宋伟,邱哲编著.北京:人民邮电出版社,2006[11]李海燕,丛培岩编,动态影像与宽带流媒体应用作者,中国轻工业出版,2007年1月[12]贯通AJAX+PHP+DreamweaverCS3动态网站开发,陈锋敏,罗田,李颖智,电子工业出版社,2008[13]DavidSawyerMcFarland编,TheMissingManual,O'ReillyMedia,Inc.2007年9月[14]VikramVaswani著,徐小青、路晓村译;MySQL完全手册,电子工业出版社,2004年11月[15]侯志荣,吕振肃.基于HTTP协议的文件远程存取方法研究[J].计算机应用,2003,(06)41

    当前文档最多预览五页,下载文档查看全文

    此文档下载收益归作者所有

    当前文档最多预览五页,下载文档查看全文
    温馨提示:
    1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
    2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
    3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
    4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
    关闭