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
<a href="/QFMR1/initmoviecommentServlet?movie_name="張三" " ></a>
<a href="recomment.jsp?movie_name="張三" " ></a>
如果傳遞到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月份會發布出來)
大概就是這樣吧,後續可能還會在進行一些擴展與補充,感覺現在還有點單薄。