个性化音乐推荐系统设计与实现_第1页
个性化音乐推荐系统设计与实现_第2页
个性化音乐推荐系统设计与实现_第3页
个性化音乐推荐系统设计与实现_第4页
个性化音乐推荐系统设计与实现_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、个性化音乐推荐系统设计与实现摘要21 世纪是信息化时代,随着信息技术和网络技术的发展,信息化已经渗透到人们日常生活的各个方面,与人们的日常生活早已建立了离不开的联系。对网络音乐服务来说,不管是音乐下载服务,或者是网络音乐电台服务,都需要用到优秀的内容推荐系统去辅助整个系统。个性化音乐推荐系统是目前最流行的应用方法之一。同时音乐成为重要的媒介与朋友交流文化,所以很多 SNS 应用当中将音乐服务添加到里面。本系统采用 SSH 框架组合进行设计,基于 Java Web 技术,系统使用 UML 建模。本系统的功能模块主要包括:音乐上传、单曲管理、个人信息维护、收集歌曲信息、音乐检索以及系统推荐等。音乐

2、上传利用 JavaScript 脚本定义了一个函数,单曲管理在 action 中定义一个方法,系统推荐是利用协同过滤算法来进行的。整个系统主要实现了从用户注册和登录、检索音乐到收听音乐、评分音乐, 个性化推荐的整个音乐系统,管理员可使用系统后台对音乐歌曲信息进行修改、会员信息修改、系统推荐等进行有效的管理。很大程度上提高了对音乐管理的效率,符合了广大用户们的基本需求。关键词:SSH 框架,音乐系统,协同过滤,MVC 模式DESIGN AND INPLEMENTATION OF PERSONALIZED MUSIC RECOMMENDATION SYSTEMAbstractThe 21st ce

3、ntury is the era of information, with the development of information technology and network technology, it has penetrated into every aspect of daily life, with people in daily life has been inextricably linked to thethe Internet music service, whether it is music download service, or network music r

4、adio service, all need to use the excellent content recommendation system to supportthe whole system. Personalized music recommendation system is one of the most popular applications. At the same time music has become an important medium of communication with friends culture, so many SNS application

5、s when the music services added to the inside.The system uses a combination of SSH framework design, based on Java Web technology,system used UML modeling. Site function modules include: Music upload, music management,personal information maintenance, collecting music information, music search and s

6、ystem recommend.The entire site is simple, user-friendly, flexible and practical. The main achievement of the user registration and login, retrieve music to listen to music, the whole comment is called online music listening processes, and system administrators can use the background information on

7、the goods, membership information, message information, and effective management. Greatly improving the efficiency of music management, in line with the needs of customers.Keywords: SSH Framework,Music System,Collaborative Filtering,MVC Pattern目录1 绪论1项目背景1系统开发的意义2国内外音乐系统现状3全球音乐系统系统发展情况3中国音乐系统发展现状3网络

8、音乐系统市场发展趋势42 技术准备6Java Web6Servlet 技术6JSP 技术8JSTL 标签9JSP 自定义标签9Filter 过滤器10MVC 模式11Spring 框架12AJAX 技术123 系统分析与设计14系统简介14系统框架设计14功能需求15面向管理的需求定义16面向体验的需求定义17面向维护的需求定义18个性化音乐推荐系统设计21音乐上传设计22单曲管理设计22收集歌曲信息设计22音乐检索设计22音乐推荐设计23数据库设计23数据库概念结构设计(E-R 图)23音乐推荐系统数据库表设计254 系统技术实现30音乐上传功能的实现31收集歌曲信息功能的实现32单曲管理功

9、能的实现33播放功能的实现35下载功能的实现35音乐推荐功能的实现36所用数据表37实现过程375 总结41参考文献43致谢45译文及原文461 绪论 项目背景信息技术改变了了人们的生活方式,是当今信息化时代便捷人们生活的一项伟大创举。在生活节奏越来越快的今天,人们对娱乐便捷的需求也越来越强烈。日益发展的网格技术与信息技术,各种音乐推荐系统也是逐渐应运而生。用信息技术与互联网技术相结合的音乐网站,其便利性、数据存储安全性、共享性、数据容量等,明显优于传统的磁带与 CD。计算机科学技术日益发展,它早已深入到人类社会的每个角落里,而且发挥着越来越不可代替的作用,利用传统方式的存储数据资料的方式已经

10、逐渐离我们而去。设计本系统的目的是为了改善那些原有网站的的缺点,为用户提供一个使用更好更便利的在线音乐平台系统,并且在协调不同的用户偏好方面也可以做的更好。此外,系统能提供给管理员一个清晰简明的界面,合理安排音乐分类信息, 并根据用户的要求和信息;根据用户的某些特点,为用户提供一些更能产生共鸣的音乐。自古以来,音乐就一直伴随着人们的日常生活,古有笙箫唢呐,今有吉他萨克斯,如今人们听音乐大多通过手机、音乐播放器,或是直接在电脑上在线收听, 连 mp3,mp4 都很少有人使用。人们也在不断地对音乐的形式进行创新和发展, 21 世纪初,人们还通过磁带或是光盘收听音乐,而今天数字音乐以遍及全球, 人们

