通過一段時間的Java Web基礎知識的學習,爲了將整個知識點串聯起來,本身寫了一個簡單的網上書城小項目。整個項目架構比較簡單,適合像我這種Java Web初學者來學習參考,項目名稱web_bookstore,是基於servlet/jsp和html/css/js實現的。css
整個工程代碼已push到Git,詳見地址:html
該網上書城項目分爲前臺和後臺兩大部分,前臺部分包括會員註冊、會員登陸、購買書籍、添加購物車、結算等功能,後臺部分包括查看會員、查看商品、添加商品等功能。有些功能模塊還未添加,後續須要的話能夠再添加上去。總體架構框圖以下所示:git
經過看總體架構框圖可知,整個項目各個模塊之間關係仍是挺清晰的,下面先來一張web_bookstore工程總體圖:github
src源碼包說明:web
WebContent文件說明:sql
工程總體大體就是這些,下面分模塊大體梳理一下流程。數據庫
通常項目首先會設計數據表,那我們就先說說數據表建立^_^。整個項目使用了5個數據表,分別是用戶表、商品表、訂單表、訂單項表(訂單中單個商品項信息)、消息表。具體的表結構和建立表SQL語句見源碼中的db.sql文件。下面是整個個數據庫的圖示:cookie
會員須要先註冊後才能使用網上書城添加購物車和結算等功能,注意:會員註冊後須要管理員激活該會員後才能登陸。註冊界面以下所示:session
會員註冊成功後,就能夠直接登錄到網上書城了,登陸界面以下所示。注意,若是是管理員登陸的話,會跳轉到後臺管理員主頁;若是是普通會員的話就會跳到會員主頁。架構
會員成功登錄後,服務端會生成對應的Cookie,並寫入請求響應中,Cookie格式爲user=user_id形式,user_id爲用戶註冊後生成的一個對應id。
接着就會跳轉到商品主頁上去,商品主頁頁面以下所示,目前商品表中只有2件商品:(
在商品下面點擊加入購物車後就會將該商品添加到購物車中。
注意:購物車是以Session形式保存在服務端的,由於網上書城是多用戶登陸的,如何保證多個用戶的Session不衝突呢,也就是購物車是如何實現的呢?一個用戶的購物車在服務端對應一個Session,該Session對應的屬性名字爲cart+user_id,user_id也就是用戶登陸成功寫入到Cookie的那個user值,由於cart+user_id是和用戶一一對應的,因此這樣就保證了全部用戶的Session不會衝突,對應的源碼在AddCarServlet邏輯中,以下所示:
// 先判斷用戶是否登陸 Cookie cookie = ServletUtils.getCookie(request, "user"); if (cookie == null) { response.getWriter().println("抱歉,你當前還未登陸,2秒後調到登陸頁面"); response.addHeader("refresh", "2;url=" + request.getContextPath() + "/client/login.jsp"); return; } // 獲取購物車對象 HttpSession session = request.getSession(); Map<Product, Integer> cart = (Map<Product, Integer>) session.getAttribute("cart" + cookie.getValue()); if (cart == null) { cart = new HashMap<Product, Integer>(); }
在購物車頁面點擊如今結帳後,就會跳轉到提交訂單頁面中了。
填寫收貨地址、收貨人、電話等信息後,點擊提交訂單,就到了計算頁面了,而後輸入支付寶帳號和密碼後,商品購買流程就結束了。
在管理員頁面若是填寫的是管理員帳號的話,就直接到管理員管理頁面了,整圖頁面以下所示:
目前管理員功能有限,只有添加商品、查看全部商品、查看全部用戶等功能,後續能夠添加上去,這裏對照着源碼大體就明白了,就不具體說明了。
到此,總體項目流程已經梳理完畢,具體請點擊
參考鏈接