blogs
一個簡易的博客系統
GitHub地址:點擊查看項目源碼
Gitee地址:點擊查看項目源碼
項目簡介
該項目是我之前學習的一個項目,一個較爲完整的博客系統,具備了常見的博客相關功能,初衷就是爲了解決日常的學習記錄與總結。
該博客系統大概包含了以下功能:用戶的登錄與註冊、系統的權限管理、發表編輯博客、博客查閱、博客刪除、博客評論、博客點贊、個人信息頁展示、
個人信息的修改、首頁信息顯示如熱門標籤、熱門用戶、熱門博客、新發表博客以及所有博客列表,同時會做閱讀量、評論量以及點贊量的統計,
還支持全文搜索,可以快速查找出想要的內容。當然還爲管理員提供了後臺管理系統,用來管理與維護博客系統,如用戶管理,博客管理等。
項目技術:
前端:Thymeleaf模板引擎、Bootstrap以及jQuery;
後端:SpringBoot做基礎框架、SpringSecurity做授權與認證、SpringData做數據訪問層控制,全文檢索使用Elasticsearch、數據庫使用MySQL。
當然爲了便於測試,也可以繼承H2作爲測試數據庫。項目中的圖片上傳及圖片存儲展示使用的一款開源的文件服務器,該文件服務器是基於MongoDB
作爲文件信息存儲,採用SpringBoot完成項目搭建。
項目管理(打包工具):Gradle。
整個項目目前搭建在阿里雲上,服務器主機使用 ECS ,項目容器即服務器採用Tomcat。
-
項目還是掛在阿里雲上,博客系統鏈接奉上(後臺管理就不放了)
點擊訪問項目網站
登錄賬號:test 密碼:test 當然也可自行註冊。 -
項目部署
可以clone項目後,直接IDE中運行,或者Gradle中依賴了SpringBoot插件,直接bootRun即可。還可以運行打包後生成的jar包,因爲SpringBoot
內置了容器。當然,也可以打成war包,部署到外置容器中去,如Tomcat。
項目設計以及實現上的幾個點 :
1、項目使用了Thymeleaf模板引擎,來做前端頁面的渲染,替代以往的JSP,同時SpringBoot也對Thymeleaf有很好的集成。頁面部分還使用
了BootStrap來完成響應式的佈局,它提供了很多的樣式供使用。另外結合JQuery完成功能控制等等。
2、後端部分,整個項目是採用SpringBoot做爲基礎框架,它省去了原先Spring額外的繁瑣配置,達到開箱即用的效果。當然,如果需要一些
定製化需求,SpringBoot也支持。
3、數據庫使用的MySQL,當然我們在測試時可以使用H2這種內存數據庫,對於測試來說是很方便的,只需要在SpringBoot中做幾個簡單配置。
對於數據訪問操作的編碼上,使用Spring Data JPA來代替以往集成MyBatis的方式,Spring Data JPA實現了JPA規範,使得我們在進行數據層
操作時更加簡單,這是JPA的特性,通過完全的ORM映射,我們甚至可以不用寫任何一句SQL就可以實現。(默認使用了Hibernate)
4、對於首頁的熱點信息及關鍵詞搜索功能,使用了全文檢索技術,這裏使用的Elasticsearch(也可以使用solr),編碼上直接使用Spring
Data es,與JPA一樣,相比直接使用es的api來說是非常的方便。
4、博客系統中如博客編輯或者用戶個人信息中頭像設置都涉及到了圖片上傳,這裏我們使用了一款開源的文件服務器
(GitHub地址),用來存儲我們圖片以及圖片訪問,它還提供了文件數據管理的可視化界面。
這款文件服務器是基於MongoDB + SpringBoot實現的,對於文件信息,它轉做一個File文檔對象BSON格式(MongoDB非關係型數據庫的特性)進行存儲。
因爲博客系統中需要上傳的圖片都是小文件,僅幾M,所以使用這款文件服務器可行,如果想要存儲超過16M的文件可以使用其他文件服務器,如GridFS、
FastDFS等等。
5、對於權限的控制以及用戶認證登錄等功能,使用了SpringSecurity這個安全框架,它負責認證與授權,認證如用戶登錄,授權如對於權限操作
(博客編輯、點贊、評論等等)需要進行登錄,後臺管理僅允許admin。SpringSecurity有一些核心類,我們只需要按照規範通過編碼或者配置文件
去進行權限分配、認證、會話管理以及安全控制如CSRF等等。它也提供了很方便的註解,可以對我們Controller進行細緻的權限把控。同時我們在Thymeleaf中也引入了
Security-thymeleaf,在頁面編碼上我們也可以進行一些侵入式的API操作。
6、對於註冊或者博客內容上,除過數據庫中實體字段類型以及索引限制(在實體類字段上加上Hibernate註解控制)還在頁面上以及實體上添加了校驗,
如實體上引入了一些Bean校驗的註解(@Size、@Email等等),保證了後臺代碼的安全。
7、博客編輯集成了markdown的插件來完成博客內容的編寫。
項目展示
後臺管理
新增用戶
首頁
個人主頁
博客點贊評論
博客編輯
個人設置
博客詳情
註冊失敗
項目詳述
-
模塊設計
下圖爲整個博客系統的模塊設計圖:
-
版本參數
技術 | 版本號及相關信息 |
---|---|
JDK | 1.8 |
Gradle | 3.5 |
Spring Boot | 1.5.2. RELEASE |
Thymeleaf | 3.0.3. RELEASE |
Thymeleaf Layout Dialec | 2.2.0 |
MySQL Community Server | 5.7.17 |
MySQL Workbench | 6.3.9 |
Spring Data JPA | 1.11.1. RELEASE |
Hibernate | 5.2.8. Final |
MySQL Connector | J6.0.5 |
H2 Database | 1.4.193 |
Elasticsearch | 2.4.4 |
Spring Data Elasticsearch | 2.1.3. RELEASE |
JNA | 4.3.0 |
Tether1.4.0 | http://tether.io/ |
Bootstrapv4.0.0-alpha.6 | https://v4-alpha.getbootstrap.com/ |
jquEry3.1.1 | http://jquery.com/download/ |
FontAwesome4.7.0 | http://fontawesome.io |
NprogRess0.2.0 | http://ricostacruz.com/nprogress/ |
Thinker-md | http://git.oschina.net/benhail/thinker-md |
jquEryTagsInput1.3.6 | http://xoxco.com/projects/code/tagsinput/ |
BootstrapChosen1.0.3 | https://github.com/haubek/bootstrap4c-chosen |
toast2.1.1 | http:/www.toastrjs.com/ |
Spring Security | 4.2.2. RELEASE |
Thymeleaf Spring Security | 3.0. 2. RELEASE |
Apache Commons Lang | 3.5 |
Markdown parser for the JVM | 0.16 |
Mongo DB | 3.4.4 |
Embedded MongoDB | 2.0.0 |