11、大多通过互联网来收听音乐,换句话说,互联网是今天最流行的数字音乐的音乐介质和最大载体。Java 技术是在 Web 开发领域中,表现极其出色的技术之一,由于在 Web 开发领域中的杰出表现,Java 技术近年来的发展非常迅猛,越来越多的网站使用Java 进行开发。例如众所周知的淘宝网,随着就业务规模的不断扩大,php 架构有些不能适应现在的用户需求,所以淘宝高层曾经考虑过将淘宝网转型成为Java 平台架构,这无疑是对 Java 技术的一种巨大的肯定。在中国交通领域中,有许多在线购票网站,首当其冲的就是国家铁道部的 12306 网站,它隶属于国家机关,对技术的要求十分高,就连如此重要的网站也是使用

12、 SSH 框架开发的,而SSH 框架是隶属于 Java 平台。虽然有许多重要且成功的网站都是使用 Java 技术进行开发的,但由于 Java 技术过于复杂等原因,现有音乐网站多是通过 php 等其他语言进行编写的。此外, 这些音乐网站也几乎没有将最新的 HTML5 标准适用于网站中最重要的音频解码方面,而仍使用 Windows 自带的解码控件,这节省了网站开发的难度,但却十分不利于 Android 和 iOS 端的手机用户在该网站上获得良好的音乐体验。系统开发的意义此系统使用 JAVA WEB 技术, 采用 SSH 框架和 MYSQL 数据库作为工具进行开发解决方案,实现了 B/S 模式的个性

13、化音乐推荐系统的设计。利用 web 服务器和客户自己的浏览器,为用户提供在线音乐系统平台,通过浏览器在网站上直接检索音乐、收听音乐、对音乐评分等,这些功能可以让用户得到更好的音乐体验,让用户在一天 24 小时的时间内都可以在在线音乐系统中收听自己喜欢的音乐。网站的规则是根据目前商业网站的成熟规则进行设计的,主要功能为网上在线音乐收听,再加上留言等功能,此外能提供给管理者一个简单的界面,可以合理安排音乐分类信息,并根据用户的要求和信息;根据用户的某些特点,为用户提供一些更能产生共鸣的音乐。是一个综合性在线音乐系统网站。由于 Java 平台技术在当今时代已经逐渐取代 php 等其他技术成为 Web

14、 开发的主流,而且通过 SSH 框架对 Web 网站进行编程开发的案例也更多更好,以此为背景,通过学习 SSH 框架,进行一个音乐网站的设计具有非常重要的意义。对 Java 平台技术加深深刻理解的最好方法,便是学会 Hibernate ORM 框架的映射关系维护和加载策略,在学会这个技术后,对使用 Spring 的基本整合配置对系统架构优化进行掌握和了解,在有了一定的技术基础后研究 MVC 思想(Struts 框架)实现及标签库的使用方法,有很多音乐网站在页面复用方面并没有重点进行研究和开发,而本音乐网站在此方面进行了很多的研究并达到了很高的复用标准,这是对充分理解软件工程的复用思想的很好体现

15、,在充分理解了复用思想后,对网站的开发提供了许多实践经验;如何设计并实现一个网站特有的音乐播放器是网站开发的重点之一,最终决定使用 JavaScript/HTML5/CSS 和对细小的图片进行素材处理来进行开发, 实现一个原创的音乐播放器,可以很好地帮助流媒体空间的跨平台开发;根据用户需求,要求网站在设计模式中必须具有开闭原则(对扩展开放,对修改关闭), 在实现开闭原则的方法上,网站决定通过码表实现数据字典扩展功能从而完成这项技术要求。(1) 在软件工程领域中设计理论和方法来分析个性化音乐推荐系统的发展过程中,使音乐网络领域在面向对象的方法研究中做出了实质性的贡献。(2) 个性化音乐推荐系统使

16、视图模型抽象方法、建模过程、模型表示等多个点的出发构建建了科学和有效的系统。(3) 从个性化音乐推荐系统的结构,过程和可视化功能的统一建模语言 UML元素来看,个性化音乐推荐系统设计的可视化功能提供了方法和技术支持。国内外音乐系统现状在设计整个系统之前,我们对国内外的预测系统进行了调研,希望吸取它们的优秀设计功能。个性化音乐推荐系统市场需求,以不断探索自己的发展模式来看,在解决了现有的版权等一系列音乐市场的问题后,个性化音乐推荐系统市场规模必然会增大,与此同时的传统模式的音乐专辑的销售情况就变得不容乐观了。中国音乐系统发展现状个性化音乐推荐系统在中国,虽然一直被关注着,但它似乎并没有走出亏损的

