1. 程式人生 > >taotao電商系統專案總結

taotao電商系統專案總結

概述:

淘淘商城是採用分散式架構部署的一個大型網上商城系統,類似於京東商城。本系統分前臺系統和後臺系統。前臺系統主要負責商城的頁面的顯示功能,這裡採用的面向服務的方式,pc端手機端只負責顯示頁面,業務邏輯都在服務層實現,客戶端呼叫服務端介面來實現顯示功能。

在前臺系統中主要分為:客戶端:系統前臺頁面顯示系統(portal,8082)。服務端系統:(1)rest系統(8081):負責呼叫CMS系統的內容,將CMS系統的內容顯示到頁面,(這裡的CMS內容管理系統,在後臺實現)。(2)商品的搜尋系統(8083),當在頁面輸入商品資訊時,可以搜尋商品。這裡用到了solr技術,利用solr索引庫來實現。(3)SSO(單點登陸系統,8084),因為商城採用分散式的系統部署,將整個系統劃分為幾個子系統,所以對於使用者的訪問許可權是一個問題,如何實現一次登陸即其他系統都可以免登陸,sso可以解決。(4)訂單系統(8085):商城購物少不了訂單系統,所以將此作為一個獨立工程編寫。

後臺系統功能:商城的後臺系統主要是負責商品的分類,新增、規格引數。CMS系統(這裡主要是廣告的分類、新增)。

本系統前臺介面設計採用的easyUI的設計,後臺採用springMVC、spring、mybatis框架,擦用java語言程式設計。

步驟分析:

一、專案需求分析:模仿京東商城系統。

二、專案資料庫設計:商品資訊表、商品資訊分類表、商品資訊描述表、商品規格引數表、

CMS系統內容表、CMS系統內容分類表

使用者表、訂單表、訂單的具體明細表

三、具體實現:

1、框架的搭建:

       這裡採用maven來管理整個專案。優勢兩點:1、maven可以以管理整個專案工程,方便熱部署專案,專案釋出方便。2、maven管理你jar包具有很大的優勢,可以自動下載所需的jar包,只需定義好版本即可,其他maven自動下載。

因為這個專案比較大,子工程比較多,所以我們建立一個pom型別(聚合工程)parent來管理裡所有jar包的版本,這樣其他 子工程都依賴此工程。版本得到了統一,不會出現因版本問題導致的錯誤。其次建立一個專門的(jar型別)common工具類,可以將系統中使用到的工具類都加入此類,其他類也依賴此類,就可以使用這裡面的工具了。此工具類也依賴parent類。

下面就是利用SSM框架來搭建工程了:利用框架搭建工程主要分兩步:框架所依賴的jar包,框架的配置檔案。弄清了這兩點就好辦了。框架主要分三層:dao層(mybatis)(主要是與資料庫打交道)、service層(spring)(主要是負責呼叫dao層,實現業務邏輯的編寫)、controller層(springMVC)(這裡主要呼叫service層,根據jsp頁面的內容,將jsp的內容傳遞到service層,然後講資料顯示到jsp頁面)。所以這裡的配置檔案也就:mybatis的SqlMapConfig.xml (主要是它的外掛配置,資料庫配置放在dao)。spring將mybatis和springMVC整合起來的application_context_dao.xml(配置資料來源,與資料庫的連線),application_context_service.xml(將service的檔案包引入工程)。application_context_transation.xml(這裡將事務獨立出來,主要是事務的配置)

SpringMVC.xml(主要是前端控制器,試圖解析器的配置)

框架搭建完成後,利用mybatis的逆向工程生成各個表的mapper.xml和mapper.java檔案、pojo檔案。

2、具體的功能的實現邏輯

(1)後臺系統功能實現

(這裡主要講商品的查詢、新增、規格引數、CMS系統的分類、新增)

其實對於功能模組的分析主要有三點:

從哪個資料表獲取(主要mapper實現);頁面傳遞是否有引數,頁面的url是什麼(controller實現);返回值是什麼(即頁面展示的格式是什麼樣子的,這個根據jsp使用的框架來決定,比如這裡的easyUI,可以查詢它的api文件,找到其返回值型別);

A、商品的查詢邏輯分析:其實對於商品的查詢主要就是從資料庫中將所有商品查詢出來。這簡單的查詢很簡單,可是在頁面分頁顯示出來這就是一個問題了。這裡到了mybatis的分頁外掛pageHelper來實現。

傳入引數:Easyui頁面預設有page、rows引數傳遞。

返回值:easyui的格式即datagrid的格式,專門編寫一個對應的pojo類放入專門工具類中使用,返回格式即這個pojo。

邏輯:Dao層:Dao層用mybatis的逆向工程

Service呼叫mapper的查詢和分頁實現邏輯。

Controller即將引數傳遞過去,url寫好

B、商品新增:商品新增即將商品資訊寫入資料庫,頁面傳遞的內容當點選提交按鈕時直接寫入資料庫,只需補全沒有的欄位即可。

這裡涉及到商品的類目選擇、上面的圖片上傳、商品的描述資訊。

類目選擇首先得將類目展示出來,這裡使用的非同步樹的格式。查詢api發現非同步樹的返回值的格式。主要思路是:根據parentId來查詢類目表,預設從0開始,非同步樹有個特點,就是每次獲取到的id,如果有子節點,會發送url再次請求,如果沒有子節點則不傳送請求,所以可以都遍歷到所有節點。(這個是tree的特點,自動請求)

