【Java EE】從零開始寫項目【總結】

從零開發項目概述

最近這一直在複習數據結構和算法,也就是前面發出去的排序算法八大基礎排序總結Java實現單向鏈表棧和隊列就是這麼簡單十道簡單算法題等等...前端

被虐得不要不要的,即便是很是簡單有時候繞半天,想不明白。jquery

原本這篇博文是想留到我最後Java基礎複習完再寫出來的,鑑於公衆號有的同窗想看看郵箱登錄的案例,想看看Java開發後臺是怎麼的,因而我就提早寫了這篇博文git

這個項目是我本身手寫的第一個SSM項目(畢竟學了固然得搞點事情,對吧),是上年寫的小東西。固然了,如今回過頭去看這個項目是有不少的不足的,僅供參考。用的也不是新技術,只是把我以前當時所學的一些東西作一個總結...若是想學新知識的同窗看到這裏就能夠留步啦~github

因此說,你可能會看到比較舊的技術,寫得很差的地方都會有~若是是寫過項目的同窗而言,這個僅僅是一個Demo。對於沒寫過項目的同窗能夠適當的參考一下,由於用的是很是簡單的技術,都是耳熟能詳的技術,不會有什麼難懂的地方~算法

PS:但願各位大佬不要攻擊它,我沒有作任何的安全措施。即便留了評論的功能,XSS攻擊防範也沒作,請手下留情啊~spring

地址:sql

編寫記錄:數據庫

從零開始寫項目第一篇【搭建環境】編程

從零開始寫項目第二篇【登錄註冊、聊天、收藏夾模塊】c#

從零開始寫項目第三篇【在線聊天和我的收藏夾】

從零開始寫項目第四篇【搭建Linux環境】

從零開始寫項目第五篇【評論功能、備忘錄】

從零開始寫項目終極【維護網站、修復Bug】

1、功能介紹

巴巴拉拉地說了一大堆東西,咱們來看一下這個項目有什麼功能~

這是首頁,會根據當地給出三天的天氣預報:

很簡單的註冊頁面,經過郵箱來進行註冊~

2018年3月30日15:51:23,好吧,寫這篇博文的時候也出錯了.....

org.springframework.mail.MailAuthenticationException: Authentication failed

我懷疑是受權發送郵箱的密碼錯了(過期),因而我去更新了一下,果真就好了~

此時點擊註冊,就會要郵箱校驗了~

去本身的郵箱查看一下郵件:

點擊校驗它便可完成註冊(若是不校驗的話,那麼是不容許登錄的):

該項目用Shiro作了權限認證的,若是沒在登錄的狀態下點擊如下的菜單都會跳轉到登錄頁面~:


網站說明:

這個網站的功能並不複雜,開發的功能都是爲了方便使用而已。

  • 1、我的收藏夾:將經常使用的網站添加進去,值得注意的地方就是:url(網址)最好是從瀏覽器複製下來,這是最方便也是最安全的作法
  • 2、我的備忘錄:添加我的備忘錄,設置好時間、在郵件發送出去以前都可以修改時間

發送郵件好像會有點延遲~~~~


接下來是我的收藏夾了,添加一些經常使用的網址進去,並給它命名,當輸入命名部分的字符時,即會提示

用鍵盤上下鍵選中按回車便可跳轉到對應的頁面了~

2、技術介紹

網站用到的技術:

  • 1、全站頁面佈局:前端是使用Bootstrap來進行佈局的、背景是使用了GitHub的一個開源項目:particles-js。導航條來源於一個國外網站:http://toolofna.com/
  • 2、首頁:天氣預報功能來源於高德地圖API和和風天氣API組合而成,可以查看當前IP地址所在地的近三日天氣
  • 3、我的收藏夾:使用了Elasticsearch全文搜索引擎工具。
  • 4、在線聊天:使用了GoEasy的服務推送和jquery.barrager.js構建彈幕。目前該功能並未完善,敬請期待。
  • 5、註冊和登錄:使用了BootstrapValidation進行表單校驗、JavaMail發送郵件的功能、Gif動態驗證碼
  • 6、我的備忘錄:使用了Quartz任務調度工具來定時發送郵件