17、底部。然而,尽管它一直在底部,但并没有阻止个性化音乐推荐系统服务供应商探讨行业的发展模式。 从 A8,发展到百度音乐和新浪音乐以及爱国者推出的音乐超市和腾讯 QQ 独特的平台和服务相结合,中国的音乐系统永不放弃在对个性化音乐推荐产业的热情。有声音认为,随着 4G 市场的到来,未来的音乐服务将有什么办法打造产业链,但如何以创新模式在 4G 时代,这些不确定因素决定了中国的个性化音乐推荐系统仍然需要很长的路要走。2012 年,中国在线音乐系统市场规模仅为 亿元,与传统唱片的市场规模不可相提并论。近年来预计,2014 年以后国内在线音乐系统市场将进入健康发展阶段,2013 年中国在线音乐系统市场规模

18、超过 5 亿元,年增长率超过 60%,预计 2014 年将达 亿元。盗版一直是中国音乐市场的一个很大的敌人,它严重影响着在中国音乐的发展,2014 年,中国个性化音乐推荐系统的市场规模仅仅是亿元。近年来,政策调控加大,利益的各项业务间的合理有效分配在产业链,有效政策法规的颁布和实施,将对中国的在线音乐系统市场产生积极的影响。预计 2017 年个性化音乐推荐系统市场之后将进入良性发展阶段,2015 年中国音乐推荐系统市场规模超过 5 亿人民币,超过 60的年均速度增长,预计在 2016 年将达到亿的市场规模。网络音乐系统市场发展趋势网络开始成为释放原创音乐的重要途径。 2001 年 3 月 6

19、日 0 时,MP3 格式的中国第一个网络歌曲出现在人们的生活空间中,开始了音乐网亮相的序幕。经过 10 多年的发展,今天的互联网和移动互联网已成为唱片公司的歌曲和视频发布推广的主要路径,网络首发的歌曲也成为在线音乐服务提供商吸引用户,用户聚集的重要手段之一。网上商店已经成为最新的无线音乐下载的亮点之一。国际知名的 apple 公司开发了在线应用程序商店模式,google,blackberry,samsung 等厂商纷纷跟进, nokia,motorola,lenovo 等移动终端运营商已经投入巨资,试图开辟属于自己的一片天地。中国移动,中国电信,中国联通等通信运营商,也开始建立自己的在线软件商

20、店。社区网站的音乐带来的变化和方式转变。人人网,赛我网等快速发展的社交阶层网站的代表,嵌入式网络音乐播放器插件和用户分享,口碑传播模式,以促进音乐的网络传输改造,让中小型 CD 公司和非主流创作者可以更容易地传播他们的作品。社区网站的粘贴性和互动性将带来互联网音乐传播的巨大变化。互联网音乐将从一个简单统一向个性化发展。互联网音乐服务的形式已经从纯粹的音乐内容,发展到现在的提供音乐共享交换阶段。更多的网友不满意被动地听音乐,而是热衷于分享。在未来的网络音乐将发展到精密推荐音乐的阶段,用户需要实现智能网络音乐内容提供商推荐音乐。该网络音乐内容服务提供商和运营商提出了更高的要求,用户需要准确识别的行

21、为,和智能地为用户提供分类服务。音乐云将成为热门的服务,未来尚不明确。A8 音乐在 2011 年年初提出的音乐云服务的理念,开始了中国网络音乐云前奏,其他厂商纷纷效仿。所谓“云音乐”,简单来说是通过音乐软件的用户可存储在云音乐内容中的各种设备,如移动电话,个人电脑和电视的播出,共享,而不需要用户再耗时从计算机内存中拷贝到其他终端设备。2 技术准备本系统中的设计部分主要使用 JAVA WEB(SERVLET、JSP 自定义标签、JSTL标签等)开发技术;对于系统的业务控制层我们使用 STRUCTS2 框架实现软件设计 MVC 思想中的业务的控制流转;本系统的数据持久层使用 HIBERNATE 框

22、架进行系统托管;在系统架构方面,本系统使用 WEB 开发中常用的 SPRING 框架。如下章节将对上述关键开发技术进行必要的阐述。Java WebJava 技术中最为核心的技术就是 Java SE1(Java 2 Platform StandardEdition),Java SE 技术多被用于企业开发 Java 应用程序。随着计算机技术的发展 Java 开发技术在互联网得到了极大的发展,目前来看来说是应用最为广泛、开发技术占有率最高开发技术,当我们掌握了 Java SE 的主要内容后,面向 Web开发时主要使用的是 Java EE,Java EE 是 Java Web 的主要开发技术。Web

23、开发技术主要有两个最为重要内容:客户端(CLIENT)和服务器(SERVER) 端。Java Applet 是 Java 客户端的应用之一,Java Applet 实际应用中使用得相对来说较少;对于服务器端的应用来说却显得异常丰富,最为人们熟知的如SERVLET 技术、过滤器、JSP 自定义标签等,下文中将详细介绍这些技术。Servlet 技术随着动态页面技术在上个世纪末开始流行,动态页面技术为 Web 开发技术带来了一次成功的大变革,它不仅极大的节省了人力成本,使得开发人员专注于静态页面维护的工作转移到如何使页面更加高效上来。对于动态展示的 Web 应用程序可以根据来自使用者的不同页面请求,

