畢業設計分享----基於Java的個性化博客空間的設計與實現

一、大宇想說的話

        大宇大學畢業已經四個月了,這四個月有懶惰的時候,有努力的時候。回首自己走過的路,只有畢業設計最能濃縮我的所學。我早就有這個打算:把自己的畢業設計與大家分享,但一直沒有用行動落實。這個週末我下決心,犧牲一些遊戲的時間,要把這個事情落實了。

        這個畢設投入了我很多心血,但最終的結果也證明這是值得的。大宇的畢設幸運的被答辯老師評爲了‘優秀’,因此幸運的獲得了"優秀畢業生"稱號,獎金一千,這讓大宇樂開了花。獲此殊榮的同組答辯的五十人中僅有不到五人。因此從畢設的價值上來看,也值得再次研究,就像複習以前寫過的卷子一樣。

       雖然此畢設傾注了大宇的努力,但由於大宇水平有限、時間倉促,代碼中難免有寫的不好的地方,請各位看官諒解。此係統難免會出現大宇沒有發現的BUG,如果遇到問題或有意見或者建議,歡迎在CSDN上留言或加我QQ與我取得聯繫,我的QQ是1137214912。

       畢設的源碼:在本文最下方我還提供了源代碼的下載鏈接,畢設中的源代碼均可免費學習與使用。       

二、畢設效果展示

      我的畢業設計的題目是:《基於Java的個性化博客空間的設計與實現》。

      題目是做一個類似CSDN這樣的博客,所以這個畢設的數據,大部分文章都來自於自己的CSDN博客。

      比如JDK1.7 HashMap集合源代碼探索 、揭祕雙向鏈表LinkedList源碼單例設計模式

      下面是一些大宇畢設的效果截圖(點擊圖片可以看到更加清晰的效果):

           

 

 

 

 

三、開發環境

        開發工具:

                     JDK版本:1.8

                     數據庫是MySQL

                     Maven版本:3.5.2

       後端Java框架:

                     Spring、SpringMVC、Mybaits、Shiro

       前端框架:

                      Bootstrap

四、設計思路

         本小節,大宇將詳細探討畢設的一些關鍵技術難題,以及相關的設計思路。我將用“關注點”來標識重要的知識或者技巧。如果你樂意的話,可以一邊看代碼,一邊閱讀大宇的講解。畢設源碼中已經定位好了相關關注點,大家可以直接找到相關源碼查看。

        前排準備好瓜子了嗎?Here we go!

        

        提示:下面的所有關注點,均在源碼中可以找到,可以在Eclipse或Idea中使用全區搜索快速定位。

-------------------------------------------------------------------啓動後的流程-----------------------------------------------------------

        關注點1:在web.xml中定義了項目啓動後跳轉的路徑,本畢設直接跳轉當前根目錄的index.jsp頁面。

        關注點2:此頁面在0秒後,立即刷新到指定的URL。爲什麼這裏要立即刷新併發送'actions/article/list'請求,並由SpringMVC的ArticleController處理此請求,最終返回一個ModelAndView,解析到一個新的JSP頁面中。這是因爲JSP本質上是動態頁面,它的數據由服務器組裝。我們發送actions/article/list的目的就是向服務器請求文章的數據,並將查詢數據庫得到的文章數據,渲染到指定的JSP頁面上。最終呈現給用戶的是 /WEB-INF/pages/article/list.jsp頁面。至於是如何跳轉的,可以查看關注點3的配置。

        關注點3:視圖解析器,定義ModelAndView的前綴與後綴。這用於指定當前請求應該跳轉哪個頁面。

        關注點4:SpringMVC攔截入口。本畢設的所有請求均以 ‘/actions/’ 開頭。SpringMVC能夠捕獲到以/actions開頭的請求,並將其映射到相關的Controller中處理。

        關注點5:以關注點2中的index.jsp頁面爲例子,這個頁面會刷新併發送一個新的請求,這個請求的路徑爲‘actions/article/list’。此路徑定義在了META標籤中的URL屬性,最終會被瀏覽器解析爲發送 /actions/article/list 請求。所以這個請求就像關注點4中解釋的那樣,會被SpringMVC捕獲。SpringMVC會將此請求的標識去掉,即真正SpringMVC需要將此請求映射到處理 'article/list'這個請求的Controller中。

        關注點6:大家可以看到我把所有的請求都抽取爲了常量,這樣其實便於維護,如果多個地方需要用到這個請求,只需要改字符串常量即可。同樣返回的ModelAndView也定義爲了常量。

        關注點7:本ModelAndView返回的是artice/list,也就是 /WEB-INF/pages/article/list.jsp頁面。這個list.jsp頁面上就是你們看到的項目啓動後的頁面。數據從哪裏來的,數據是從數據庫中查詢出來的。而這些數據是如何傳遞到頁面上的呢?可以像大宇一樣處理,把數據放到一個map中,然後可以在頁面上使用EL表達式,也就是用美元符號取出map中的數據。

        關注點1到關注點7主要闡述了項目啓動後的跳轉過程,大家應該不難理解吧。