總概要:

  •    1. Maven構建項目
  •    2. 使用Mysql數據庫
  •    3. Tomcat做用應用服務器
  •    4. Dao層採用Mybatis,Controller層採用SpringMVC,Spring對Mybatis和SpringMVC進行整合和事務管理
  •    5. Shiro權限管理框架控制登錄以及對我的收藏夾、在線聊天功能進行認證的管理
  •    6. 使用FreeMarker來渲染頁面和配置發送郵箱的模版
  •    7. 使用Quartz和Spring整合,完成我的備忘錄的功能。
  •    8. 使用Nginx做爲代理服務器,對靜態資源處理,代理轉發

能夠看到的是,網站的功能並很少,就幾個小模塊,我就建立了三張表而已:

3、談談編寫過程

其實全部的初學者都同樣:怎麼使用Java編寫一個網站?數據庫設計感受好難,設計錯了就很麻煩了。Web前端好煩啊,本身寫的頁面很差看。這個功能感受好難實現哦,應該是挺高深的技術吧。個人基礎還不夠紮實,等我學好了再寫吧,等等等..就一直有想寫網站的念頭,但一直沒開始動手。

上面的問題我都有想過,不過我仍是寫了這麼一個小東西....

當時寫的練手項目都是視頻教程給出的題目,好比我以前發過的:移動商城項目總結納稅服務系統總結,jar包或者maven的座標都是有給出來的,項目的前臺頁面和數據庫標也大都是設計好的,我只須要補補填填寫Java代碼。而這一次,前端頁面,數據庫設計,Maven座標等等全由本身包辦

從開始到編寫結束大概花了我一個月的時間,期間要去上課呀,回家呀,一些雜事呀等等才拖了那麼久。若是本身歷來沒寫過項目的同窗建議本身折騰一下搞一個,期間能學到不少不少東西的。也不要怕本身寫得很差(只要像我同樣不要臉,不也將這麼一個小東西發到公衆號上來,發到其餘的博客平臺了麼)

那麼我本身折騰這麼一個小玩意能學到什麼了呢?

3.1搭建環境收穫

  • 在搭建環境的時候,不要以爲最新的版本就是牛逼,我要用最新的,不作過期的男人!我當時就是撘環境是用Spring5.0,Mysql驅動包6.x,jdk1.8,能用最新就用最新的,以爲本身賊牛逼。而後撘完項目就啓不動了~~~
  • 其實不必用最新的,最新的通常都會有bug,沒bug的也不必定兼容其餘的版本。要知道,Spring可不僅僅有Spring的東西,還依賴不少其餘的jar包的。一樣Mysql用最新的驅動包,逆向工程時也很差使(我在SegementFault已經見過幾回跟我同樣遇到的坑)
  • 通常最新的東西資料都挺少的,除了官方文檔,出了什麼問題都只能本身解決了。較老的版本就不同了,不少人都會遇到的問題,解決方案也會至關多~

當時我在圖書館撘了一個晚上,得出的教訓:

3.2登錄與註冊收穫

登錄與註冊這個功能只要學過JavaWeb基礎的同窗,確定作過。反正我是作了不少不少次的了,學Servlet作一次,學JSP作一次,學AJAX作一次,學xxx系統作一次,學XXX商城作一次。反正每次都會有新的東西補充上去

一開始我原本想作的是可使用微信登錄,也可使用帳戶(郵箱)登錄,也可使用短信登錄的。

後來發現微信登錄要企業認證,作不了。短信登錄要錢,不想給。

因此最後就只有用郵箱登錄了~~~固然了,該有的基本功能是有的

  • 加密密碼
  • 前臺校驗和後臺校驗參數
  • 忘記密碼,記住我功能
  • 驗證碼

因爲以前是簡單學過Shiro的,當時以爲Shiro作權限很方便,因而本身也想體驗一把~實際上用起來並無我當時學的時候那麼簡單!

在Shiro這一塊也耽誤了很多時間,由於我當時想的是使用AJAX來提交,若是正確則跳轉到首頁,若是密碼(參數..)等錯誤就返回JSON給用戶一個友好的提示。但是,Shiro的表單認證起默認返回的是一個頁面,在這裏就卡住了挺久的(有的時候沒bug,有的時候又有bug),百思不得其解...最後查閱了不少資料纔將FormAuthenticationFilter改寫好,Shiro不少東西都是要本身重寫來進行控制的,當時理解後畫的流程圖:

Shiro的「記住我」功能原本覺得是很好用的,實則也挺雞肋的..當時我作的記錄:

