基于JAVABootstrapMySQL的图书推荐系统设计与实现毕业论文程序源码大家好今天给大家介绍基于JAVABootstrapMySQL的图书推荐系统设计与实现文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦文章目录基于JAVABootstrapMySQL的图书推荐系统设计与实现毕业论文程序源码1、项目简介2、资源详情3、关键词4、毕设简介5、资源下载6、更多JAVA毕业设计项目1、项目简介推荐系统是目前互联网中最常见的一种智能产品形式。由于网络中信息量的快速增长以及图书出版行业出版量的攀升人们需要一种办法来解决信息过载的问题。此外用户访问网络是为了获取信息但并不是所有的访问都有很强的目的性所以对于这些没有明确的目的的访问就需要智能系统把一些用户可能感兴趣的信息推送给用户。基于这些需求图书网站的推荐功能就变得非常重要。本文首先对图书推荐系统的发展历史做了介绍然后对开发图书推荐系统所需的项目管理工具Maven、Git、数据持久化工具MyBatisSpring MVC框架和Bootstrap前端开发框架进行了简单分析在此基础上设计并开发了一套基于Web的图书推荐系统展示平台主要工作可概括为四个方面。对图书推荐系统的结构进行了重新设计。主要是在Spring MVC框架的基础上将系统分为了三层Web层、服务与模块层、数据层并对每层的结构与需要完成的功能做了定义。基于MySQL数据库管理系统设计并建立了图书推荐系统所需的数据库该数据库的数据共分为三个部分原始数据、清洗后数据和用户数据。从便于操作和使用的角度出发设计了图书推荐系统的页面主要包括首页、搜索、展示、登录、注册等页面。对整个开发过程以及系统组成的三个主要类控制器类、模块类与视图类进行了分析。经过后期的数据库优化与功能测试系统与同类网站相比性能良好。2、资源详情项目难度中等难度适用场景相关题目的毕业设计配套论文字数27804个字70页包含内容全套源码配整论文3、关键词基于Web的图书推荐系统展示平台MVC框架Web系统设计4、毕设简介提示以下为毕业论文的简略介绍项目完整源码及完整毕业论文下载地址见文末。引 言图书推荐功能在图书馆网站图书销售网站以及图书分享网站中都占有很重要的地位。它可以根据长尾理论挖掘图书数据改善用户体验增加用户的粘性解决信息过载问题。本论文的目的就是要构建一个图书推荐系统的展示平台将图书信息以及推荐内容显示在页面之上。并且支持用户的注册登录用来提供数据使得推荐算法可以依照此数据来计算出用户喜好进而向用户推送推荐信息。在推荐系统领域最为成功的该属亚马逊网站在亚马逊的收入中有20%~30%的都来自于推荐系统。而在图书馆等非盈利性网站图书推荐系统也对优化用户的浏览体验以及均衡每本书的借阅率都有促进作用。系统后台是基于Java的Spring MVC框架与Tomcat服务器前台基于浏览器、HTML与jQuery页面展示技术数据库基于MySQL开源数据库。利用MVC框架可以方便地构建出健壮、扩展性强的应用。MySQL数据库作为最热门的开源数据库提供了完整的关系数据库支持与成熟的数据存储解决方案。浏览器展示技术使用户不需要在操作系统中安装独立的应用并且使得系统的访问不局限于某个操作系统适用面变得更广。系统提供推荐内容的展示图书排行的展示图书搜索图书详细内容展示用户登录注册等基本的图书推荐系统所具有的功能。界面使用Bootstrap框架布局对用户更加友好。整个系统通过实现一个轻量的框架来提供完整的图书推荐功能后续的功能可以方便地在此基础上扩展。相对于其它的系统有小巧、灵活的优点并且本系统全部采用开源软件因此几乎为零成本。在引用第三方库的过程中不对其源码进行修改减少耦合使得之后第三方库的升级也不会对系统有大的影响。系统在一台机器上部署并且在同一网段的另一台机器上访问测试后性能表现良好。1 文献综述如今推荐系统无处不在。在网上逛商城购物在音乐网站听歌在社交网站发表自己的感受以及分享照片网站服务提供商都会收集用户的访问记录以及用户的喜好对用户的行为进行分析并且根据用户喜好以及用户群体统计信息给用户提供相似物品的推荐以及广告推送进而增加商家的销量提高网站质量。一般认为推荐系统这个研究领域源于协同过滤算法的提出。从它的诞生到现在20多年中很多学者和公司对推荐系统的发展做出了重要的贡献。随着信息技术和互联网的发展人们逐渐从信息匮乏的时代走入了信息过载的时代[1]。而图书出版物等作为一个传统的信息载体在人类发展的过程中不断增多一些大的互联网公司与网络图书销售商比如谷歌、亚马逊等也一直在为图书的数字化做着贡献。从2004年谷歌宣布他的图书搜索服务之后到2012年共有两千万本图书扫描、经由光学字符识别并存储于数字化数据库中作为搜索数据[2]。这些数据为图书推荐提供了丰富的基础。本系统采用BS结构对数据库中的图书内容进行查询、处理对查询结果进行展示并且提供用户注册登录以及采集用户访问记录的功能。在服务器端采用Spring MVC框架与对象持久化技术对图书信息进行处理在客户端使用浏览器技术对数据进行展示与交互最终完成图书通过WEB平台展示、推荐与相关图书搜索的功能。1.1 课题背景1.1.1 图书推荐系统发展背景随着互联网的快速发展网络中的图书信息量迅速增长图书种类也日趋繁多用户通过互联网要获得自己感兴趣的图书文章需要花费越来越多的时间。由此催生了图书推荐系统。图书推荐系统的基本作用是依据用户的访问记录特定行为分析用户的喜好主动向用户推荐可能喜欢的图书与文献给用户供用户参考[3]。推荐系统满足了用户个性化的需求节省了用户搜寻信息的时间获得和用户喜好相关的最热门最新的图书。在许多商务网站社交网站中都使用推荐系统来向用户推荐商品。在线售卖领域亚马逊拥有最好的图书推荐系统。在过去的十多年里亚马逊投入了大量的精力去建立一个包含大众推荐和个人记录的高效个人推荐系统其最显著特点就是所有的推荐都建立在对顾客以往的浏览记录和购买记录之上[4]。亚马逊可以向用户精确的投放畅销书以及经典书推荐信息每月有评有畅销书排行榜通过简洁美观的介绍与醒目的导航引导读者阅读与购买。另外在畅销书的介绍中还有本书在相关的分类栏目中的排名并且有链接指向此分类的畅销排行榜读者可以方便的查询同类书中最畅销的书籍。在书籍介绍底端还有购买过此书的人还购买了的书籍购买的比例以及同类书籍的推荐信息。在首页还有促销书的推荐用于吸引没有明确目的而想要以优惠的价格购书的消费者。在经典书方面亚马逊推出年度畅销图书排行年度编辑推荐100本畅销书等手段依据惯性定律进一步推动图书的销售。其中排序规则还根据用户的评价人气、出版日期等迎合不同人的喜好。1.1.2 主要技术发展背景Spring框架是一个开源的应用框架基于Java平台的控制反转容器。第一个版本是Rod Johnson在他2002年十月出版的《Expert One-on-One J2EE Design and Development》书中发布的。第一次在Apache 2.0 license下发布是在2003年六月在2004年三月发布了第一个里程碑1.0版本。在2006年Spring框架1.2.6版本获得了Jolt productivity award和JAX Innovation Award。省略1.2 开展研究的意义图书推荐系统web平台用于支持图书内容的获取和图书推荐的展示。如果没有此平台那么图书推荐系统就无法收集用户行为统计用户喜好展示推荐结果以及实现推荐系统的原有意义[5]。任何一个推荐系统都需要网络或者客户端平台来展示[6]。而构建这样一个后台服务器与浏览器客户端共同协作展示的平台对于图书推荐系统具有重要的意义。1.3 论文研究内容本课题意图开发一套轻量、扩展性强、功能完善性能良好的图书推荐系统。系统的最终目标是实现对图书内容进行展示、查询、用户登录注册还有推荐信息的展示功能。用户通过浏览器与后台系统的Java Servlet、数据库交互完成展示、查询与用户管理的目的。研究的着重点在于通过现有流行的开源系统、框架来搭建轻量级的目标Web系统在实现过程中更注重于代码结构与开发方法所以并不追求功能的繁杂冗余。系统中数据来源于豆瓣数据的抓取不是本课题研究的内容。为了使数据适用于Web系统重新构建了表并对数据进行了二次清洗。由于是展示平台并不涉及图书推荐算法的实现与搜索功能的完善所以搜索结果由数据库查询获得。但是在开发过程中为图书推荐与社会化图书搜索预留了接口可以方便的加入这些功能。1.4 论文的组织结构第一章文献综述。先讲了课题的背景从图书推荐历史和技术发展史两个方面介绍之后介绍了开展研究的意义最后明确了研究的工作重点。第二章框架与工具介绍。对Maven、Git等项目管理工具Spring MVC、MyBatis、Bootstrap、jQuery等开发框架进行了介绍。第三章基于Web的图书推荐系统展示平台的设计。对此Web系统所用到的数据库结构、页面原型、模块组成、总体的功能进行了论述。第四章基于Web的图书推荐系统展示平台的实现。介绍了对数据的二次清洗、数据库的创建、数据的导入、工程的搭建、模块的开发以及测试等。并介绍了测试过程中做的一些性能优化工作。最后结论。对本系统的优缺点做了一个总结展望了一下未来的发展方向。2 框架与工具介绍2.1 Maven介绍2.1.1 Maven概述Maven是一个主要用于Java项目的自动化构建工具。Maven与Apache Ant工具具有相似的目的但是他们是基于不同的理念并且以不同的方式来工作。Ant还可以用来构建和管理C#RubyScala以及其他的语言开发的项目但是Maven原生并不支持这些。Maven项目由Apache Software Fundation托管之前是Jakarta Project项目的一个部分[7]。Maven使用XML文件来描述需要构建的软件项目、项目的依赖模块和组件、构建顺序、目录结构以及需要的插件。他具有预定义的目标来实现确切的任务比如编译源码并打包。Maven动态地从一个或多个库中下载Java库和Maven插件比如Maven 2 Central Repository并且将下载的内容保存到本地的缓存中。这个本地的下载缓存可以被本地项目更新公共的库也可以被更新。Maven使用基于插件的体系来构建他允许通过标准的输入控制任何的应用。理论上说这将允许任何人为任何语言来在这个平台上编写插件。实际上支持和使用除Java外其它语言的插件数量已经微乎其微。目前只有支持.NET框架以及一个C/C的原生插件还在被维护。2.1.2 Maven概念省略2.2 Git介绍2.2.1 Git概述Git是一个分布式的版本控制系统和源代码管理系统。它最初是Linus Torvalds为Linux内核开发而设计开发的从那以后Git就被许多其它的项目用来管理代码[8]。每个Git工作目录都是一个完整的仓库保存着完整的历史和全部的版本跟踪能力不需要依赖于网络连接或者一个中央服务器。Git是基于GNU General Public License version 2的开源软件。Git设计灵感来自于BitKeeper和Monotone。Git最初被设计成一个底层的版本控制系统引擎在它上方其他人可以编写前端比如说Cogito和StGIT。然而核心的Git项目最终变成一个可以直接使用的完整的版本控制系统。由于受BitKeeper的严重影响Torvalds故意地试着避免传统的方法最终实现了一个独一无二的设计。2.2.2 Git特性省略2.3 MVC模式与Spring Framework框架2.3.1 MVC模式MVC模式是软件工程中的一种软件架构模式把软件系统分为三个基本部分模型Model、视图View和控制器Controller。MVC模式的目的是实现一种动态的程序设计使后续对程序的修改和扩展简化并且使程序某一部分的重复利用成为可能。除此之外此模式通过对复杂度的简化使程序结构更加直观[9]。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。组件合作关系如图2.1所示。图2.1 一种典型的MVC组件合作方式模型Model“数据模型”用于封装与应用程序的业务逻辑和数据处理相关的方法。“模型”有对数据直接访问的权力例如对数据库的访问。“模型”不依赖于“视图”和“控制器”也就是说模型不关心它会被如何显示或是如何被操作。但是模型中的数据的变化一般会通过一种刷新机制被公布。为了实现这种机制那些用于监视此模型的视图必须事先在此模型上注册从而视图可以了解数据模型上发生的变化。视图View视图层能够实现数据有目的的显示理论上这不是必需的。在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能视图需要访问它监视的数据模型Model因此应该事先在被它监视的数据那里注册。控制器Controller控制器起到不同层面间的组织作用用于控制应用程序的流程。它处理事件并做出响应。“事件”包括用户的行为和数据模型上的改变。2.3.2 Spring MVC框架Spring Framework提供它自己的MVC web应用程序框架这并不是开发之初计划的。由于当时流行的Jakarta Struts web框架的设计很糟糕并且其他框架也有许多不足之处Spring开发者决定去编写他们自己的web框架。最重要的一点他们觉得在表现与请求处理层之间没有完整的分离并且请求处理层和模块层也没有完全分离。就像StrutsSpring MVC也是一个基于请求的框架。每个接口的目的是让Spring MVC用户能够清晰、容易的实现MVC框架的应用。所有的接口都是与Servlet API紧耦合的[10]。这个对Servlet API的紧耦合被某些开发者看做是Spring的失败它不能提供一个高层次的对基于web的应用的抽象层。然而这样耦合确保了Servlet API能够给开发者提供一个高度抽象的框架来使得开发变得容易[11]。Spring MVC框架围绕一个核心servlet来给控制器分发请求并且提供一些其它的功能来方便web应用的开发Spring的DispatcherServlet就是用来干这些的。它将Spring IoC容器完全集成在一起这样你就可以使用所有其它的Spring特性。Spring Web MVC DispatcherServlet的请求处理工作流如图2.2所示。DispatcherServlet是一种“Front Controller”设计模式的表现这种设计模式在许多其它的web框架中也很常见。图2.2 Spring Web MVC中的请求处理工作流高层省略2.4 MyBatis介绍MyBatis是一个在Java和.NET平台的持久层框架它将SQL声明与存储过程使用XML描述[13]。MyBatis是一个自由软件基于Apache License 2.0发布它的原名为iBATIS[14]。省略2.5 Bootstrap介绍2.5.1 Bootstrap概述Bootstrap是一个用来创建网站和web应用的工具集。它包含许多基于HTML和CSS的设计模板排版、表单、按钮、图表、导航、其他的界面组件以及可选的JavaScript扩展。它是GitHub上最流行的项目NASA和MSNBC网站都在使用此框架。Bootstrap有相对不完整的对HTML 5和CSS 3的支持但是它兼容所有的主流浏览器。从2.0版本开始它开始支持响应式设计。这意味着网站页面的视图设计根据设备的特点来动态的调整。Bootstrap是Twitter发布在GitHub上的开源软件。开发者可以参与项目并且对平台贡献自己的力量。省略2.6 jQuery介绍jQuery是一套跨浏览器的JavaScript库简化HTML与JavaScript之间的操作。目前是由 Dave Methvin 领导的开发团队进行开发。全球前10000个访问最高的网站中有59%使用了jQuery是目前最受欢迎的JavaScript库[15]。jQuery 是开源软件使用MIT许可证授权。jQuery的语法设计使得许多操作变得容易如操作文档对象、选择DOM元素、创建动画效果、处理事件、以及开发Ajax程序。jQuery 也提供了给开发人员在其上创建插件的能力。这使开发人员可以对底层交互与动画、高级效果和高级主题化的组件进行抽象化。模块化的方式使 jQuery 函数库能够创建功能强大的动态网页以及网络应用程序[16]。省略2.7 小结本章简要介绍了开发过程中用到的几个比较重要的工具与框架。在项目创建和最后的部署过程中Maven工具为项目的依赖的解决和编译打包提供了很好的解决方案。而在项目开发过程中Git工具为代码管理、版本控制以及进度统计都提供了很大的帮助[17]。本章还介绍了四种框架Spring MVC、MyBatis、Bootstrap和jQuery。前两者是后台框架提供了一系列的类与接口用于实现系统功能、简化与美化代码结构设计并提供了一些工具来方便开发者实现相应的功能[18]。后两者为前台框架简化了前台的开发过程提供封装好的方法来让前台交互更加方便界面更加友好。这四种框架为开发的核心框架它们极大的提高了生产率并且使最终的产品不仅内部结构而且外部表现都健壮、美观。3 基于Web的图书推荐系统展示平台设计3.1 系统总体设计3.1.1 总体功能描述本课题是要开发一套轻量级、功能完善的基于Web的图书推荐系统展示平台。利用此平台对图书信息进行展示与推荐对用户提供注册与登录功能。由于原始数据为从豆瓣依照网站网页结构抓取得来并不适用于系统直接读取于是需要将原始数据表格进行重新设计遍历分离所需数据存入新设计的表中使其可以更便捷的查询与处理。开发过程需要考虑Spring MVC框架将功能按照模块、视图、控制器三部分分离模块与视图适度的模块化使其可以较好的重用。beans使用注解来注入这样可以提高小的个人项目的开发效率。在开发开始配置Maven来解决需要的依赖包创建Git仓库来控制版本。3.1.2 系统模块组成首先将系统在Spring MVC的基础上分为了三层分别为Web层服务及模块层数据层而Web层中分为Controller与View模块View为Controller服务按照预定义的格式来展示Controller的数据。Controller将数据访问与一些公共的逻辑算法交给Model来处理Model将处理结果交还给Controller。而Model类就像前面Controller给他的任务负责与界面无关的逻辑计算与数据库的访问、以及其它格式数据的获取。结构如图3.1所示。图3.1 系统结构设计Web层负责处理用户的请求其中Controller会接收DispatcherServlet分发过来的请求Controller调用服务与模块层中的模块进过逻辑计算生成最终的数据将数据通过键值对的方式将视图通过字符串方式传递给DispatcherServletDispatcherServlet再读取对应的View使用View作为模板生成最终的页面返回给用户。省略3.2 模块详细设计3.2.1 数据库设计1原始数据库原始数据库存储从豆瓣抓取下来的数据分为三张表book_author_infobook_online_infobook_publishing_info。book_author_info表存储作者信息分为图书编号、作者姓名、作者简介与介绍四列。作者简介内容包括作者的生平以及与此书和作者都有关的一些事件介绍介绍列与前者相同。作者姓名列存储了各个作者加国籍的信息需要进行清洗。book_online_info表存储图书的一些社会化信息分为图书编号、标签、访问次数、5星评价数量、4星评价数量、3星评价数量、2星评价数量、1星评价数量、想读用户数量、在读用户数量、已读用户数量、还想阅读的书 这十二列。其中标签列将所有的标签带上打标签的次数都放到了同一个字符串中需要对其清洗。book_publishing_info表存储了图书的出版信息分为图书编号、ISBN号、书名、作者姓名、图书描述、图书目录、包装类型、定价、总页数、出版社名称、出版时间以及图书封面缩略图名称这十二列。作者姓名与book_author_info表的作者姓名列重复而定价、总页数等数据使用varchar来存储出版社也没有构建序号不便于检索所以这些内容都需要清洗整理。2清洗后数据库清洗后的数据库是可以直接拿来网站使用的从原始数据库中数据清洗整合出来的数据分为九张表book_infotag_infobook_tag_relationauthor_infobook_author_relationnationality_infopublisher_infobinding_typebook_relation内容如表3.1-3.9所示。3用户数据用户数据是用户的登陆注册以及访问记录的表。其中的数据为Web应用自己生成而不是预先装入系统之中的分为user_infouser_visit_historyuser_search_history内容如表3.10-3.12所示。3.2.2 页面原型设计使用快速原型工具Axure RP Pro根据功能设计了需要实现的页面的原型首页、搜索结果页、图书展示页、注册页面、登录页面。生成的首页原型效果如图3.2所示。图3.2 首页页面原型效果首页顶部包含一个logo链接到本页搜索框提供对图书的搜索入口。以及登陆和注册链接用于用户的注册与登录管理。正文部分分为四个大模块名称分别为相关图书推荐、分类热门图书、图书分类以及图书排行。图书推荐模块列出单本书的缩略图与简要介绍而分类热门模块列出了几个大的图书分类以及几本此分类下的比较热门的图书。图书分类模块列出了所有的图书分类用户可以直接点入查看此分类下的所有图书。图书排行列出前九本最热门的图书。页脚部分注明页面版权信息以及创建年份。搜索页面页眉页脚与首页相同正文部分为一个搜索结果列表显示搜索结果中的15条记录每条记录显示图书缩略图、书名、作者、出版社、出版日期、价格以及评分。正文底部是分页列出了结果的页数可通过点击来查看后面的搜索结果。右侧列出了热门图书列表用于向用户推荐。图书展示页面页眉页脚与首页也相同正文部分分四大块第一块为图书基本信息包括标题、缩略图以及一些图书在版编目信息作者、出版社、出版时间、页数、定价、装帧、ISBN号。同时还显示评分以及各个星评分数量。第二块为内容简介是对书内容的简要介绍以及图书目录。第三块为作者简介是对图书作者以及译者的简要介绍。第四块为相关推荐展示阅读此书的人还阅读了的书籍。由于原始数据并不包含用户评论因此用户评论的内容并没有加入展示。注册页面和登录页面较为简单用户填写用户名、邮箱、密码、确认密码之后点击注册即可。登录时用户输入用户名、密码然后登录系统会跳转到首页首页右侧顶端登录注册不再显示改为用户名与退出。3.3 小结本章介绍了本课题所研究的基于Web的图书推荐系统展示平台的系统总体设计与详细设计。总体设计主要讲述了系统设计的层次结构并且规定了系统各层各模块之间的组织结构与通信规则。详细设计部分对数据库进行了设计列出了各个表的结构与描述。并且使用页面原型工具构建了简单的页面来作为之后页面开发与功能模块划分的依据。总体合计与详细设计在系统开发之前对之后系统的结构与功能都起到非常重要的影响结构的好坏直接影响到系统的性能。此章是下一步实现系统的必要步骤和重要依据。4 基于Web的图书推荐系统展示平台实现4.1 环境的搭建省略4.2 数据的清洗由于原始数据并不能直接拿来使用因此需要按照之前设计的数据库将三个表中的原始数据清洗后存入新设计的表中程序流程如图4.5所示。程序会先定义起始和终止图书编号之后从第一个图书编号开始通过主键查询到图书的数据将需要的值取出比如作者信息。作者信息包括了作者国籍、作者姓名以及其它作者姓名格式如图4.4所示。图4.4 原始数据中部分作者姓名格式开始打算通过一个完整的正则表达式来对作者信息进行解析但是由于Java的正则表达式并不能够分辨出中文标点与中文文字因此先对字符串做初步的清理将“编著”、“译者”、“主编”替换为英文斜杠“/”来区分不同的作者将中英文逗号、中英文括号等内容都替换为英文分号“;”用于区分国籍与作者。之后使用将字符串按照斜杠来分割成一个字符串数组数组中每个字符串代表一个可能带有国家信息的作者名称使用正则表达式”^([\u4e00-\u9fa5])?([\w\u4e00-\u9fa5\.•])”来匹配取出可能以分号加中文字符开头的作为国籍以英文字符或者中文字符组成的连续的词作为作者姓名。之后拿国籍信息去国籍信息表中查询没有此项则作为一个新的条目插入有则不做处理。在有的数据清洗过程中比如标签它有一个统计数据那么如果表中有这个标签会将统计数据增加一个。作者姓名与国籍类似采用相同的方法来存储。之后便查询下一条图书记录。图4.5 数据清洗程序流程图为了加快读取速度每次的读取并不只是一条而是多条图书数据一起读取出来这样会一次将较多的数据调入内存降低磁盘IO操作加快速度。可是由于每本书有三到五个作者每个作者和国籍都会在解析出来之后变为一个独立的需要插入到数据库中或者去数据库中查询的条目随着数据条数的增多同时提交的事务数量会加倍增长MySQL系统就出现了session数量不足的错误。于是将每次取出的条数减少并且在每次操作完成一组数据后提交并关闭数据库在需要操作前再打开数据库。这样就能够即时的关闭用完的session不会出现由于大量已结束的事务占用session而报错的问题。同样为了加快数据清洗速度使用两台电脑一台运行数据库系统另一台运行Java程序MySQL系统打开网络用户的访问权限和所在系统的防火墙3306端口另一台连接并处理数据。由于数据库操作占比较大的时间所以瓶颈依旧在运行数据库的系统中不过相对与在同一个系统中CPU占用和内存占用有一定程度的下降。4.3 系统开发按照总体设计阶段的分层将系统分为三个包cn.edu.ustb.controller、cn.edu.ustb.dm、cn.edu.ustb.model。如图4.6所示。图4.6 项目包结构图4.3.1 控制器类controller包为系统结构中的controller模块根据功能划分为了五个类BookInfoController.java负责图书详细信息的展示IndexController.java负责首页的视图内容获取展示LoginController.java负责登录信息的处理RegisterListController.java负责对注册信息的处理ResultListController.java负责处理查询。controller类将SqlSessionFactory使用注解的方式注入类中并且使用注解来实现Controller类与请求映射。使用Log4j工具来输出日志。借鉴Objective-C的方式使用setter/getter方法来获取变量以便延迟加载以及提高利用率。代码结构如图4.7所示。图4.7 BookInfoController类部分代码截图在最开始Mapper都是使用注解来注入进来的但是发现SqlSession的开启与关闭不受到控制完全靠系统来自动完成那么在并发数量过大之后大量线程占用session很容易出现session数量过多的问题其他人访问不了网站。将Mapper的获取方法改为了使用SqlSession的getMapper方法来获取这样就可以完全控制session开启时间、结束时间。在每次访问页面的时候包括浏览器会话没有关闭时刷新都会重新开启一个新的SqlSession获取新的Mapper实例然后执行数据库操作最后关闭数据库连接。这样能够即时的回收过期的SqlSession防止大量无用的session占用数据库资源。在使用getter/setter方法时刚开始将SqlSession的获取放到了getter中这样会首先检测有没有实例没有实例再创建意图是为了延迟加载在用到的地方才初始化它并且防止每次使用都创建新实例。可是在实际中却发现如果用户刷新页面或者点击分页按钮系统会抛出错误说数据库已关闭无法执行查询操作。原来每次访问在浏览器没有结束会话时Web容器会将Controller类的实例保存在内存中而每次请求只会执行RequestMapping所指定的函数。于是修改SqlSession的获取方式在浏览器每次发起请求时通过SqlSessionFactory类的openSession函数来获取一个SqlSession实例。Mapper的获取也受到了影响因为每次访问都会创建一个新的SqlSession实例那么Mapper如果不为null的话就不会重新创建Mapper实例这样Mapper的SqlSession将是已经关闭的session它不能够执行任何数据库操作。因此在每次访问时会将所有的Mapper都重置为null以使其重新初始化。4.3.2 模块类模块类包含一些页面需要的数据结构对数据的加工函数以及分页功能实现。其中BookClassifyItemModel.java类为单纯的书籍按照分类来显示信息的模块其中借鉴了MyBatis的Example类的方法添加了一个内部类在父类中编写了创建内部类的函数用于创建图书列表。BookListItemModel.java类为图书的基本信息展示类用在了图书推荐、图书排行、查询结果展示以及图书详细信息中。在类中提供了计算得分的函数以及格式化日期的函数用于在页面中显示。SearchResultPaginationModel.java类为查询结果分页模块用于支持查询的分页显示以及分页功能。由于数据量巨大为了提高查询效率分页查询并没有采用MyBatis的分页查询方法MyBatis会在第一次查询时将所有的符合条件的结果读入内存中之后再根据分页条件来显示这样虽然会在页面跳转的时候很快但在第一次查询时会有大量的磁盘IO操作在数据类大的情况下会对系统性能造成很大的影响而搜索结果大部分用户只是关注前几页后面的结果访问量并不大这样就有些得不偿失。分页查询采用数据库的limit条件只在每次查询时获取每一页要显示的数据在创建了索引以后这个查询过程是非常迅速的只将需要的数据读入内存。查询效率提高了就需要自己来实现分页。4.3.3 视图类视图使用jsp作为页面引入了JSTL的c库来辅助生成布局。视图文件如图4.8所示。图4.8 视图文件header.jsp为页面顶端的logo、搜索栏与登录注册按钮的部分。footer.jsp为页面底部版权信息的内容。pagination.jsp为分页根据SearchResultPaginationModel.java的内容来生成分页。bookInfo.jsp负责显示图书的详细内容index.jsp负责首页内容的显示login和register负责登录与注册页面resultList为搜索结果只是单纯的搜索结果列表用于分页时通过AJAX请求来局部刷新减少流量。resultListPag为搜索结果页面是页面的框架其中引入了resultList作为第一次访问时搜索结果的展示。每个页面都引入header.jsp与footer.jsp用来引入所需要的布局文件与页面脚本构建起基本的页面框架。页面导航栏的布局采用Bootstrap的导航栏样式登录可以从导航栏上直接输入来登录。搜索条件分为标题、作者、出版社可以对这三者进行查询。采用JSTL的标准c标签库方便的实现循环c:forEach、判断c:if、c:when页面整体布局采用Bootstrap的响应式布局首页、搜索结果页将正文部分分为左右两块图书信息页面只有一个块。在首页中各个块中每本书作为一个row类型每个row又分为两个span用于分割左右两块。一部分布局是由自定义的main.css文件来定制。而自定义的JavaScript也由在footer中引入的main.js来定制那些比如搜索按钮点击事件、分页按钮点击事件、登录等等。分页按钮的样式采用了Bootstrap的分页按钮参考Amazon查询结果的分页效果在页数多于9页的情况下翻到中部则只显示部分挨着的页码结合SearchResultPaginationModel类的结构完成了查询的分页。4.4 分析及调优首页为所有页面中最为复杂的页面需要查询四块内容页面效果如图4.9所示。图4.9 首页页面效果四块内容分别需要按照各自的查询条件来排序然后取前几个符合条件的结果。在刚开始没有对数据库优化之前页面打开速度几乎需要3秒对查询SQL进行分析发现大部分操作时间都消耗在了排序上于是对排序条件创建了索引首页的首次打开延迟变得小于1秒并且由于在控制器中使用getter\setter部分没有参数的数据会在查询之后一直留在内存中不会进行第二次查询所以刷新会返回304页面内容没有改变。图4.10 查询结果页面图4.10为查询结果页面。由于此平台不涉及搜索算法的研究所以搜索结果为从数据库字符串中like出来的。考虑到数据库巨大若不做处理将会严重影响查询效率。于是按照查询特点对图书标题、出版日期两列做了索引查询速度有了成倍的提升。再加上每次查询使用limit磁盘内存间的交换操作减少了许多。图4.11 图书信息页面图4.11为图书信息的展示页面对图书的缩略图、内容以及作者简介做了展示还有登录失败后会跳转到的登录页面注册按钮点击后跳转到的注册页面相对于其它两个相对功能较单一性能也没有太大的提升空间。4.5 性能测试使用Chrome浏览器的开发者工具来进行测试。结果如图4.12所示首次加载首页需要等待6ms其它静态的css与js文件几乎不需要时间在统计结果中显示为0。之后刷新Tomcat会从内存中直接取得返回结果统计如图4.13所示由图可知加载页面仅需要用时2ms。图4.12 首次加载首页时页面内容访问速度图4.13 刷新首页时页面内容访问速度在查询结果页面查询一个关键词“IOS”页面的等待时间为223ms。同样由于缓存的作用刷新的等待时长变为8ms。结果如图4.14与4.15所示。图4.14 查询访问速度测试结果图4.15 查询结果刷新速度测试结果4.6 小结本章介绍了整个系统的每个模块的整体设计、详细设计以及实现方式。并进行了简单的分析以及性能的调优最终系统运行性能良好稳定系统结构简洁功能完善。结 论随着计算机网络技术的发展越来越多的电子商务网站、图书分析网站以及一些图书馆系统都采用了图书推荐系统这种智能化的解决方案它有效的实践了长尾理论增加了用户粘性。本文对基于Web的图书推荐系统的展示平台做了初步研究开发了一个平台开发过程包括网站数据库设计、数据清洗、系统结构设计、系统搭建、版本控制、性能调优等功能模块包括图书展示、图书搜索、图书推荐、用户登录注册等还对设计的过程、网站的结构、项目的管理方法进行了探索对项目中遇到的难点给出了一些解决方案起到的效果也比较不错。研究的核心部分是系统的设计与工具的使用。由于系统开发采用MVC结构系统各个层级与模块之间的关系以及数据库结构都需要一个具有高扩展性和可复用的设计否则在开发后期或是在后期维护阶段都会因为工程大小的增长而带来耦合性的急剧上升最终导致功能实现与错误修改变得异常艰难。一些开源的开发框架与项目管理工具在系统开发过程中会极大地减轻开发者浪费在无关事务上的工作量开发者不需要去操心布局怎样实现才能美观怎样达到浏览器兼容以及怎样去管理版本控制查看进度去哪里下载依赖包项目需要哪些依赖依赖包怎样升级等等。工具也可以减少开发者的重复劳动比如MyBatis Generator可以自动生成单表操作的Mapper文件。开发中的难点是数据的清洗过程与数据库查询效率的优化。数据的清洗过程需要读取出记录后对数据解析、去新表查询根据查询结果插入到新表或者更新新表。操作比较复杂由于数据的格式极不规整在解析时花了许多时间研究数据的格式的可能性编写代码去除干扰数据并用正则表达式解析它。一开始数据查询效率极低在分析了SQL查询语句之后对数据相应字段创建了索引才使得数据查询的速度符合期望解决了查询的效率问题。参 考 文 献[1]项亮陈义王益著.推荐系统实践[M].北京人民邮电出版社2012.[2]Vincent, L.Google Book Search: Document Understanding on a Massive Scale[J].Document Analysis and Recognition2007: 819 - 823[3]裴玉洁著.采用数据挖掘技术的自动化推荐系统的研究[D].2012.[4]吴定勇王峰著.亚马逊书店的网络售书之道[J].北京当代传播2008, (6): 123-125.[5]李连焕刘建东著.基于Web日志挖掘的图书借阅推荐算法研究[J].北京硅谷2012, (6): 93-94.[6]古丽拜天.卡米尔著.基于Web数据挖掘的智能推荐研究[D].湖南中南大学2010.[7]李俊杰著.Maven在企业Java软件产品中的应用[D].北京北京邮电大学2011.[8]刘悦之著.基于Git的分布式版本控制系统的设计与实现[D].上海同济大学2012.[9]张琛吴跃邱会中著.基于StructsSpringHibernate的整合架构及其在电信业中的应用[D].四川成都电子科技大学2006.[10]陆荣幸郁洲阮永良王志强著.J2EE平台上MVC设计模式的研究与实现[J].计算机应用研究2003, 20(3): 144-146.[11]Praveen Gupta, Prof. M.C. Govil. MVC Design Pattern for the multi framework distributed applications using XML, spring and struts framework[J].International Journal on Computer Science and Engineering2010, 2(4): 1047-1051.[12]冯润民著.基于SSH的高校学生管理系统设计与实现[J].北京计算机工程2009, 35(6): 280-282.[13]Dave MinterJeff Linwood著.Hibernate基础教程[M].陈剑瓯等译.北京人民邮电出版社2008.[14]孙强孙龙清邱小彬著.基于StructsSpringiBATIS的轻量级Web应用框架研究[J].北京计算机应用与软件2008, 25(10): 135-137.[15]王庆民著.基于Web图书推荐系统设计[J].山西晋图学刊2011, (1): 35-37.[16]曾庆辉邱玉辉著.一种基于协作过滤的电子图书推荐系统[J].北京计算机科学2005, 32(6): 147-150.[17]张富国著.电子商务协同过滤推荐系统的研究与进展[D].江西江西财经大学信息管理学院2010.[18]田元宋纬华李婷婷著.基于Markov链的图书推荐系统的研究与设计[J].陕西西安理工大学图书馆2012, 32(6): 79-82.附 录附录A 外文参考文献原文省略附录B 外文参考文献译文省略致 谢省略5、资源下载本项目源码及完整论文如下有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。序号毕业设计全套资源点击下载本项目源码基于JAVABootstrapMySQL的图书推荐系统设计与实现源码文档_JAVA_BS架构_图书推荐系统.zip提示如果下载链接失效可点击下方卡片扫码自助下载。6、更多JAVA毕业设计项目精选JAVA毕业设计83套——源码论文完整资源