24、依据不同请求动态地返回所需要的结果集。我们称之为公共网关接口程序CGI,而这是一种用于系统产生动态页面的程序代码。实现页面的动态输出功能的公共网关接口程序是运行在系统的服务器端, Java 开发语言可以用来编写绝大部分的 CGI 程序,但是 Java 程序编写的 CGI 执行效率相对来说较低。因为要执行 Java 程序编写的 CGI 程序,不仅要在操作系统中运行 CGI 程序,还必须在操作系统中运行 Java Virtual Machine,Java 虚拟机,首先要在操作系统中运行 Java 虚拟机,然后才能在 Java 虚拟机中执行Java CGI 程序,对于操作系统来说资源的浪费是非常大的

25、。而 CGI 程序是运行在服务器端的程序,其执行效率是系统管理者非常关心的问题。因为CGI 技术存在上述的弊端,也为了有效的解决CGI 的执行效率问题,Java所属的公司 SUN 公司又推出了一套 SERVLET 技术规范2。SERVLET 的本质是一种改进之后的 CGI 程序接口,引入 SERVLET 的主要目的就是为了减少系统的资源消耗,减少对 JVM 的依赖和不必要的频繁交互性操作,从而从资源消耗方面来提高程序效率。SERVLET 技术对于 CGI 程序的主要改进的地方有:SERVLET 运行所需资源较少,此时操作系统只为 SERVLET 程序提供唯一的进程和 JVM 就可以满足程序运行

26、所需的资源;当客户有多次请求同一个相同动态页面的请求结果集, SERVLET 程序将只加载一个 Java 类来处理相同的请求;原始的 CGI 程序于 WEB 服务器交互方面不能直接进行有效的交互,SERVLET 程序可以于 WEB 服务器交互,而且SERVLET 程序还可以使不同程序进行共享数据。由此我们可以总结出,SERVLET 技术在应用程序的性能方面提升是明显的。SERVLET 技术处理 Java Web 客户断请求与数据的处理过程如图 2-1 所示。图 2-1 Java Web 请求响应过程二十世纪九十年代末期,Java 的所属 SUN 公司为了让 SERVLET 技术适应商业发展,建

27、立了一套有效开发 API 成之为 Java Servlet API,这就使得 SERVLET 技术具有了更好的跨平台性和较好的可移植性。在计算机科学技术的发展过程中任何一项技术都有自己的突出点和短板SERVLET 在生成客户请求的网页时,需要在 HTML 标签中嵌套上 JAVA 程序代码。这时如果 HTML 标签中发生个 CSS 样式细小的变化将导致 SERVLET 中的 Java 类不得不重新进行修改。而实际应用中 HTML 页面的展现必须与 Servlet 后台代码的侧重点不同,因而这种关联关系会让后台代码 Java 代码的维护非常麻烦。JSP 技术JSP3(Java Server Pag

28、es)最大的特点是将静态的 HTML 标签技术和动态的页面技术相结合,它不仅能够扩展SERVLET API 接口,还在继承原有技术上全面保留 Java API,在页面的展现形式上更加趋近于 HTML 技术。当我们从 JSP 页面文件的布局上可以非常清楚地看到它与 HTML 静态网页在布局格式上几乎一致,然而于 HTML 静态页面相比 JSP 文件中却可以在任意符合JSP 语法的地方嵌入Java 程序代码,这样就可以轻松的实现 SERVLET 程序逻辑。那么在 SERVLET 应用程序中不易被提取出来的 HTML 标签代码在 JSP 页面中能够以较为直接的显示方式展现给开发设计人员,这非常有利于

29、前台页面的有效的结构和展示的设计。如果对 TOMCAT 服务器的 Web 服务器下的 WEB/APP 目录中的 JSP 文件进行解析,可以发现每一个JSP 文件都将存在一个.java 的文件于 JSP 文件相对。而且当开发人员或用户对 JSP 文件的 HTML 标签进行部分修改,系统将没有必要重新启动 TOMCAT 服务器就可以直接刷新更改后的页面直接看到效果。这跟 SERVLET 技术有很大的区别,主要是由于被修改的静态代码对 Servlet 程序代码没有起到作用,这时我们就不需要重新对 JSP 进行编译,所以直接刷新浏览器即可重新显示页面的更改。当来自用户的请求系统中的某个 JSP 页面时

