日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

项目03--当当网源码解读

發布時間:2024/3/7 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 项目03--当当网源码解读 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近讀了當當網的源碼,收獲很多,利用這篇博文和大家分享分享心得。

一開始,我將源碼導入eclipse的時候,jsp文件大面積出錯,原因是jdk版本不匹配,將原項目的jdk刪除,重新設置自己eclipse版本的jdk即可。

首先我們來看整個項目的 Project Explorer :

接下來我們先簡單的分析一下整個項目:

前端分析:

(1)前端頁面采用 js + css + jsp 共同完成,css 主要用于網頁中樣式的定義,用于美化網頁,js 主要是實現簡單的表單驗證和美化靜態頁面。前端主要是 結構+樣式+行為,而 css 就負責樣式, js 負責行為。
(2)前端設計的時候,有 error.jsp,表示一旦出錯,交互友好。在jsp頁面中用到了struts2的標簽庫.
(3)jsp文件按照模塊分了4個包,cart(購物車)、main()、order(訂單)、user(用戶)。
①user模塊包括用戶注冊和用戶登錄,注冊分為填寫信息,驗證郵箱和注冊成功。
②order模塊包括填寫訂單、輸入地址、生成訂單。
③cart模塊包括了購物車的所有信息。
④main模塊包括了主要的瀏覽書籍的界面,按照最新排序查詢,按照最熱排序查詢,自動推薦等功能。
(4) js 文件主要用到了 jquery 和 ajax. ajax 實現異步更新頁面數據,jquery 是一個輕量級的 js 庫,實現更方便的處理 html, 并實現動畫效果。
js 文件實現了最簡單的表單驗證:
① 頁面填入的各項信息不能為空
② 各項驗證不能全通過則點擊按鈕無效
③ 信息格式是否正確,是否為空,是否已經存在
驗證的方式有很多,最常見的是利用正則表達式進行驗證。這些都是直接在前臺頁面就進行了初步驗證,不用和后臺和數據庫交互。
(5)css文件做的是樣式,即字體,布局,顏色,邊框等,給每一個頁面都要進行樣式設計與設置,使頁面呈現出來較為酷炫的效果,直接設置就行。
(6)配置文件:
①web.xml中配置了struts2。
②mytag.tld文件是tag標簽的配置文件,配置了tag標簽后才能在jsp中調用。

后臺分析:

(1)配置文件:
struts.xml這個配置文件中配置了一些共用的攔截器,異常處理和 action .
db.properties配置文件中配置了連接數據庫的基本參數。
(2)我主要是做后臺的,所以現在開始我們來分析最核心的后臺框架以及設計思想。

先戳圖:

整個處理過程如下:
(1)頁面發送請求到 struts.xml 配置文件。
(2)配置文件根據action的對應關系去找到相應的action類。
(3)Dao層利用sql語言,通過entity實體層實現對數據的增刪改查操作。
(4)action類中通過對dao層方法的轉發以及調用實現對業務的處理,返回給struts.xml一個表示狀態的字符串。
(5)struts.xml根據返回的字符串控制跳轉到下一個要跳轉的頁面。

整個過程完成,struts2是一個基于MVC的web框架,其中Action是模型層(model),負責承載數據并返回代表狀態的字符串。控制器是 FilterDispatcher, 通過struts.xml來控制。

接下來,我們分析每一層的功能和寫法:

1.dao層:
dao層主要負責操作數據庫的數據,實現增刪改查的功能。
在這個項目中,dao層又分為三層,分別是:DAO接口,DAOImpl實現和DAOFactory。
注意,寫接口的時候每個方法都要拋出異常,涉及到查詢的時候最好將數據類型寫成List,方便后期循環遍歷查詢或者顯示。
DAOImpl是通過sql語句來實現增刪改查的。涉及到連接數據庫,獲得結果集等,連接數據庫后就可以執行插入刪除等操作。

2.entity層:
entity層主要是數據庫中表的映射,dao層與數據庫交互的時候就是通過entity層來實現的。
這里就提到了關于數據庫中表的設計:
(1)凡是涉及到時間的屬性數據類型都是long型,注意要在entity中對long型的時間的輸出格式進行處理:

//表示輸出為系統默認的輸出yyy-MM-ddSimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");return sdf.format(new Date(publish_time));  如果你想輸出為 yyyy年MM月dd日 的話使用日歷 Calendar 把String類型的切成Calendar賦值舉例:Calendar calendar = new GregorianCalendar(2012, 12-1, 21); System.out.println(sdf.format(calendar.getTime()));

(2)凡是涉及到價錢的屬性數據類型都是double型。
(3)涉及到結果集的屬性都要用List,方便后期循環遍歷。
(2)布爾類型:需要將T或者F寫進數據庫,從數據庫返回的是True或者false.即數據庫中存的是T或者F,但是頁面顯示的是true或者false.

3.interceptor層:
本層主要寫了一個攔截器,用來檢查用戶是否已經登錄。

/***檢查用戶是否登錄的套路:*先取得session中存的信息,存在一個Map中*檢查session中是否存有用戶的信息,如果有,表示已經登錄*否則用戶未登錄*/

4.util層

本層包括四個 .java文件。
(1) DBConnection.java主要實現的功能是連接數據庫:

