emm,算是为毕业论文写草稿吧。这个系统是一个电影评价网站,通过用户评分找出用户打分最高的三部电影,然后分别以这三部电影为基础,挑选出相似度高的电影进行推荐。
1.系统总体设计和网站架构设计
使用软件:mysql+eclipse(需要jdk)+navicat web3.0以上
使用框架:数据库端使用了c3p0和Dbutils。后端端是jsp+servlet。前端使用jquery和bootstrap。
2.外部引入
数据库:配置c3p0-config.xml
Referenced lib:如上图需要导入四个jar包
js:需要导入如上五个.js文件
css和 fonts是bootstrap自带的(咱也不知道是干啥的,咱也不敢删)
3.细数开发来遇到的疑难问题(博主是小白,勿喷)
3.1 对电影(movie)实体list按评分(movie.grade)排序
这个想了很多,后来发现可以用实体list的某个属性进行排序。这样就能按评分对电影排序进而根据推荐值截选前n部电影
3.2从hbuilder设计的界面移植进入jsp中,结果不可以使用
经过排查发现引入.js文件路径错误,因为文件放置路径不同
3.3 错误,找不到或无法加载主类
这个当时也耽误了一段时间,后来发现是因为buildpath中libraries中有俩红叉jar包。出现红叉jar包是因为自己引入jia包不是复制进去的,而是link进去的。所以要注意。
3.4 servlet返回jsp页面与原来页面不同。
这个具体原理不详,反正就是以下两种方式去jsp页面展现的页面不一样。需要用b种类方式才行,用a页面是乱的。
a: request.getRequestDispatcher("/page/pre/movie.jsp").forward(request, response);
b: response.sendRedirect("http://localhost:8080/QFMR1/page/pre/movie.jsp");
3.5 ArrayList list
这个由于要将list再处理,不能直接创建list,要创建arraylist与list之间互动。
3.6 模糊查询
很难受,整了很久,最后才整出来。
3.7 jsp和servlet跳转的问题
本来是之前设计的jsp之间传递,后来发现这样不利于网站建设,后来就一个jsp对应一个初始化servlet。session中传递一个mvlist,jsp中接受session中的mvlist,并初始化mvlist为null。
3.8 乱码问题(血的教训,断断续续花了我将近10天才解决)
3.8.1 从servlet传递到jsp
response.getWriter().write("评论成功")
用这个方法传递到jsp的中文字符会显示问号,需要在上面加上
response.setContentType("text/html;charset=utf-8");
这样就会传递中文
3.8.2 从jsp传递到sevlet或jsp
如果传递到servlet或jsp页面 需要String str=new String(str1.getBytes("ISO-8859-1"),"UTF-8"); 将接受的变量转为utf-8
3.8.3 和数据库对接乱码(重点)
a : 将eclipse workspace 设置为utf-8
b:在url后上加上characterEncoding=UTF-8&useUnicode=true
c:mysql数据库编码问题
进入mysql命令行,输入show variables like 'character%'; 查看编码集。
建议都设置为utf-8(character_set_filesystem为binary) 如果不是的话需要找到mysql目录的my.ini文件并在[mysql][mysqld][client]里添加如下代码。
然后用命令行以管理员模式关闭mysql再开启mysql,出现如上的编码集就ok了,这样基本就了乱码,可能需要重启电脑,之后要刷新数据库链接和数据库,mysql8.0以上需要自己注意一下my.ini位置。
3.9 图片存储问题
想了很久,最后是将文件放在img下,然后数据库存储路径。
4.设计与源代码(不知道多少软件计算机的童鞋在等这个)
本网站我负责的模块是推荐系统的设计和网站的建设。
4.1 网站建设
网站的非推荐相关功能包含登陆,注册(使用jquery.validate),注销电影关键词分类,模糊搜索。都是基本的mvc模式进行设计。
4.2 推荐相关
4.2.1根据用户评分推荐
用户点击电影可以查看电影的详细信息,并且能够进行评分和评论(涉及和另一个小伙伴的对接算法),写入数据库。将用户评分最高的三部电影id写入用户表。推荐是根据用户喜欢的电影id,来与其他电影进行比对,选取相似度值较高(涉及相似度算法1)的前n部电影进行二次推荐值计算(涉及推荐值算法2)选取m部电影,用户已经评论过的电影不再推荐。
4.2.2用户关键词推荐
表单输入导演,演员,地区,类型,时长。后端接收数据并封装成movie与数据库比对(涉及算法3),并按评分降序(涉及算法1的子算法4)选出最多n部电影。
(楼主目前还在毕设阶段,源代码不能贴,7月份会发布出来)
大概就是这样吧,后续可能还会在进行一些扩展与补充,感觉现在还有点单薄。