【SSH網上商城專案實戰30】專案總結(附原始碼下載地址)
0. 寫在前面 |
專案基本完成了,加上這個總結,與這個專案相關的部落格也寫了30篇了,積少成多,寫部落格的過程是固化思路的一個過程,對自己很有用,同時也能幫助別人。順便說個題外話,在學習的過程中肯定會遇到很多異常出現,我們要做的首先是定位這個異常,一般異常的後面都會跟一個或多個Caused by:xxx,這些都是引起異常的原因,一般我們找最下面的一個Caused by,那裡往往才是問題的根源。如果自己解決不了,可以去谷歌、百度搜索(搜尋的時候別一大堆異常往上一貼,注意搜關鍵的部分!),一般我們遇到的問題,99.9%前人都遇到過,基本都能解決,我遇到不能解決的問題基本都是這麼幹的,自己解決的多了,就有感覺了~最後希望大家在閱讀我的部落格時會有所收穫!
廢話就不說了,下面總結一下這個網上商城的專案,我不會面面俱到,主要分為幾個模組來總結,包括 用到了哪些技術等等,具體的細節我會在文章中附上快速連結,大家可以檢視具體的某篇博文。
回憶一下這個專案,總共可以分為這些主要的模組:
- 專案環境的搭建
- 搭建後臺管理系統
- 搭建前臺顯示頁面
- 購物車相關功能
- 線上支付功能
- 郵件和簡訊的傳送功能
- 域名的申請和專案的部署
- 表單驗證和報表的顯示
下面針對每個模組,做一下具體的分析。
1. 專案環境的搭建 |
SSH的環境搭建,我個人遵循的流程是:
Spring --> Hibernate --> Spring整合Hibernate --> Struts2 --> Spring整合Struts2
每一步做完寫個測試類測試一下,這很重要,因為一步步往下走的話,出錯了也知道錯在哪一步,去哪找問題,最重要的是,這種流程熟練了,下次再搭環境的時候就易如反掌了。關於SSH環境搭建的詳細資訊請看下面的博文:
整合Struts2、Hibernate4.3和Spring4.2
基本增刪查改、Service和Action的抽取以及使用註解替換xml
2. 搭建後臺管理系統 |
jQuery EasyUI是一組基於jQuery的UI外掛集合體,而jQuery EasyUI的目標就是幫助web開發者更輕鬆的打造出功能豐富並且美觀的UI介面。開發者不需要編寫複雜的javascript,也不需要對css樣式有深入的瞭解,開發者需要了解的只有一些簡單的html標籤。
EasyUI的請求都是Ajax請求,不會有新的頁面出來,全都都在tab選項卡中或者彈出一個視窗之類的。後臺管理系統主要分為三部分:商品的類別管理、商品的管理以及銷售管理。銷售管理放在最後再說。
2.1 商品類別的管理
該部分主要涉及到了EasyUI環境和後臺框架的搭建、資料庫的級聯查詢和分頁、DataGrid資料顯示、Struts2整合json以及商品類別的新增、刪除、更新和搜尋。這也是遵循了該部分的一個完成的順序。
DataGrid以表格的形式展示資料,開發人員不需要具備特定的知識就可以操作它,它有個很好的幫助文件,比較詳細,在本專案中我也介紹了建立DataGrid的幾種方式,並且也簡單介紹了一下DataGrid的部分屬性,算是入門吧,我也是入門,多多開發才能掌握這個技術。
類別的新增、刪除、更新和搜尋功能,主要都是利用EasyUI自帶的驗證功能,新增商品類別的時,驗證輸入框的輸入是否正確,是否必填等;刪除時是否先選中的某一行或某幾行;更新的時候每次只能更新一行等,所有這些都是Ajax請求。
關於這部分內容的詳細資訊,我已經歸類了,請參考這些博文:
2.2 商品的管理
商品的管理也有新增刪除等操作,跟類別管理道理上是一樣的,有個地方就是商品的新增,需要上傳商品的照片,這裡涉及到了Struts2實現檔案上傳的功能,我們需要在伺服器端建一個資料夾專門用來儲存上傳檔案的,然後寫一個model來接收檔案,關於檔案上傳,要專門寫一個工具類,專案中開發就是這樣的,共性的程式碼一定要抽取,哪怕只有一句程式碼也要抽取!這是習慣,也是必須要做的。具體細節參下面列出的這些的博文:
商品類基本模組的搭建
查詢和刪除商品功能的實現
新增和更新商品功能的實現
Struts2實現檔案上傳功能
3. 搭建前臺顯示頁面 |
當然,前臺的頁面不是我設計的,這一塊內容我總結的是跟前臺顯示相關的一些後臺技術,比如:監聽器獲取首頁資料、定時器同步首頁資料、Hibernate二級快取處理熱門商品的快取等。
以前在學習serlvet的時候,首頁顯示資料我是這麼幹的,用一個frame,右邊顯示資料,那麼index.jsp中右邊的部分我跳轉到一個servlet,然後servlet中去資料庫中取出所有商品,放到request域中帶過去新的jsp頁面顯示。這雖然能實現,但是很笨。在這裡我用了監聽器來幹這件事,首先自己定義一個監聽器,在專案啟動的時候把資料庫中所有商品資訊給取出來,放到application域中,然後首頁中直接用EL表示式從application域中去取即可。
還有個問題,當我在管理系統中新增一個新的商品時,我必須要重啟一下tomcat才能將新的商品加到application域中,因為第一次取出來後就一直在application域中了,就定死了,後面新新增的就不在application域裡面,為了解決這個問題,我使用了定時器來同步首頁資料。於是改寫了之前寫好的監聽器,在監聽器中設定一個定時器,獲取資料庫中商品的資料的程式碼放到定時器任務中,第一次開啟立馬執行,然後每6個小時執行一次(時間可以自己隨便設定),也就是說每6個小時重新獲取一下資料庫中的商品,存到application域中。一般網站也是這麼幹的,像CSDN的個人部落格主頁也是,每天更新一次排名,大概是晚上10點左右吧,具體時間我忘了。那個時候重新整理就會看到資料的更新,這樣也減小了伺服器的壓力。
該部分具體的技術細節,參見下面這幾篇博文:
4. 購物車相關功能 |
當用戶想要結算的時候,我們得首先判斷使用者有沒有登陸,這用到了過濾器技術,專門過濾某一類的url,在過濾器中判斷當前session中有沒有user物件,如果有說明登陸過了,直接放行就行,如果沒有則跳轉到登陸頁面讓使用者登陸,登陸完成後跳轉到使用者原來想去的頁面。也就相當於門衛一樣看大門的~
剛剛也提到了,訂單資訊包含 購物車和購物項,那麼我們在訂單入庫的時候,就要考慮到它們的級聯問題,我們可以通過在兩者的POJO中設定相應的註解屬性即可,但是有個前提,像這種有外來鍵關聯的,在入庫之前都要將對應的POJO中的外來鍵部分的欄位賦好值,比如訂單要將訂單項加進去,訂單項中的訂單屬性也得賦好值,然後才可以交給Hibernate,Hibernate根據配置好的註解(或者xml檔案)將它們一起級聯入庫。
頁面快取的問題指的是,當用戶確認了訂單後,如果點後退,又會回到訂單確認頁面,剛剛的訂單確認頁面又出來了,而且session還在,資訊還是剛剛的資訊,這明顯不是我們想要的結果。我們需要在前臺和後臺同時進行處理才行。
該部分具體技術細節,請參見下面的幾篇博文:
5. 線上支付功能 |
這部分中,還涉及到了一個重要的技術,就是struts2如何處理多個model請求。一般struts2實現了ModeDriven<model>
後就可以在Action中使用該model,但是現在如果有兩個Model咋整呢?在struts2中還有另外一個叫parametersAware介面,只要實現了這個介面,並且定義一個儲存引數的Map,就可以接收request請求中的所有引數,我們可以根據不同的引數來判斷使用哪個model,這種方法可以很好的解決struts2處理多個model請求問題。
關於該部分的技術細節,請參考下列博文:
6. 郵件和簡訊的傳送功能 |
這部分也沒啥技術難點,主要是流程吧,相關的博文如下:
7. 域名空間的申請和專案的部署釋出 |
專案的部署和釋出主要有兩種方式:一種是使用FTP上傳,不過這個比較慢,而且有可能會丟失資料,個人的經驗是一點一點的發;還有一種方式就是申請域名空間那裡會提供一個部署的環境,我們只要將工程匯出為war包,然後把war包部署上去即可。
在專案部署之前有很多細節需要注意,比如要修改一些路徑啊,要修改一些資料啊等等,這些細節在我的部落格裡都有詳細的說明。該部分就一篇博文,如下:
8. 表單驗證和報表的顯示 |
後面補充了一些東西,就是Ajax動態更新購物車中商品的數量、表單的驗證和報表的顯示。
Ajax動態更新購物車中商品的數量就是純粹的Ajax技術,我學習了一下而已,表單的驗證主要是登陸表單,這個專案裡我沒做登陸了,但是登陸表單我做了一個,驗證功能也做好了,主要用到的是jQuery的Validate驗證外掛,這個外掛還是很強大的,可以直接將登陸表單加到專案中,設定一下相應的跳轉即可。
報表的顯示主要用的是JsChart,這款工具很好用,可以生成響應的js程式碼,我們要做的就是前臺傳送Ajax請求給後臺,根據實際需求從後臺取出資料,傳到前臺用JsChart圖表顯示出來即可。
該部分的博文,我列出來放在下面:
網上商城這個專案目前就寫這麼多了,CSDN下載頻道中的原始碼和我的部落格裡是同步的,大家如果有需要可以下載我在CSDN裡上傳的原始碼。後期如果要繼續完善,我會放到我的github中,也歡迎大家Follow我的github,Star我上傳的工程~下面是具體的下載地址:
【正在看本人部落格的這位童鞋,我看你氣度不凡,談吐間隱隱有王者之氣,日後必有一番作為!下面有個“頂”字,你就順手把它點了吧(要先登入哦 ),相得準,我分文不收;相不準,你也好回來找我~嘎嘎嘎】
最後給程式設計師朋友們送一波福利:
關注我的公眾號,回覆:架構、資源等關鍵詞(更多關鍵詞,關注後注意提示資訊)獲取更多免費視訊教程。
公眾號也會持續輸出高質量文章,和大家共同進步。