經過一段時間的Java Web基礎知識的學習,為了將整個知識點串聯起來,自己寫了一個簡單的網上書城小項目。整個項目架構比較簡單,適合像我這種Java Web初學者來學習參考,項目名稱web_bookstore,是基於servlet/jsp和html/css/js實現的。
整個工程代碼已push到Git,詳見地址:
整體架構
該網上書城項目分為前台和后台兩大部分,前台部分包括會員注冊、會員登錄、購買書籍、添加購物車、結算等功能,后台部分包括查看會員、查看商品、添加商品等功能。有些功能模塊還未添加,后續需要的話可以再添加上去。整體架構框圖如下所示:

代碼流程梳理
通過看整體架構框圖可知,整個項目各個模塊之間關系還是挺清晰的,下面先來一張web_bookstore工程整體圖:

src源碼包說明:
- admin包:主要是一些管理員有關的Servlet控制邏輯
- dao包:數據表類和數據表操作類
- demo包:自己寫的一些測試用例
- service包:會員相關的一些Servlet控制邏輯
- util包:一些腳手架程序
- web.filter:一些攔截器,比如控制網頁編碼等
WebContent文件說明:
- admin:管理員相關jsp頁面
- client:會員相關jsp頁面
- css:全局css文件
- img/picture:存放一些圖片
- js:一些js程序
- util:存放一些頁頭什么的
工程整體大致就是這些,下面分模塊大致梳理一下流程。
數據表
一般項目首先會設計數據表,那咱們就先說說數據表創建^_^。整個項目使用了5個數據表,分別是用戶表、商品表、訂單表、訂單項表(訂單中單個商品項信息)、消息表。具體的表結構和創建表SQL語句見源碼中的db.sql文件。下面是整個個數據庫的圖示:

會員注冊
會員需要先注冊后才能使用網上書城添加購物車和結算等功能,注意:會員注冊后需要管理員激活該會員后才能登錄。注冊界面如下所示:
會員登錄
會員注冊成功后,就可以直接登陸到網上書城了,登錄界面如下所示。注意,如果是管理員登錄的話,會跳轉到后台管理員主頁;如果是普通會員的話就會跳到會員主頁。

會員成功登陸后,服務端會生成對應的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>(); }
商品結算流程
在購物車頁面點擊現在結賬后,就會跳轉到提交訂單頁面中了。

填寫收貨地址、收貨人、電話等信息后,點擊提交訂單,就到了計算頁面了,然后輸入支付寶賬號和密碼后,商品購買流程就結束了。


管理員流程
在管理員頁面如果填寫的是管理員賬號的話,就直接到管理員管理頁面了,整圖頁面如下所示:

目前管理員功能有限,只有添加商品、查看所有商品、查看所有用戶等功能,后續可以添加上去,這里對照着源碼大致就明白了,就不具體說明了。
到此,整體項目流程已經梳理完畢,具體請點擊
參考連接