----------------------------------------------------------前端如何與後臺交互--------------------------------------------------------------

        下面回到我們的首頁。點擊右上角的登錄,輸入管理員帳號:admin / admin。登錄成功後,即可發現頁面上方的導航欄發生了一些變化。新增了寫文章與個人中心。那個"留言"的導航欄沒有實現,算是偷懶吧。

        點擊閱讀第一篇文章,發送/actions/article/readArticle/X請求。這個X是這篇文章在數據庫t_article表的ID。源碼的話查看關注點8。

        關注點8:'article/readArticle/X'請求中的X,它是通過${article.id}解析出來的。在SpringMVC中,用於捕獲這種由動態參數的URL,提供了一個註解@PathVariable解析。

        關注點9:有動態參數的URL,SpringMVC應該怎麼定義寫呢。只需要把那個動態參數用{articleId}定義,然後在 Controller方法上用@PathVariable解析,最後映射到指定的變量上即可。如關注點10所示。

       關注點10:解析動態參數。可參考大宇的博客:https://blog.csdn.net/yanluandai1985/article/details/79761027

       關注點11:通過ajax方式向後端發送請求,發送的數據可以@RequestParam("參數名") 解析,如關注點12所示。

       關注點12:@RequestParam("loginName") String loginName ,它把前端的數據解析並映射到了Java的字符串上了。

PS:大宇對前端其實也很頭疼。就說這個ajax方式提交請求吧,大宇嘗試了很多次想記住它,都失敗了。最後都不得不再次查看相關的API文檔,或者在項目中看別的同事的ajax請求格式。實在不行,就看自己的畢設^_^。如果你跟我一樣主學的是Java,那麼就應該掌握常用的解析前端過來的參數。常用的有@RequestParam、@RequestBody註解。遺憾的是,當前畢設中沒有使用 @RequestBody 的情況,因爲那個時候我還沒有掌握@RequestBody的使用。感興趣的朋友可以自己找資料學習。

        關注點13:@ResponseBody可以把後臺的Java對象解析爲Json對象,作爲ajax請求的響應。

