項目基本完成了,加上這個總結,與這個項目相關的博客也寫了30篇了,聚沙成塔,寫博客的過程是固化思路的一個過程,對本身頗有用,同時也能幫助別人。順便說個題外話,在學習的過程當中確定會遇到不少異常出現,咱們要作的首先是定位這個異常,通常異常的後面都會跟一個或多個Caused by:xxx,這些都是引發異常的緣由,通常咱們找最下面的一個Caused by,那裏每每纔是問題的根源。若是本身解決不了,能夠去谷歌、百度搜索(搜索的時候別一大堆異常往上一貼,注意搜關鍵的部分!),通常咱們遇到的問題,99.9%前人都遇到過,基本都能解決,我遇到不能解決的問題基本都是這麼幹的,本身解決的多了,就有感受了~最後但願你們在閱讀個人博客時會有所收穫!
廢話就不說了,下面總結一下這個網上商城的項目,我不會面面俱到,主要分爲幾個模塊來總結,包括 用到了哪些技術等等,具體的細節我會在文章中附上快速連接,你們能夠查看具體的某篇博文。
回憶一下這個項目,總共能夠分爲這些主要的模塊:css
下面針對每一個模塊,作一下具體的分析。html
這是每一個工程都少不了的環節,並且也會出現不少亂七八糟的問題,剛開始學SSH的時候,老是苦於搭建環境,由於不太熟練,可是熟練了就行了,主要是要「有節奏的」去搭建,也就是說搭建一個環境工程得一步步來,一點點的搭,不少人上來就把jar包啪嘰一下全導進去了,而後什麼配置文件啊啪嘰一下全寫好或者從其餘地方粘貼來,而後一運行,掛了……而後各類去找問題,何苦呢?這樣的話就算搭建10次也不能駕輕就熟。飯要一口口的吃,路要一步一步的走。
SSH的環境搭建,我我的遵循的流程是:前端
spring –> hibernate –> Spring整合Hibernate –> Struts2 –> Spring整合Struts2web
每一步作完寫個測試類測試一下,這很重要,由於一步步往下走的話,出錯了也知道錯在哪一步,去哪找問題,最重要的是,這種流程熟練了,下次再搭環境的時候就易如反掌了。關於SSH環境搭建的詳細信息請看下面的博文: spring
整合Struts二、Hibernate4.3和Spring4.2 數據庫
基本增刪查改、Service和Action的抽取以及使用註解替換xmljson
後臺管理系統我用的是EasyUI搭建的,說真的,EasyUI我也是隻知其一;不知其二,前端的東西我瞭解的都不深,可是懂一點,具體用的時候也是各類去查的,也沒系統的學過,因此沒有一個良好的知識體系,可是也不影響去玩。程序猿都喜歡說玩一個技術啥的,聽起來好像挺高大上的,慢慢的我也受到一些影響,也喜歡這麼說了,不過我對於前端就真的在玩了……
jQuery EasyUI是一組基於jQuery的UI插件集合體,而jQuery EasyUI的目標就是幫助web開發者更輕鬆的打造出功能豐富而且美觀的UI界面。開發者不須要編寫複雜的JavaScript,也不須要對css樣式有深刻的瞭解,開發者須要瞭解的只有一些簡單的html標籤。
EasyUI的請求都是Ajax請求,不會有新的頁面出來,全都都在tab選項卡中或者彈出一個窗口之類的。後臺管理系統主要分爲三部分:商品的類別管理、商品的管理以及銷售管理。銷售管理放在最後再說。緩存
該部分主要涉及到了EasyUI環境和後臺框架的搭建、數據庫的級聯查詢和分頁、DataGrid數據顯示、Struts2整合json以及商品類別的添加、刪除、更新和搜索。這也是遵循了該部分的一個完成的順序。
DataGrid以表格的形式展現數據,開發人員不須要具有特定的知識就能夠操做它,它有個很好的幫助文檔,比較詳細,在本項目中我也介紹了建立DataGrid的幾種方式,而且也簡單介紹了一下DataGrid的部分屬性,算是入門吧,我也是入門,多多開發才能掌握這個技術。
類別的添加、刪除、更新和搜索功能,主要都是利用EasyUI自帶的驗證功能,添加商品類別的時,驗證輸入框的輸入是否正確,是否必填等;刪除時是否先選中的某一行或某幾行;更新的時候每次只能更新一行等,全部這些都是Ajax請求。
關於這部份內容的詳細信息,我已經歸類了,請參考這些博文: tomcat
使用EasyUI搭建後臺頁面框架
EasyUI菜單的實現
數據庫的級聯查詢和分頁
基於DataGrid的數據顯示功能
Struts2和Json的整合
DataGrid實現查詢和刪除功能
DataGrid實現添加和更新功能
下面是我本身遇到的問題:
Struts2和Json整合中的懶加載異常問題
Hibernate4執行save()或update()無效服務器
商品的管理也有添加刪除等操做,跟類別管理道理上是同樣的,有個地方就是商品的添加,須要上傳商品的照片,這裏涉及到了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點左右吧,具體時間我忘了。那個時候刷新就會看到數據的更新,這樣也減少了服務器的壓力。
使用監聽器獲取顯示在首頁的數據
監聽器如何獲取Spring的配置文件
線程、定時器定時同步首頁數據
Hibernate二級緩存處理首頁的熱門顯示
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請求問題。
關於該部分的技術細節,請參考下列博文:
易寶支付流程的一個demo
獲取銀行圖標和支付頁面的顯示
完成在線支付功能的邏輯
struts2中如何處理多個model請求
6.郵件和短信發送功能
使用Java email給用戶發郵件 郵件的發送和短信的發送這一部分相對來講比較簡單,都是一些固定的API,會用就行,記不住查查便可,我也記不住。郵件發送功能要導入mail.jar包,而後根據流程發送郵件便可,短信功能首先得去申請一下短信發送功能,申請好了後,第三方就會給咱們提供一些API接口,咱們只要參考他的就能夠開發短信發送功能了,跟支付功能有點相似,都是藉助於第三方平臺。
這部分也沒啥技術難點,主要是流程吧,相關的博文以下:
7.域名空間的申請和項目的部署發佈
這一塊主要介紹瞭如何申請一個免費的域名空間(免費15天而已啦~不過對於學習來講,enough~),雖然不是所有免費的,可是咱們主要是要搞清楚這個流程,本身走一遍也好,並不必定要上傳完整的工程,一個jsp頁面或者html靜態頁面都行。
項目的部署和發佈主要有兩種方式:一種是使用FTP上傳,不過這個比較慢,並且有可能會丟失數據,我的的經驗是一點一點的發;還有一種方式就是申請域名空間那裏會提供一個部署的環境,咱們只要將工程導出爲war包,而後把war包部署上去便可。
在項目部署以前有不少細節須要注意,好比要修改一些路徑啊,要修改一些數據啊等等,這些細節在個人博客裏都有詳細的說明。該部分就一篇博文,以下:
8.表單驗證和報表顯示
使用Ajax技術局部更新商品數量和總價 後面補充了一些東西,就是Ajax動態更新購物車中商品的數量、表單的驗證和報表的顯示。
Ajax動態更新購物車中商品的數量就是純粹的Ajax技術,我學習了一下而已,表單的驗證主要是登錄表單,這個項目裏我沒作登錄了,可是登錄表單我作了一個,驗證功能也作好了,主要用到的是jQuery的Validate驗證插件,這個插件仍是很強大的,能夠直接將登錄表單加到項目中,設置一下相應的跳轉便可。 報表的顯示主要用的是JsChart,這款工具很好用,能夠生成響應的js代碼,咱們要作的就是前臺發送Ajax請求給後臺,根據實際需求從後臺取出數據,傳到前臺用JsChart圖表顯示出來便可。
該部分的博文,我列出來放在下面: