spring boot之從零開始開發自己的網站

概述

  • 首先要感謝兩位大神,該項目的想法來源自tale和MyBlog。

  • 做了一些改造,增加了一些功能和一些代碼的重構,并且更換了博客主題。

  • 關于項目,對于開發的練手項目,能夠工程化,嚴謹一些。

  • 關于文檔,本文主要中從項目需求,項目設計的方式來闡述.

  • 如何從零開始,使用springboot開發項目。

  • 記錄一些在開發過程中遇到的一些問題,總結開發技巧??

接下來,會以需求和設計方式來闡述

效果圖

?首頁展示

?

文章編輯

?

?文章管理

項目需求

項目背景

對于剛學習springboot的同學,最好的就是拿一個項目練練手。在編碼過程中遇到的問題并解決,這都是寶貴的經驗。 用springboot開發的博客系統,簡單而且實用,適合做練手項目。

功能需求

界面需求

主頁

  • 博客匯總,以列表加圖片的形式展示
  • 能夠以分類的方式查看文章
  • 能夠以時間列表的方式歸檔文章
  • 個人介紹,github地址
  • 搜索框,能夠搜索文章

后臺管理

  • 管理主頁,記錄最新文章,最新留言,最近日志等

    • 最近日志記錄登錄IP,地址,操作等
    • 記錄一天的訪問量
  • 發布文章

    • 使用markdown編輯器,支持插入代碼,插入圖片等功能
    • 能夠給文章添加縮略圖。
    • 可將文章存為草稿或者發布
    • 文章可選擇分類和標簽,自定義url
    • 文章可控制是否允許評論
  • 文章管理

    • 以列表形式展示文章信息
    • 在可選操作中增加刪除,預覽,編輯功能
    • 支持分頁顯示
    • 增加搜索功能,可根據文章名文章信息
  • 分類管理

    • 可以新增、刪除、修改分類
  • 文件管理

    • 支持文件上傳
    • 支持刪除已上傳的文件
  • 友情鏈接

    • 支持增加友情鏈接
    • 支持刪除友情鏈接
  • 系統設置

    • 支持修改密碼
    • 支持備份數據庫
    • 支持黑名單配置

非界面需求

  • 日志記錄,記錄來訪IP名單
  • 每天定時備份數據庫

安裝部署需求

  • 可以使用docker方式部署,也可支持-jar方式
  • 使用springboot自帶方式打包

非功能性需求

性能需求

  • 首頁響應的時間不超過1秒鐘
  • 文章頁響應時間不超過1秒鐘

項目設計

總體設計

  • 本項目用到的技術和框架

    • 項目構建: maven
    • web框架:spring boot
    • 數據庫ORM:mybatis
    • 數據庫連接池:Druid
    • 分頁插件:PageHelper
    • 數據庫:mysql
    • 緩存NOSQL:redis
    • 前段模板:thymeleaf
    • 文章展示:使用commonmark,將markdown轉成html頁面
  • 本項目的關鍵點

    • 采用springboot開發,數據庫使用連接池加orm框架的模式,對于系統的關鍵業務使用redis緩存,加快響應速度
    • 整體系統采用門戶網站+后臺管理的方式搭建,門戶主要展示博客內容,后臺管理主要用于編輯文章,上傳附件,控制黑名單登錄等。
  • 環境

結構設計

熟悉spring開發的同學,相信對此結構圖也并不陌生。平時的開發過程中,結構設計是重要的緩解,特別是協作開發的時候,明細的分包,模塊化,可減少在git提交時的沖突。

業務設計

本模塊主要介紹一些關鍵的業務流程。

  • 發布文章流程:

  • 修改文章的流程大致上和發布是相似的,這里不再贅述了

  • 登錄流程

?

?

文件上傳

  • 在寫文章的時候,通常會使用到圖片,可以引用一些網絡上的圖片,更好的是本系統支持上傳文件和圖片
  • 將文件區別為圖片和其他,圖片支持預覽模式
  • 文件路徑設計成絕對路徑,在web系統中可直接引用
  • 文件按月份歸類,文件名以uuid的重新命名存儲
  • 其他文件支持下載
  • 文件上傳流程圖

?

  • 首頁展示
    • 首頁也文章列表+圖片的形式展示內容,默認最大顯示12篇文章,包括發布時間和分類
    • 上部展示菜單欄,支持搜索,歸檔頁等功能
    • 右側顯示菜單欄,展示個人github地址,個人信息,標簽云等
    • 使用redis緩存首頁的html頁面,加速訪問。

打包、部署和運行

  • 本項目采用springboot的maven插件進行打包,打成jar形式
  • 部署方式:使用**nohub java -jar xxx.jar &**的方式,啟動項目

?

數據設計

用戶表:t_users

用戶表主要管理后臺管理用戶。

文章表:t_contents

主要管理文章內容,外鍵為cid

標簽表:t_metas

管理標簽信息,外鍵為mid

文章標簽關系表:t_relationships

記錄文章和分類的關系,多對多表

?

性能與可靠性

性能設計

  • 將文章內容寫入redis中,加快訪問速度

可靠性設計

  • 后臺管理,可以系統日志,查看系統運行狀態
  • 定時發送郵件,發送服務端的可用內存,cpu,最新日志,硬盤情況進行監控
  • 對于惡意的IP,支持黑名單設置,禁止訪問

開發流程

數據庫的curd

  • 首先,編寫sql語句,創建數據庫。

  • 本項目的crud操作采用mybatis的逆向功能,對于特殊操作,需要自己手寫sql語句

  • springboot如何使用mybatis,以及mybatis的逆向工程,請參考springboot與mybatis

  • 編寫service層,根據需求分析和概要設計,將具體業務轉成具體代碼

  • 關于事務的使用,使用srping中的@Transactional,還是很方便的

  • 本流程的開發不是特別難,關鍵在于業務的實現

頁面與展示

  • 作為一個后端開發,css的功力還是有所欠缺的,所以也是用了妹子UI主題,和tale的后端頁面,大大減少了頁面的開發難度,特此感謝

  • 頁面與后端的交換主要是在controller包中,springboot的頁面開發和springmvc是幾乎一樣的,@PostMapping和@GetMapping這兩個注解也是方便了開發。

  • 統一的異常處理,使用@ControllerAdvice,定義異常頁面,設置自動跳轉500,404頁面。

  • 攔截器,獲取http請求中的ip,判斷是否在黑名單(如果在,則禁止訪問系統)

其他功能

  • 該項目是在My blog基礎上修改的,修復了部分bug,增加添加黑白單功能,指定文章縮略圖

  • 分析訪問量最多的數據,主要在于文章訪問部分,將文章放入redis緩存。每次編輯完文章后,更新緩存

  • 每天定時發送郵件,匯報服務器運行狀態和最新日志,手機即可查看。

系統安全

  • 使用阿里云云主機,借助阿里云本身防護機制,

  • 在主機中安裝denyhosts,對于嘗試暴力破解ssh的IP,實施封禁

  • 對于評論部分,能夠抵御sql注入和xss攻擊

打包測試

  • 使用springboot本身測試方式,在集成測試之前,先進行單元測試

  • 打包,使用springboot的mvn插件,打成jar包

網站建設

  • 服務器選用的是阿里云centos7
  • 域名是騰訊送的
  • 網站需要備案,備案的話,只要按照阿里云提示的流程走,就可以了,就是上傳個人身份信息,和審核,大概需要一個月的時間

開發總結

  • springboot常用注解

  • srpingboot整合mybatis

  • springboot之郵件的發送

  • springboot之thymeleaf的使用

  • springboot之定時任務

  • springboot之netty的使用

  • springboot之redis的整合與使用

  • 以上是我學習springboot總結的一些博客,特此分享

網站地址

www.janti.cn

項目代碼