30、,Web 容器将会按照以下三个步骤进行处理:首先将开发人员编写好的动态JSP 文件通过Web 容器中的SERVLET 转换引擎转换成为*.java 源代码;然后通过 Java 虚拟机将*.java 源代码文件翻译成为机器能够识别的字节码文件(二进制);最后当客户端发来页面请求时,WEB 容器将按照已经编译好的二进制字节码文件进行处理,将生成的 HTML 页面代码反馈给客户端中显示。总的来说,JSP 技术是一种更接近于视图层、更加易于表现的Servlet 程序代码。二者在本质上并没有明显的区别,但是 JSP 技术为使用者和开发人员提供了丰富的标签库,例如 JSTL 标签、自定义标签等更加灵活便捷

31、的标签。JSTL 标签JSTL4全称为 JSP Standard Tag Library,JSP 标准标签库。由于这是基于 JSP 标准的标签库文件,与 STRUCT2 等标签库相比,JSTL 标准标签库所提供的功能虽然并不是特别丰富,但是 JSTL 标准标签库的适用性却非常广泛。JSTL 标签库主要为用户提供 CORE 标签库、FN 方法库、XML 标签库和 FMT 标签库、SQL 标签库等 5 个部分的内容。首先 CORE 标签库为开发人员提供诸如为了达到实现循环效果后台代码中可 以使用<c:forEach>标签的 for 循环语句;FMT 标签库主要用于控制标签库的标签格式化

32、输出等;FN 方法库提供多种方法来丰富开发者操作例如 fn:contains()、fn:split()等;开发者可以使用对数据库操作的支持 SQL 标签库对数据库进行操作,如使用<sql:transaction>标签来实现数据库中的事务管理等,但这些标签 在主流框架的冲击下,大多数项目环境中已经很少用这些标签;XML 标签库实现XML 相关的操作我们们可以使用<x:transform>等标签。JSP 自定义标签JSP 标准模版中提供了为用户自定义的标签库的功能供开发者使用,允许开发者编写其所需的标签而且能够并配置定义若干个标签,并以在开发过程中以标签库的形式对页面展示进

33、行合理配置管理。但是开发者在编写自定义标签的时候首先要实现 Tag 接口或者继承 TagSupport 类,这个使用方法是 JSP 为开发人员提供的开放 API。自从 JSP 5标准发布之后,用户只需要使用更加简单的SimpleTagSupport 类来重写 doTag(),这样就使得开发人员在自定义标签的时候更加快捷。JSP 标签库中的自定义标签 API 的组织结构如图 2-2 所示。图 2-2 JSP 自定义标签的 API 体系本系统项目中在处理实体对象数据原型的管理逻辑时,由于分页功能的使用率非常高,因而在本系统我们使用了 JSP 标准技术中的自定义标签库功能,定义了<emusic

34、:page>标签,<emusic:page>标签极大的减少了 JSP 前台页面中的重复代码,为代码维护和界面显示带来了极大的便利。Filter 过滤器Servlet API6代表着开源和开放的意思。2000 年,三星公司通过发布Servlet 规范,Filter 过滤器的功能得到添加,接下来的、版本又使其各项功能得了进一步的改进。在平时上网时,我们很少的会遇到这样一种情况,用户发的帖子中贴图显现出来的图文与本来所想的样子有很大的出入,出现这种情况最主要的原因就是贴子中的图片的来源网站用了“防盗链”的功能。而绝大多数的网站,在处理权限控制时(如在淘宝网购物必须具有已登录的账户)

35、,对于一些重要的操作过程都设置了审核这一环节(如检测到当前用户没有有效的登录状态,则拦截后续操作并转到提示页面)。这一类常用操作都是可以利用 Filter 过滤器来完成的。在这一项目中,我们想到有的用户会通过浏览器地址栏暴力探索等非常规方式登录还没有完成的 JSP 页面造成逻辑错误,从而恶性的利用 Filter 过滤器拦截,让用户不能登录访问目的网页。这归根到底是由于本项目所采用的方法是:页面只能用作后台间接反馈给用户的调用出来的结果,用户只能访问后台功能的各模块。所谓监听器,其实和 Java AWT/Swing7编程中的 Listener 是差不多的, 一旦触发某一个事件,用户所指定的程序逻

36、辑就会被立即执行,实现预设的目的。程序开发人员只要知道触发了一个事件所调用指定的 Listener 方法就行,而无需了解事件(Event)和监听器(Listener)是相互作用的过程。因此,只要把用户自己的业务逻辑编入所设定的方法程序中便可。监听器有监听对象属性变化、监听对象的创建与销毁、监听 Session 内的对象、监听 Session/Request/ServletContext 等对象等这几种种类。该项目中的使用 Listener 监听器做到了“单态登录”,如果处于登录状态, 而这一帐户又在此时于异地登录,先前的登录便会被注销。只要将业务逻辑编入到 HttpSessionAttribu

37、teListener 接口的attributeAdded()方法中便可实现这一功能。MVC 模式Model-View-Controller 可缩写为 MVC8。Java EE 中较为广泛的使用了这种分层的思想,主要特点就是提供对流程进行管理的用于控制导向的Controller,同时把业务逻辑和前台表现层隔离开来。MVC 思想最早是在 1982 年被提出来的,现在它作为差不多全部主流面向对像 Web 开发技术框架的标准,把业务逻辑和显示层进行分离,不但使得开发效率有所提升,而且具有部署快、可维护性高、耦合性低、重用性高等诸多优点。如果不使用第三方框加,采用的又是原生的Java EE 技术,我们一