反正Shiro給個人感受就是不少東西都要本身來重寫,控制,而若是是小範圍使用我以爲本身寫url控制會方便。也多是個人學習姿式不對~

在登錄註冊模塊期間也本身去找了很多資料。

  • 數據庫設計上也是參考了網上和本身作了些許修改
  • JavaMail我以前是沒接觸過的
  • BootStrapValidation也是看中了就用,
  • 折騰Shiro幾天就更不用說了。

因此說,未必要使用本身熟悉的東西,只要想實現一些普通、你見過的功能,總會有方案能夠參考

3.3我的收藏夾收穫

這個自動補全功能是我一開始想要作本身網站的時候想作的。由於我習慣了使用鍵盤去找文件,去找東西。

好比,在windows下,我下了一個rolan,將經常使用的軟件丟進去,輸入一些關鍵字即提示我,而後我經過鍵盤上下選擇就能夠打開軟件了,十分方便

在編寫以前,我學過Lucene的相關知識,知道Lucene是全文搜索索引的始祖(沒作過相關案例)【參考博文:Lucene就是這麼簡單】,後來知道Solr和Elasticsearch在企業上是用得挺火的,而Elasticsearch又是各類火熱,各類吹(哈哈哈,無貶義,是挺好用的)。

因而我就花了幾天從零開始學Elasticsearch,當時參考的博主給出的是2.3.3版本,我也以爲沒什麼,就使用了。那是最新是5.x~就有了後來的博文:【Elasticsearch就是這麼簡單

Elasticsearch遇到不少的問題都得去翻英文的,因此能夠訪問外網也挺重要的~

我英語也不咋地,就慢慢看看,弄個Chrome插件翻譯唄,事情總得解決,也就這麼成長的~

3.4搭建Linux環境收穫

在以前只會Linux一些很是簡單的命令,ls cd vi這些,用得少就忘記了,因而又得從新去回顧一下Linux(這個學期也開了Linux的課,我打算過一陣再總結Linux的經常使用命令和相關要點,敬請期待~)

花了點點錢買了臺雲服務器(學生有優惠就10塊一個月),我也建議是在校的學生也能夠買來本身玩玩,熟悉一下Linux命令,還有不少軟件都在Linux下才更好地支持(例如:Elasticsearch,Nginx),尤爲Elasticsearch在windows下裝它簡直麻煩!

到了Linux階段,我也去學了下Nginx了。在沒學Nginx時我就常常據說過這個HTTP服務器了,但一直不知道它是幹嗎用的。它的最多見做用就兩個:

  • 處理靜態資源
  • 動態資源轉發到Web服務器(Tomcat)

學學Nginx的配置文件相關知識,是如何配置的,配置有什麼用~就可使用了

3.5評論功能和備忘錄收穫

評論功能在數據庫設計上也有好幾種:

  • 將回復和評論都統一當成是評論,可以使用@XXX來當作是回覆,相似與IOS知乎的評論【此作法是最簡單的】
  • 將回復和評論分開,要麼單表就多增長一個父屬性,要麼就分兩張表【稍微複雜,一個評論能夠對應多個回覆】
  • 實現評論與回覆「蓋樓」的方式,這種就是網易的評論【此種是最複雜的】

我作的只是一個留言的功能,就直接使用第一種了~

對於備忘錄就得用到Quartz時間調度框架,以前接觸過,但用的使用仍是出現了Bug

  • 在Junit測試Quartz沒有反應
  • Spring不能注入對象進Quartz的Job類中

若是業務簡單的話,下次也想玩玩Spring自帶的任務調度~

4、最後

上面簡要地介紹了個人小項目的功能和編寫過程,更詳細的業務得去看我下面的博文和源碼了~也但願你們可以有所收穫,本身動手作一個小項目~

如今看來不少沒有寫成規範(返回JSON、JavaScript模塊化)等等,但畢竟是本身學編程的成長經歷,看回之前的代碼總會有這種感受。我短期內也不作重構了,學Java基礎去~

後面的博文幾乎都是Java基礎或算法(少許)了,但願你們多多支持哈,在校的日子我會盡可能保持日更的~

若是文章有錯的地方歡迎指正,你們互相交流。習慣在微信看技術文章,想要獲取更多的Java資源的同窗,能夠關注微信公衆號:Java3y

相關文章
相關標籤/搜索