?喜歡的話,給個推薦,給個star鼓勵一下

如果有項目上的一些問題,可直接郵箱我 jantent@qq.com

?

轉載于:https://www.cnblogs.com/superfj/p/9044532.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254594.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254594.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254594.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

halcon深度學習算子,持續更新

目錄Deep Learning 深度學習Classification:分類apply_dl_classifierclear_dl_classifierclear_dl_classifier_resultclear_dl_classifier_train_resultdeserialize_dl_classifierget_dl_classifier_paramget_dl_classifier_resultget_dl_classifier_train_resultre…

python day5--正則表達式

#----正則表達式 import re elink <a href"(.*)">(.*)</a> info <a href"http://www.baidu.com">baidu</a> cinfo re.findall(elink,info) print (cinfo) import re print(re.search (r^a,abc\neee)) #預期結果 ^匹配字符開…

WCF系列教程之WCF客戶端調用服務

1、創建WCF客戶端應用程序需要執行下列步驟 (1)、獲取服務終結點的服務協定、綁定以及地址信息 (2)、使用該信息創建WCF客戶端 (3)、調用操作 (4)、關閉WCF客戶端對象 二、操作實例 1、WCF服務層搭建:新建契約層、服務層、和WCF宿主,添加必須的引用(這里不會的參考本人前面的隨…

《高效程序員的45個習慣》-之三

請您在閱讀本文之前&#xff0c;先了解《高效程序員的45個習慣》-之二。 每一期都會涉及15個話題&#xff0c;用3期來列出這45個習慣&#xff0c;每次不貪多&#xff0c;貪精&#xff0c;大家如果有空&#xff0c;一定要細細品味這15個習慣。 注意&#xff1a;每一個好的習…

負載均衡的那些事?

什么是負載均衡&#xff1f;1、負載&#xff1a;就是后端系統的承載能力。比如同等條件下&#xff0c;一個1核cpu-1G內存的機器的承載能力一般會比8核cpu-8G內存的機器要差&#xff1b;相同配置下&#xff0c;一個cpu利用率為80%的機器比30%的承載能力一般要差等等。2、均衡&am…

Develop內部函數,持續更新

Develop內部函數 目錄Develop內部函數dev_clear_objdev_clear_windowdev_close_inspect_ctrldev_close_tooldev_close_windowdev_disp_textdev_displaydev_error_vardev_get_exception_datadev_get_preferencesdev_get_systemdev_get_windowdev_inspect_ctrldev_map_pardev_map…

短信認證方案,用手機短信進行上網認證如何實現?

WFilter NGF的“Web認證”模塊&#xff0c;提供了一系列的上網認證解決方案。包括如下認證方式&#xff1a;本地用戶名密碼認證AD域用戶名密碼認證企業郵箱用戶名密碼認證Radius用戶名密碼認證微信WiFi認證Facebook Wifi認證除此&#xff0c;WFilter NGF還有一個“其他”的選項…

《高效程序員的45個習慣》-末篇

請您在閱讀本文之前&#xff0c;先了解《高效程序員的45個習慣》-之三。 每一期都會涉及15個話題&#xff0c;用3期來列出這45個習慣&#xff0c;每次不貪多&#xff0c;貪精&#xff0c;大家如果有空&#xff0c;一定要細細品味這15個習慣。 注意&#xff1a;每一個好的習…

【Qt開發】V4L2 API詳解 Buffer的準備和數據讀取

前面主要介紹的是&#xff1a;V4L2 的一些設置接口&#xff0c;如亮度&#xff0c;飽和度&#xff0c;曝光時間&#xff0c;幀數&#xff0c;增益&#xff0c;白平衡等。今天看看V4L2 得到數據的幾個關鍵ioctl&#xff0c;Buffer的申請和數據的抓取。1. 初始化 Memory Mapping …

halcon File文件算子,持續更新

目錄File文件Images圖像read_imageread_sequencewrite_imagedeserialize_imageserialize_imagelist_image_fileparse_filenameMisc混合體copy_filedelete_filefile_existsget_current_dirlist_filesmake_dirread_world_fileremove_dirset_current_dirObject對象deserialize_obj…

Nginx 之一:編譯安裝nginx 1.8.1 及配置

轉http://www.cnblogs.com/zhang-shijie/p/5294162.html 一&#xff1a;基介紹 官網地址www.nginx.org&#xff0c;nginx是由1994年畢業于俄羅斯國立莫斯科鮑曼科技大學的同學為俄羅斯rambler.ru公司開發的&#xff0c;開發工作最早從2002年開始&#xff0c;第一次公開發布時間…

PI校正環節的程序實現推導過程

PI校正環節在經典控制論中非常有用&#xff0c;特別是對負反饋控制系統&#xff0c;基本上都有PI校正環節。1.下面分別說明比例環節和積分環節的作用&#xff0c;以階躍信號為例。①比例環節單獨作用以上分析說明&#xff0c;若只有比例環節的控制系統&#xff0c;階躍響應也是…

XML文檔注釋(C#)

目錄XML文檔編譯器識別的標記添加XLM注釋的方法添加XLM注釋的例子XML文檔 C#可以根據特定的注釋自動創建XML格式的文檔說明。 這些注釋都是單行注釋&#xff0c;但都以三條斜杠開頭 編譯器識別的標記 標記說明<C>把行中的文本標記為代碼&#xff0c;例如<c>int …

vs里根據json快速創建對應類的方法

有時候,我們在調用別人接口的時候,服務端返回了一個json格式的字符串,我們要獲取json里面的數據的話一般有兩種方式: 1.通過正則 2.反序列化成一個對象 第一種方式這里不再多說,主要說一下第二種,(為什么呢&#xff0c;你看到后面 你也會喜歡上第二種) 有人肯定會說, json字符串…

德魯克的《卓有成效的管理者》

是一本很好的書&#xff0c;對我有諸多的啟發&#xff0c;這本書我在短期內連看兩遍呢。 現將一些我覺得有啟發性的句子發給大家分享。 1. 一個人的有效性&#xff0c;與他的智力、想象力或知識之間&#xff0c;幾乎沒有太大的關聯。有才能的人往往最為無效&#xff0c;因為他們…

人工智能之基于face_recognition的人臉檢測與識別

不久乘高鐵出行&#xff0c;看見高鐵火車站已經實現了“刷臉進站”&#xff0c;而且效率很高&#xff0c;很感興趣&#xff0c;今天抽時間研究一下&#xff0c;其實沒那么復雜。 我基本上是基于https://github.com/ageitgey/face_recognition上的資料和源碼做一些嘗試和試驗。 …

iOS 升級https的方案選擇

我的選擇是將UIWebView統一替換為WKWebView WKWebView AFN SDWebImage https的支持之前的博客都有涉及轉載于:https://www.cnblogs.com/Jusive/p/6867531.html

預處理指令(C#)

目錄預處理指令簡介#define、#undef#if、#elif、#else、#endif#warning、#error#region、#endregion#line、#line default#pragma預處理指令簡介 微軟對預處理指令解釋鏈接 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/preprocessor-directives/index…

NSWindowController的初始化創建代碼

-(PRAboutWindowController*)aboutCtrl{ if(_aboutCtrl nil){ _aboutCtrl [[PRAboutWindowController alloc]initWithWindowNibName:"PRAboutWindowController"]; } return _aboutCtrl ; } 轉載于:https://www.cnblogs.com/PJXWang/p/5816675.html

對CMMI3的學習和思考

原文出處&#xff1a; http://tech.it168.com/m/2007-08-02/200708020957750.shtml本文請勿轉載。近來筆者所在公司正在為過CMMI3做各種準備&#xff0c;對公司的員工進行了一些相關的培訓&#xff0c;作為項目管理人員的我&#xff0c;在學習CMMI3的過程中&#xff0c;也有了自…