非同步樹的特點:從最頂層開始讀取,先讀頂層節點,如果是閉合狀態,傳送請求給伺服器讀取子節點,子節點的狀態依賴於父節點,當展開一個封閉的節點時,如果節點沒有載入子節點,它將會把節點的id的值作為http請求引數並命名為id,通過url傳送到伺服器上檢索子節點。所以遍歷一次後,如果父節點還是父節點(即存在子節點)則檢索下面的子節點的內容,將子節點的id作為parentId來檢索下面的節點。如果不是父節點了,則開啟下面列表。也就是說這些實現都是 非同步樹自動實現的,我們只需要判斷父節點的狀態即可,下面的檢索根據這個狀態進行。

圖片上傳功能:因為商城的圖片非常多,所以我們將這麼多的圖片儲存在圖片伺服器中,然後將圖片在伺服器中的具體url寫入資料庫,供前臺呼叫。前臺獲取到這個url既可獲取到這個圖片。這裡圖片上傳到伺服器的功能:先生存圖片的名稱,然後生成圖片儲存的格式,然後利用ftpUtil將圖片上傳到伺服器,返回一個url連結。

商品規格引數,這裡採用的規格引數模板的形式。:

這裡有兩個表:一個模板表(根據商品的分類建立的模板,根據分類id),一個展示模板表(根據商品的資訊寫入模板表,根據商品id查詢商品資訊,然後寫入對應訂單模板中,然後生成HTML)。

商品的描述:這裡採用文字的形式儲存的,寫入即可。富文字編輯器。

CMS分類:這裡的格式也是用了非同步樹的格式,所以顯示方法是一樣的。

分類新增:像表中插入資料庫即可。

(2)前臺功能實現

首頁大廣告位的實現:這裡是從CMS系統中獲取廣告位的圖片,然後展示在頁面。但是前臺跟後臺是不一樣的埠,如何從前臺訪問後臺呢,可以使用jsonp的形式。但是我們這裡系統是採用面向服務的程式設計,所以採用rest介面的方式然後功能前臺呼叫,這裡用的httpcliet來呼叫介面。

商品搜尋功能的實現:

首先在linux下部署好solr伺服器,然後將資料庫的表字段匯入到solr索引庫。然後編寫search服務介面,然後供前臺呼叫這個服務介面。

Rest功能:

商品詳情頁面展示:寫三個服務:根據id查詢商品的具體資訊顯示到頁面,根據id查詢商品的內容表,根據id查詢商品的規格引數,即將三個資訊展示到頁面。然後前臺分別呼叫。

SSO系統:這裡涉及到攔截器。

       這裡是利用了sso的介面文件,即校驗介面、註冊、登入介面、根據token查詢使用者介面、安全退出介面。

   這個的呼叫服務層是利用jsonp的形式訪問的服務介面,實現跨域訪問。客戶端全部在jsp頁面實現的。

具體流程:

     當用戶點選註冊的時候,跳轉到註冊頁面,即使用者資訊的儲存功能。檢驗使用者名稱是否存在、手機號和郵箱不能為空。

       當用戶點選登入按鈕的時候,使用者輸入使用者名稱和密碼,檢驗使用者名稱是否在資料庫中存在,然後使用者名稱密碼是否正確。這裡的密碼是用了spring的MD5加密技術。當全部成功後,給使用者頒發一個token令牌(利用uuid實現),然後將token存入到redis中(token的key是它生成的號,值是使用者的名字),然後設定在redis的過期時間。這相當於使用者的session。

   然後將token寫入cookie中,前臺頁面利用jsonp呼叫,根據cookie中的token的值,呼叫sso的根據token查詢使用者的服務,檢視使用者是否有效,如果有效則將使用者返回前臺頁面,前臺頁面獲取使用者的使用者名稱顯示在首頁,表示***已登陸。

   這裡的cookie是設定了共享域,即全部子系統都可以訪問到cookie。

當用戶登入其他子系統時,先從從cookie中獲取token資訊,根據token資訊獲取使用者資訊,判斷使用者資訊是否有效,如果有效則放行,如果無效,則利用攔截器攔截跳轉到登入頁面。使用者再次登入的時候重新整理redis的時間,重新設定有效期。

攔截器的攔截,在springMVC.xml中設定攔截的名稱。

購物車功能:

購物車功能注意到這裡商品加入購物車,是將購物車儲存在cookie中。這裡用到cookieUtil工具來實現這些儲存刪除功能。在商品詳情頁面點選“加入購物車”按鈕提交一個請求吧商品id傳遞給Controller,Controller接收id,Controller呼叫Service根據商品id查詢商品基本資訊,購物車的商品專門寫一個pojo物件,因為商品的很多資訊購物車裡面用不到。將購物車的商品的pojo,把商品寫入cookie中,加入cookie之前先從cookie中把購物車的商品取出來判斷當前購物車商品列表中是否有此商品,如果有數量加一,如果沒有新增一個商品,數量為1。展示給使用者購物車列表。

訂單系統:訂單系統主要是訂單的建立、查詢、修改、刪除功能。

功能:接收三個引數,

1、對應訂單表的pojo。

2、訂單明細表對應的商品列表。每個元素是訂單明細表對應的pojo

3、物流表對應的pojo