38、般就会这样的判断:POJO、DAO、Service 等内容为 Model 层,JSP 为 View 层,Servlet 为 Controller 层,请参见图 2-3 所示。图 2-3 MVC 分层思想一般想思想意识中的 POJO(也称为 Bean、VO 或原型)不局限于 Model 层, 也不属于其他任何一层。比如在 JSP 页面当中的 EL 表达式一般情况下能通过“$”的形式调用到一个 POJO 内部的东西。当然这种调用是建立在 JSP API 基础之上的,绝非与人为设定的 Model 层产生相互作用。POJO 作为数据传递的媒介,将表数据以 POJO 的形式通过 Hibernate 等框

39、架到达 DAO 层,DAO 层再把POJO 原型对象与 Service 的交换。在 Struts 框架中的 ModelDriven 接口中有些时候 POJO 也会作为 Controller 层与前台交互的媒介。因此我们会错误的认为 POJO 与其他层是平等的,其实不然,把它归纳到Model 层中是非常不科学的,它只是MVC 分层中的一种通讯工具。但事事都无绝对性,这要看开发的人如何去理解和应用。Spring 框架Spring 框架是一功能强大的整合工具,一直是多框架的保护神,Spring 是由 Rod Johnson 于 2003 年创建并兴起,它为项目的解耦与新需求的扩展带来了很多方便,设计

40、的初衷是为了应对企业应用的复杂性,积极支持 Java EE,弥补了其臃肿、低效等不足之处。当然对传统的 Java EE 框架也是一种挑点。尽管 Struts 框架8充分的体现了 MVC 思想,但也带来局限性,Action 与DAO 层、Service 层过于紧密的耦合,这将对项目的需要变化转型产生消极的影响。这种情况下我们可以使用 Spring 间接的协调,使用 Spring 的 IoC 机制来配置管理并维护这种耦合关系。只有这样,Struts 的 Action 和 DAO 与 Service 才能不互相依赖,而是更好的互相配合工作了。一样的道理,Hibernate 也可以通过整合到 Spri

41、ng 中来获得同样的良好效果。虽然 Spring 框架中提供 MVC 模块,但暂时并没有使用它们,而使用的是Struts 2 框架,这主要是因为该项目中大量的采用了 Struts 2 标签库内容。AJAX 技术AJAX 指的是“异步的JavaScript 包括XML”(Asynchronous JavaScript andXML)。即在不需要等待服务器将结果返回就可以继续下面的业务逻辑,就是所说的“同步方式”。而传统的“同步方式”是客户端发出了一个请求,只有在服务器响应后,方可继续下一步的业务逻辑。比如我们平时在一个网站注册一个用户名,用户名输入后直接显示用户名是不是被占用,而不需要刷新页面或

42、者点击一控件。之所以这样,最主要的就是因为 onkeyup 或 onblur 等 HTML 事件触发了 AJAX 的回调函数,在 JavaScript 作用下,直接根据服务器的结果信息改变 HTML 代码内容,而不必刷新页面。XMLHttpRequest 对象是 AJAX 技术最核心的地方。常见的浏览器都支持 AJAX 技术,同时在不影响客户端当前的操作的情况下把数据通过一种简单的方式传递到服务器端。AJAX 对数据的传递一般采用高效的 JSON,但也习惯使用 XML 格式数据。3 系统分析与设计系统简介本系统的主要功有,首先是对系统中用户、播放列表、歌曲、歌手等相关数据进行整合并存入数据库中

43、,在需要时进行查询,并且还支持查看各类原型信息的查看、修改、删除等。通过本系统,用户可以很方便的了解到歌手的信息,以及专辑的信息,并且这些信息还可以保存在用的账户中,以便用户以后可以快速的查看。系统框架设计Struts 原本是 Apache 中一个项目,但是现在已经成为 java web 开发中一个非常流行的网络框架,如果开发者想要基于 Servlet 和 JSP 创建一个可扩展的应用,Struts 是一个不错的选择。而在后来的版本 Struts 中,是以 WebWork为核心,从而使得那些与 Servlet API 相关的可避免的依赖关系不出现在核心业务控制层,不仅如此,Struts 还提供

44、了更方便的 Validator、OGNL 等工具,并且还抛弃了不繁琐的 ActionForm。另外值得注意的一点是,一般软件的后续版本与之前本大同小异,没有什么根本的变化,但是在 Struts 框架中却不是这样,Struts 和 Struts 具有完全不同核心,而它们具有相同的名字完全是因为Struts 使用的广泛性。本项目便是基于 Struts 搭建,并且在设计中使用了MVC 模型,项目运行的逻辑如下:(1) 用户请求指定的 Action;(2) Action 根据参数等条件进行导向;(3) Action 调用指定的业务逻辑完成后台操作并准备前台数据;(4) 根据配置文件将带有结果数据的前台

45、页面反馈给浏览器。数据持久化框架(Object-Relative Database-Mapping, ORM)一个在很多场景下对数据的访问都要求极其严格的框架,与 Apache 的 iBatis 提供的半自动化方式相比,Hibernate 提供一种全自动化的数据持久化方案。在 Hibernate 中,通过相应的文件配置,我们可以实现相同的程序在不同的数据库平台下后可以正常运行,并且不需要做任何修改,而因此 Hibernate 也成为了 Java 中最为流行的数据持久化框架。使用通用 JDBC 编程,开发者需要编写大量的插入,更新,删除,选择等语句来操作数据库。但是,这些 SQL 语句往往因为数

46、据库平台的不同而变化,这使得程序的维护变得非常麻烦。在Hibernate 中我们可以使用 HQL 语句,根据HQL 语法和配置好的数据库类型,将不变的 HQL 语句随环境的不同而转换成不同的SQL 语句。JDBC 的缺点是,开发者必须关注数据库与 POJO 对象属性中的数据之间的映射关系,当多个 POJO 直接彼此带有关系映射时,该缺点更明显。因此可以通过合理的配置 Hibernate 使得自动的关联起表字段和类属性,自动维护单向或双向关系映射,那么开发者就可以很方便的对数据库进行操作。在本项目当中我们除了使用 Struts 来创建 Controller 层外,还用到了文件上传的功能。在 St

47、ructs 中我们只能使用 FormFile 类来上传文件,但是在Structs 中我们就可以直接使用对文件进行操作,从而使得文件上传更加简单。功能需求本系统的需求方向主要分为“面向管理”、“面向体验”与“面向维护”共三个方面。首先是面向管理,所谓管理就是指系统管理员在登录账户后可以对数据库中的各项数据进行增、删、查、改等操作;然后是面向体验,指普通用户或者没有账户的游客也可以在网站上搜索、播放、收藏自己喜欢的歌曲;而面向维护则指在后期的修改中开发者能最低程度的修改当前已有代码从而完成所需的功能。项目中的功能与具体需求方向之间关系概括整理如图 3-1 所示。图 3-1 功能模块与需求方向面向管

48、理的需求定义面向管理的需求定理主要是针对系统管理员,涉及一般用户的内容比较少,并且不涉及未登录的用户。在本项目当中我们对管理的定义为可以对数据进行添加、修改以及删除等操作,而一般的浏览、搜索或者播放歌曲并不归类在管理当中。当用户登录系统之后具有不同的身份,而根据不同的身份我们分配不同的权限,其中主要身份包括超级管理员、一般管理员、普通用户以及未登录用户几大类。从表面上来看,超级管理员和普通管理员没有什么区别,但在权限上还是有些差别,比如超级管理员在用户管理上的权限要比普通管理员大。“面向管理”的需求则是体现在系统的全局架构上,而并没有体现在任何一个单一的功能模块中。例如对系统架构解耦的要求,对

49、页面代码复用率的要求等。面向管理方向的功能需求归纳如图 3-2 所示。图 3-2 面向管理的需求定义面向体验的需求定义“面向体验”则是指主要操作是浏览、搜索或者播放等,而不涉及数据的添加、修改、删除等。在本节定义的功能中,大多数以游客的身份就可以完成。下面是需求定义图 3-3 所示。图 3-3 面向定义的需求定义面向维护的需求定义一个好的系统不仅要求界面的美观以及功能的完善,而且需要后期维护的方便,所以在系统设计时就应该考虑这些问题,程序代码之间不应该只是简简单单的堆在一起,而是应该定义好每个模块的功能,从而能使得整个系统结构更加清晰,同样的,代码的复用率也是评判一个系统健壮性的重要标准。本节

50、所讨论的需求定义则是为了提高系统健壮性、可扩展性和代码质量而设定的。下面是需求定义如图 3-4 所示。图 3-4 面向维护的需求定义这里列出的 8 条需求定义主要是为了整个系统的健壮性、逻辑安全性以及代码安全性,对于最终的功能上则没有什么影响,也就是说即使不使用 SSH 框架, 不进行任何代码的复用,整个项目还是可以正常实现并运行,不过在各方面的效率相对较低。(1) 前台 JSP 页面的复用在所有实现的代码当中 JSP 页面占了很大的比重,所以如果可以代码复用, 那么后期维护将会极其便利,在本项目中所采取的复用策略是:如果在布局和样式上有两个或者两个以上的页面相似,那么我们就考虑使用同一个页面

