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

来源:https://www.cnblogs.com/Java3y/archive/2018/03/31/8680850.html
-Advertisement-
Play Games

從零開發項目概述 最近這一直在複習數據結構和演算法,也就是前面發出去的排序演算法 "八大基礎排序總結" , "Java實現單向鏈表" , "棧和隊列就是這麼簡單" , "十道簡單演算法題" 等等... 被虐得不要不要的,即使是非常簡單有時候繞半天,想不明白。 本來這篇博文是想留到我最後Java基礎複習完再 ...


從零開發項目概述

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

被虐得不要不要的,即使是非常簡單有時候繞半天,想不明白。

本來這篇博文是想留到我最後Java基礎複習完再寫出來的,鑒於公眾號有的同學想看看郵箱登陸的案例,想看看Java開發後臺是怎麼的,於是我就提前寫了這篇博文

這個項目是我自己手寫的第一個SSM項目(畢竟學了當然得搞點事情,對吧),是上年寫的小東西。當然了,現在回過頭去看這個項目是有很多的不足的,僅供參考。用的也不是新技術,只是把我之前當時所學的一些東西做一個總結...如果想學新知識的同學看到這裡就可以留步啦~

所以說,你可能會看到比較舊的技術,寫得不好的地方都會有~如果是寫過項目的同學而言,這個僅僅是一個Demo。對於沒寫過項目的同學可以適當的參考一下,因為用的是非常簡單的技術,都是耳熟能詳的技術,不會有什麼難懂的地方~

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

地址:

編寫記錄:

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

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

從零開始寫項目第三篇【線上聊天和個人收藏夾】

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

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

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

一、功能介紹

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

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

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

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

org.springframework.mail.MailAuthenticationException: Authentication failed

我懷疑是授權發送郵箱的密碼錯了(過時),於是我去更新了一下,果然就行了~

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

去自己的郵箱查看一下郵件:

點擊校驗它即可完成註冊(如果不校驗的話,那麼是不允許登陸的):

該項目用Shiro做了許可權認證的,如果沒在登陸的狀態下點擊以下的菜單都會跳轉到登陸頁面~:


網站說明:

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

  • 一、個人收藏夾:將常用的網站添加進去,值得註意的地方就是:url(網址)最好是從瀏覽器複製下來,這是最方便也是最安全的做法
  • 二、個人備忘錄:添加個人備忘錄,設置好時間、在郵件發送出去之前都能夠修改時間

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


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

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

二、技術介紹

網站用到的技術:

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

總概要:

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

可以看到的是,網站的功能並不多,就幾個小模塊,我就創建了三張表而已:

三、談談編寫過程

其實所有的初學者都一樣:怎麼使用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自帶的任務調度~

四、最後

上面簡要地介紹了我的小項目的功能和編寫過程,更詳細的業務得去看我下麵的博文和源碼了~也希望大家能夠有所收穫,自己動手做一個小項目~

現在看來很多沒有寫成規範(返回JSON、JavaScript模塊化)等等,但畢竟是自己學編程的成長經歷,看回以前的代碼總會有這種感覺。我短時間內也不做重構了,學Java基礎去~

後面的博文幾乎都是Java基礎或演算法(少量)了,希望大家多多支持哈,在校的日子我會儘量保持日更的~

如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章,想要獲取更多的Java資源的同學,可以關註微信公眾號:Java3y


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作用域 (1)、作用域也叫執行環境(execution context)是JavaScript中一個重要的概念。執行環境定義了變數或函數有權訪問的其他數據,決定了它們各自的行為。在JavaScript中變數的作用域有全局作用域和局部作用域,全局變數是指變數沒有在函數體內聲明或者在函數內聲明的時候沒有 ...
  • 廢話不多少,下麵是對我從開發微信小程式的第一步開始到發佈的總結,覺得對您有幫助的話,可以贊賞下,以對我表示鼓勵。 一:首先註冊登錄微信公眾平臺,這個平臺很重要,以後查文檔全在上面看。https://mp.weixin.qq.com/。然後在設置=》開發設置那裡獲取appID; 二:下載微信開發者工具 ...
  • vue使用element ui的el input監聽不了回車事件,原因應該是element ui自身封裝了一層input標簽之後,把原來的事件隱藏了,所以如下代碼運行是無響應的: 解決方法需要在事件後面加上.native ...
  • 優先順序從高到低排列,瀏覽器優先滿足前面的規則 1,!important優先順序最高 2,內聯樣式 3,作者>讀者>瀏覽器 4,優先順序權重加法 id選擇器+100/個 類/偽類選擇器+10/個 元素名+1/個 5,權重值相等則以後出現的為準 ...
  • 在iPhone中調試,大體上與上文 安卓中的移動頁面調試 類似,區別主要是iOS系統中的一些限制,導致某些工具無法使用。 本文基於此,簡要介紹在iPhone中如何調試頁面。 最終可以實現在Mac平臺使用Safari(或結合ios_webkit_dubug_proxy使用Chrome)調試手機中Saf ...
  • 筆者最近在做一個項目的後臺,用到了EasyUI的datagrid控制項,並開啟了行內編輯功能,實際上也就是使用了edatagird這個空間,引用了edatagrid.js,一切似乎都做的順風順水,添加數據、修改數據都沒有問題,然而到刪除數據的時候居然沒有反應,折騰了好幾天也沒有任何進展。截圖如下: 前 ...
  • css: *{ margin: 0; padding: 0; /* 禁止用戶點選網頁內容 */ -webkit-touch-callout:none; -webkit-user-select:none; -khtml-user-select:none; -moz-user-select:none; ...
  • 內容:String Buffer/String Builder方法 + 兩個簡單練習是緩衝區,最後都會轉成字元串處理,有局限性###########方法添加元素: .append()插入元素: .insert(index,value)刪除元素: .delete(start,end)修改元素: .re ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...