/***jdbc連接數據庫也就是那幾步:*1.加載驅動*2.獲取連接*3.獲得結果集*4.關閉連接*/將加載驅動這一步寫在static靜態塊中,保證程序一開始運行就加載驅動和db.properties配置文件。并在main中寫測試函數,保證數據庫連接成功!

(2)EmailCode.java主要用來解析用戶輸入的郵箱驗證碼,郵箱驗證碼是隨機生成的,且包括兩部分 uuid 和 id ,當用戶輸入的郵箱驗證碼和自動生成的相匹配,則郵箱驗證成功!

隨機生成的郵箱驗證碼如下(測試了3次):

(3)ImageUtil.java

ImageUtil是生成圖片驗證碼的函數:

//圖片驗證碼 //java中利用Graphics類來實現繪制圖形 //整個驗證碼都是繪制粗來的,我們可以來分析,顯示驗證碼的最外層圖片是畫出來的,驗證碼數字或者字符是利用隨機數自動生成的 //干擾線的位置、顏色等也都是利用隨機數自動生成的。

一開始先定義這個圖片驗證碼的元素組成
包括整個圖片的長度和寬度,字體的大小,包含字符個數,以及字符隨機生成的原庫,還有干擾線的條數.
然后產生隨機字符,產生隨機干擾線,產生隨機顏色。

(4)Md5Code.java

這個文件是對用戶的密碼進行加密的過程。

/***關于MD5算法:*用戶的密碼是利用MD5算法(或者其他類似算法)經哈希運算后存儲到文件系統或者數據庫系統中*當用戶登錄時輸入密碼時,系統會將用戶密碼進行MD5哈希運算,再和數據庫中保存的MD5值進行比較,從而確認密碼的輸入是否正確*這樣可以避免用戶的密碼被具有管理員權限的人知道*優點是從MD5值反推原密碼非常困難,幾乎是不可能的。*也可用來校驗文件的完整性*/

5.最后我們來看action層:

action層分模塊,cart(購物車模塊),main(主功能模塊),order(訂單模塊),user(用戶模塊)。

(1)BaseAction: BaseAction是公共基類,用來負責處理將所有從界面傳過來的的信息保存在request和session中. 從頁面傳進來一個Map<String, Object>的session對象,這個函數負責用set方法存儲在服務器session中 從頁面傳進來一個request對象,這個函數負責用set方法將request存儲在服務器request上。

(2)cart(購物車模塊):

分析:
/**
*整個cart模塊的分析
*1.CartService是一個接口,用來聲明對購物車所作的常用操作
*2.SessionCartServiceImpl實現了CartService接口,實現了接口中的所有方法
*3.CartFactory是一個工廠
*4.CartAction是界面和后臺交互的地方,接收界面的請求,轉發請求,調用dao層實現相應的功能
*5.CartItem是一個model
*注意:購物車應存在session中,當用戶確認購買時,再將購物車信息生成一個訂單(order),以訂單形式復制到數據庫中進行存儲。
*/
(3)order(訂單模塊):

/**
*訂單提交過程:
*1.檢查購物車,若購物車中無商品,返回empty,不提交
*2.若購物車中有商品,則需要提交
* 2.1 根據用戶id獲得購物車實例(session中購物車信息)
* 2.2 創建訂單對象(order),將session中購物車的信息復制到訂單中,一條一條賦值
* 2.3 查看數據庫中是否存有訂單信息,若沒有,則將order的信息和地址信息存入數據庫
* 2.4 清空session中的購物車信息
*/

OrderConfirmAction.java完成的功能如下:

//如果購物車為空,提示錯誤信息,無法確認訂單 //如果購物車不為空,返回確認訂單成功,并計算訂單總價

(4) user (用戶模塊):

①用戶登錄 LoginAction.java:

//用戶名是郵箱名,登錄時只需要驗證郵箱和密碼是否匹配即可 //根據dao層方法驗證email和密碼是否正確,不正確返回login_form.jsp //密碼的驗證需要調用Md5驗證類,判斷新登錄的密碼是否和原來存的密碼的Md5值相同 //郵箱驗證在這個函數中,只判斷了是否為空。調用了另外寫的郵箱驗證函數來判斷。 //如果用戶名和郵箱驗證成功,則需要更新最后登錄時間和ip,將新的Model寫進session中和數據庫中,并返回狀態字符串。 //退出登錄的時候,需要清除session中存的信息 //session的生命周期在用戶退出登錄這一刻結束。

② 郵箱驗證:

//郵箱驗證函數 //當用戶登錄時輸入郵箱時,點擊郵箱驗證,會隨機生成一個對應的郵箱驗證碼a,用戶輸入郵箱驗證碼b時,系統會進行解析,若解析結果和a匹配,則郵箱驗證成功!

④ 注冊驗證:

注冊的時候,要將密碼進行加密。注冊后要將新用戶的信息加入數據庫和session中。

到這里為止,當當網的源碼分析就基本上告一段落了,整個系統層次分明,綜合利用了很多基礎的知識點。安全驗證方面做得還算完善。通過閱讀分析這個源碼,我對于struts2框架的應用更加熟練,共勉!

總結

以上是生活随笔為你收集整理的项目03--当当网源码解读的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。