51、完成相应的功能。例如我们在设计页面的功能时发现,添加歌手信息界面和编辑歌手信息页面基本类似,不同就在于在添加歌手信息是表格里的内容都是没有值,而在修改歌手信息时,表格中相应的项都已经有值;另外一个不同就在于单击提交按钮后执行的操作不同;最后一个不同就是添加时歌手的 ID 值为空,为修改时歌手 ID 值不为空。所以当我们遇到两个页面在布局和样式上基本一样时,而只有在内容上有细微的差异,我们就考虑使用一个页面来完成两部分功能,而不是使用不同的页面去显示。而我们采取这种方法不仅仅是为了精简代码,更是为了后期维护的便利。例如,如果页面要添加新的功能或者更换布局风格,那么我们在复用代码之后, 就只需要修

52、改一小部分代码就可以完成要求的功能,而不是像复用之前需要去修改所有页面相应的内容。(2) 后台代码的复用后台也同样有复用的要求,这在软件工程理论中占有非常重要的地位。大致的策略为:如果一个 Java 类文件中的某些方法或部分代码可以脱离其所在环境而独立完成指定的功能,而这部分功能还有另外至少 1 处被使用的场景,那么就将这些代码提取出来供多个 Java 类文件共同调用。通常情况下,这种复用的代码都被放在*.util 包中。(3) 码表:可扩展性在我们的整个系统中,有很多部分都涉及到“静态列表信息”,比如在显示用户的所在地时,我们一般会选择 select 标签来实现选择的功能,但是在使用该标签是

53、要注意,我们不能直接将所有所在地的信息直接写入在代码当中,而是应该先将这些信息存在数据库中,在需要时再从数据库中读取。虽然在我们的项目当中这些信息基本不变,但是当项目应用到其他场景时, 例如其他国家的人访问了我们的项目,那么我们就需要添加相应的地址,若果所有地址信息都是直接写到前端,那么我们就要修改所有有关地址的页面,而如果我们将这些信息写入到数据库中,则只需要一条 SQL 语句即可添加新地址。码表是数据库中唯一的一张表,所有不同类型的静态列表信息都将存放在码表中,后台为前台加载信息时能够保证内容的动态性,通常我们使用 JSP 自定义标签来实现这个功能。(4) 系统安全性本系统的安全性应当分为

54、两个角度考虑:第一,密码的安全性。首先不应该在任何地方保存用户密码的明文信息,正确的保存方式应该是通过 MD5 或者其他单项散列函数进行加密之后存储,另外由于自定义安全控件技术上难以实现,所以用户的明文密码也应该只能停留在浏览器的处理阶段。因为我们知道,一旦保存的数据库遭到黑客攻击,那么用户的密码信息将会泄露,而很多用户在不同的网站上基本使用相同的密码,如果密码以密文保存,那么黑客也无法破解出原密码,而如果以明文保存,那么将会给用户的隐私信息带来严重威胁。第二,逻辑的安全性。在 Structs 框架中,后台的 Action 提供给前台所有的页面,而如果用户访问一个后台 Action 不存在的页

55、面时,那么将会发生逻辑错误。而为了避免这类错误的发生,提高用户体验,并且防止非法用户通过暴力枚举的方式遍历网页目录,本系统将会处理这种情况,保证逻辑上的安全性。个性化音乐推荐系统设计通过上面部分的需求分析的调差与研究将音乐推荐系统的功能设计如下图3-1 所示。音乐上传个性化音乐推荐系统单曲管理收集歌曲信息用户信息音乐检索音乐推荐图 3-1 个性化音乐推荐系统模块功能图* 音乐上传:管理员对音乐进行分类包括音乐类型、音乐风格、音乐地区还有歌手类型并上传音乐。* 单曲管理:可以将歌曲播放、下载并且可以对它进行评分。* 收集歌曲信息:收集每个歌曲的信息,比如收集歌曲的播放次数,评分后的歌曲的分数,歌

56、曲的类型和歌手信息。将这些信息放入数据库中对系统音乐推荐做准备。* 用户信息:新用户需要注册以后才能对音乐进行评分,并能查看、修改自己的登录信息。* 音乐检索:注册用户可以将进行系统内的音乐搜索操作。* 音乐推荐:系统将按照歌曲的评分进行协同过滤操后给用户筛选歌曲。音乐上传设计音乐上传功能:管理员对上传的音乐进行分类包括音乐地区的分类,音乐风格的分类,音乐类型的分类,歌手类型分类。下面是音乐上传功能的设计。管理员从管理员模块上传歌曲时从音乐地区,音乐风格,音乐类型,歌手类型中一一选择属性对该音乐进行描述,此时生成歌曲 id 和歌曲所对应的地区、风格、类型、歌手的名称并将它存入数据库。用户可以在首页看到音乐地区、音乐风格、音乐类型和歌手类型,将鼠标移动到各自的栏目就会发现所对应的属性,点击属性的话会出现属性所对应的音乐。单曲管理设计用户可以从系统首页进入音乐播放页面播放歌曲,并可以将音乐下载;管理员可以从管理员模块进入系统并修改音乐。收集歌曲信息设计收集歌曲信息:对每一首歌

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论