----------------------------------------------------------Mybatis相關--------------------------------------------------------------

       回到登錄後的首頁。在右側我設計了'熱門文章'與‘本欄推薦’模塊。熱門文章是點擊量最多的幾篇文章。

       關注點14:熱門文章其實就是:獲取指定條數的文章,按照點擊量降序排行。代碼追蹤下去,最終執行的SQL語句在關注點15處。

       關注點15:SELECT * FROM t_article ORDER BY click DESC LIMIT 0,#{limit}        click字段是在數據庫中的意思是點擊量。在MySQL中,排序使用的是ORDER BY 。升序用的是ASC,降序用的是DESC。分頁是通過 LIMIT來控制。 LIMIT A ,B  說明的是從第A條數據開始,查詢B條數據。

       點開某一篇文章,在文章的最下面,有可以提交評論的地方。在提交評論的上方,有“上一篇文章”與“下一篇文章”、“相似文章”。上一篇文章就是獲取 文章id小於當前文章id的第一篇文章,下一篇文章是文章id大於當前文章id的第一篇文章。相似文章通過模糊查詢當前文章的標籤,取得相似的文章。

      關注點16:mybatis中使用模糊查詢。可參考:https://blog.csdn.net/yanluandai1985/article/details/79757088

      關注點17:mybatis動態排序。可參考:https://blog.csdn.net/yanluandai1985/article/details/79756561

      關注點18:mybatis中不能直接寫 大於號 小於號,因爲會被解析成XML配置文件,因此需要使用CDATA轉義。

                        解決辦法:https://blog.csdn.net/yanluandai1985/article/details/79758275

      關注點19:mybatis中使用分頁插件:https://blog.csdn.net/yanluandai1985/article/details/79759253       

      mybatis的更多關注點,如批量操作、爲實體生成主鍵,可以查看:https://blog.csdn.net/yanluandai1985/article/category/7550717

----------------------------------------------------------日誌相關--------------------------------------------------------------

      關注點19:控制控制檯日誌輸入。幾乎每個類都有日誌的輸入,爲了避免控制檯輸入太多調試信息,可以把指定包下的輸入等級提高。比如<logger name="domains" level="INFO" />修改爲<logger name="domains" level="WARN" />。這樣做的效果就是,domains包下的所有類需要打印大於等於WARN等級的日誌,而一般我們輸入的日誌的等級是DEBUG或INFO,這類日誌將會被忽略。本畢設用了大量的日誌信息,大家可以直接模仿。

----------------------------------------------------------Shiro相關--------------------------------------------------------------

     Shiro安全框架的東西,或許有些朋友沒有用過,而且本畢設也僅僅用於權限控制。下面就簡單說一下用到的地方吧。

     (1)在未登錄的情況下,不允許查看文章的具體內容。登錄其實就是Shiro所說的認證。

     (2)非管理員登錄後,點擊導航欄的“後臺管理中心”,將會提示用戶沒有相關的權限信息。用到的是Shiro的授權。

     (3)帳號密碼的加密。

      對Shiro感興趣的朋友可以去濤哥的博客學習,我也是在那裏學的。地址是:http://jinnianshilongnian.iteye.com/blog/2018398

----------------------------------------------------------分割線--------------------------------------------------------------

      本來打算把這篇博客寫完的,但是看了一下時間,誒。這個週末下的任務只能算是完成了一半,還有好多東西想跟大家分享。這也算大宇的一個壞習慣吧,做事拖拉,最終的結果就是任務總是打折完成。^_^,得改。

     

     

      

       

        

五、致謝

        致謝的人與他們的鏈接:

        楊青,一個潛心研究web前端技術女程序員            大宇的網站用的是青姐的開源模版,非常感謝青姐

        倪升武,他的口號是:樂於分享共同進步               武哥的博客陪伴了我無數實習的時光

        孤傲蒼狼,只爲成功找方法,不爲失敗找藉口!    感謝孤傲蒼狼的JavaWEB系列博客,讓我明白分享也是一種進步

        張開濤,跟我學系列的創始人                                 濤哥無私的分享Spring、Shiro等框架的知識,值得爲他點贊

六、源代碼下載鏈接

          源代碼大小:2M。

          畢設系統登錄帳號:   admin  /   admin 。

          百度網盤下載鏈接:https://pan.baidu.com/s/1Mmbo4pHX2qx0qs0dgputCg  提取碼:c1kw

          GitHub下載鏈接    :https://github.com/hairdryre/BlobSpaceV1.3

 

 

 

.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章