溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

estore電子商城-知識整合

發(fā)布時間:2020-06-23 21:56:19 來源:網(wǎng)絡(luò) 閱讀:1214 作者:yayaAA 欄目:開發(fā)技術(shù)

Estore電子商城 --- 知識的整合

 

分析需要的功能

01.用戶注冊(發(fā)送激活郵件/JS前臺實現(xiàn)數(shù)據(jù)校驗/驗證碼)

02.用戶激活

03.用戶登錄(記住用戶名/30天內(nèi)自動登陸)

04.用戶注銷

 

05.添加商品(文件上傳)

   06.查看商品列表

    07.查看商品詳情

    08.加入購物車(Cookie *session 數(shù)據(jù)庫)

09.增刪改查購物車

 

    10.生成訂單(多表設(shè)計)

    11.訂單查詢(多表查詢)

12.訂單刪除(事務(wù)管理/注解+本地線程+動態(tài)代理實現(xiàn)事務(wù)管理,AOP--面向切面編程)

 

    13.在線支付(體驗調(diào)用第三方接口實現(xiàn)特定功能)

    14.銷售榜單下載(利用程序生成excel數(shù)據(jù)/文件下載)

    

權(quán)限過濾器

全站亂碼過濾器

自動登錄過濾器

1.只有未登錄的用戶才能自動登錄,2,只有帶了自動登錄cookie的用戶才能自動登錄,3.自動登錄cookie的用戶名密碼正確才能自動登錄4.放行資源

 

數(shù)據(jù)庫多表設(shè)計

4張表:

   1. 用戶:id 用戶名 密碼 昵稱 郵箱 激活狀態(tài) 激活碼 角色 注冊時間

   2. 商品:id 商品名稱 商品種類 商品庫存數(shù)量  商品單價 圖片url 描述信息

   3. 訂單:id 下單時間 收貨地址 支付狀態(tài) 訂單金額 用戶編號(外鍵)

   4. 訂單項: 訂單id  商品id  購買數(shù)量    

外鍵分析:

    用戶 1 -- * 訂單    1用戶可以有多個訂單  1對多)

    商品 * -- *訂單  (1個訂單有多種商品,1種商品被多個訂單購買。 訂單項表保存商品與訂單的多對多的關(guān)系)

    

create database estore;

    用戶:create user estore identified by 'estore';

    授權(quán):grant all on estore.* to estore;

    

use estore;

1. 用戶:id 用戶名 密碼 昵稱 郵箱 角色 激活狀態(tài) 激活碼  注冊時間

    create table users (

    id int primary key auto_increment,

    username varchar(40),

    password varchar(100),

    nickname varchar(40),

    email varchar(100),

    role varchar(100) ,

    state int ,

    activecode varchar(100),

    updatetime timestamp

        );

 

 

 

 create table products(

    id varchar(100) primary key ,

    name varchar(40),

    price double,

    category varchar(40),

    pnum int ,

    imgurl varchar(100),

    description varchar(255)

    );

 

 

  3. 訂單:id 訂單金額 收貨地址 支付狀態(tài) 下單時間 用戶編號(外鍵)

create table orders(

    id varchar(100) primary key,

    money double,

    receiverinfo varchar(255),

    paystate int,

    ordertime timestamp,

    user_id int ,

    foreign key(user_id) references users(id)

    );

 

    create table orderitem(

    order_id varchar(100),

    product_id varchar(100),

    buynum int ,

    primary key(order_id,product_id), #聯(lián)合主鍵,兩列的值加在一起作為這張表的主鍵使用

    foreign key(order_id) references orders(id),

    foreign key(product_id) references products(id)

    );

    

      

設(shè)計模式:

javaee經(jīng)典三層架構(gòu)+工廠類實現(xiàn)解耦

     包結(jié)構(gòu):

            com.itheima.web

                        .service

                        .dao

                        .util

                        .domian

                        .factory

                        .exception

                        .test

                        .filter

                        .listener

                        

 導(dǎo)入第三方jar

       *junit 測試

        *JSTL 標準標簽庫//myeclise部署到tomcat的時候,自動把Javaee5jar發(fā)到webapp應(yīng)用的lib目錄下了,如果不發(fā)布,則自己導(dǎo)入jstljar

        beanutils

        mysql驅(qū)動

        c3p0

        dbutils

        commns-fileupload

              

   配置文件

            c3p0-config.xml

            config.properties                

            

    

配置虛擬主機:

 在tomcat/conf/server.xml中配置

   <Host name="www.estore.com" appBase="E:\resource\resource\20140105\Estore">

       <Context path="" docBase="E:\resource\resource\20140105\Estore\WebRoot" />

</Host>

 

系統(tǒng)-hosts文件中配置C:\Windows\System32\drivers\etc\hosts

         127.0.0.1www.estore.com

    

具體開發(fā)步驟  

前置開發(fā):

    工廠類實現(xiàn)解耦:1.寫接口 2.配置文件配置 3.工廠類提供方法基于配置文件生成對象

    全站亂碼解決

     ~權(quán)限控制

    javabean

    工具類

    

        

1.用戶注冊

   index.jsp -- 如果用戶沒有登錄,則提示 歡迎光臨游客 注冊 登錄  如果用戶已經(jīng)登錄 提示 歡迎回來xxx,注銷

   regist.jsp -- 提供注冊表單 (驗證碼/js實現(xiàn)表單校驗)

   RegistServlet -- 校驗驗證碼 封裝數(shù)據(jù)校驗數(shù)據(jù) 調(diào)用Service注冊用戶 重定向到主頁

   UserService --   注冊用戶  檢驗用戶名是否已經(jīng)存在  如果存在則提示 如果不存在則調(diào)用dao中添加用戶的方法添加用戶 發(fā)送激活郵件

   UserDao -- 添加客戶方法

 

2.用戶激活:用戶點擊郵箱中的激活鏈接時觸發(fā)此Servlet

ActiveServlet:獲取請求參數(shù)中的激活碼,調(diào)用Service中激活用戶的方法,回到主頁

UserSerivce: 激活用戶 調(diào)用dao根據(jù)激活碼查找用戶 如果找不到用戶提示激活碼無效 如果用戶已經(jīng)激活過,則提示不要重復(fù)激活 檢查如果激活碼已經(jīng)超時(24小時)則提示激活碼超時要求重新注冊此時應(yīng)該刪除此用戶記錄

UserDao: 根據(jù)激活碼查找用戶 根據(jù)用戶id刪除用戶的方法


3.用戶登錄(記住用戶名 30天內(nèi)自動登陸)

index.jsp -- 如果用戶沒有登錄,則提示 歡迎光臨游客 注冊 登錄  如果用戶已經(jīng)登錄 提示 歡迎回來xxx,注銷

login.jsp -- 提供用戶登錄表單輸入用戶名密碼

LoginServlet -- 1.獲取用戶名密碼,2.調(diào)用Service中根據(jù)用戶名密碼查找用戶的方法 3.檢查用戶的激活狀態(tài),如果沒有激活則提示 4.登錄用戶重定向到主頁

UserService -- 提供根據(jù)用戶名 密碼查找用戶的方法 調(diào)用dao中對應(yīng)方法

UserDao -- 提供根據(jù)用戶名密碼查找用戶的方法

 

4.用戶注銷

LogoutServlet

 

5.添加商品(文件上傳)

index.jsp -- 提供 添加商品addProd.jsp

addProd.jsp -- 提供添加商品的表單,這個表單應(yīng)該是文件上傳的表單,其中允許上傳商品圖片

AddProdServlet -- 1.實現(xiàn)文件上傳,2.將商品的圖片上傳到服務(wù)器.3.并且向數(shù)據(jù)庫的商品表中增加一條記錄

Service -- 添加商品

Dao -- 添加商品信息的方法

 

6.商品列表

index.jsp -- 提供商品列表

ProdListServlet -- 調(diào)用Service中查詢所有商品的方法,查到后存入request域帶到頁面展示

prodList.jsp -- request域中拿出所有的商品做展示,

利用ImgServlet展示商品的圖片

1.根據(jù)id查出商品,2.獲取商品的url,輸出圖片

 

7.查看商品詳情

在商品列表頁面中點擊圖片時,查看商品的詳情

ProdInfoServlet 根據(jù)商品id查詢商品信息,帶到頁面顯示

ProdService 提供根據(jù)id查詢商品的方法

ProdDao 提供根據(jù)id查詢商品的方法

prodInfo.jsp頁面展示

 

8.加入購物車

在商品詳細信息頁面中點擊加入購物車,將商品加入購物車

設(shè)置session監(jiān)聽器,Session創(chuàng)建時,就將cartmap(product,Iteger)加入到session

AddCartServlet --

根據(jù)id查找商品,存入購物車map,如果購物車map中還不存在這個商品,則存入,數(shù)量為1,如果已經(jīng)存在則在原有數(shù)量上+1。

商品bean對象需要根據(jù)商品id判斷是否為同一個商品,bean中的hashcode,equals方法需要根據(jù)id重新生成

 

cart.jsp -- 遍歷購物車map,遍歷cartmap顯示當前用戶所有的購物車信息

 

9.刪除購物車

在購物車頁面,中點擊刪除時,觸發(fā)

DelCartServlet,根據(jù)id找到要刪除的商品后,從購物車map中刪除

 

10.修改購買數(shù)量

在購物車頁面,修改購物數(shù)量時觸發(fā),利用js控制輸入的數(shù)字必須正整數(shù)

ChangeCartServlet,根據(jù)id找到要刪除的商品后,修改購物車中商品的數(shù)量

 

11.清空購物車

ClearCartServlet

找到購物車map,清空map


12.生成訂單--事務(wù)管理

在購物車中,當購物完成后,用戶點擊 生成訂單

訪問一個addOrder.jsp --  列出訂單的基本信息,要求用戶輸入收貨地址和支付方式

AddOrderServlet -- 創(chuàng)建Order對象設(shè)置基本值,其中Money需要在后臺根據(jù)購物車實時計算出來 調(diào)用OrderService中生成訂單的方法生成訂單, 清空購物車 回到主頁OrderService -- 中生成訂單的方法需要進行TransactionManager事務(wù)管理--AOP在工廠類中修改service對象的方法+注解

1.在訂單表中插入一條記錄  

2.在訂單項表中插入記錄保存此訂單和商品之間的關(guān)系

3.從商品表中的庫存數(shù)量中扣除購買數(shù)量

OrderDao -- 增加訂單的方法 增加訂單項的方法

ProductDao -- 增加扣除商品數(shù)量的方法

 

面向切面編程 (AOP)

可以通過預(yù)編譯方式和運行期動態(tài)代理實現(xiàn)在不修改源代碼的情況下給程序動態(tài)統(tǒng)一添加功能的一種技術(shù)。AOP實際是GoF設(shè)計模式的延續(xù),設(shè)計模式孜孜不倦追求的是調(diào)用者和被調(diào)用者之間的解耦,提高代碼的靈活性和可擴展性,AOP可以說也是這種目標的一種實現(xiàn)。

主要功能

日志記錄,性能統(tǒng)計,安全控制,事務(wù)處理,異常處理等等

主要意圖

將日志記錄,性能統(tǒng)計,安全控制,事務(wù)處理,異常處理等代碼從業(yè)務(wù)邏輯代碼中劃分出來,通過對這些行為的分離,我們希望可以將它們獨立到非指導(dǎo)業(yè)務(wù)邏輯的方法中,進而改變這些行為的時候不影響業(yè)務(wù)邏輯的代碼。

 

面向切面編程案例--事務(wù)管理

 

 

~注解:

注釋--給人看的提示信息就叫做注釋 // /**/ /** */

注解--給程序看的提示信息就叫做注解 @xxxxx(...)

 

java中提供的原生的注解:

@Override: 限定重寫父類方法, 該注解只能用于方法

@Deprecated: 用于表示某個程序元素(, 方法等)已過時

@SuppressWarnings: 抑制編譯器警告.

 

自定義注解

@interface 定義一個注解

定義出來的注解可以被元注解修飾,確定其基本的特性:

 

@Retention: 只能用于修飾一個 Annotation 定義, 用于指定該 Annotation 可以保留的域

RetentionPolicy.SOURCE: 編譯器直接丟棄這種策略的注釋

RetentionPolicy.CLASS: 編譯器將把注解記錄在 class 文件中. 當運行 Java 程序時, JVM 不會保留注解. 這是默認值

RetentionPolicy.RUNTIME:編譯器將把注釋記錄在 class 文件中. 當運行 Java 程序, JVM 會保留注解. 程序可以通過反射獲取該注釋

 

@Target:指定注解用于修飾類的哪個成員


@Documented: 用于指定被該元 Annotation 修飾的 Annotation 類將被 javadoc 工具提取成文檔.


@Inherited: 被它修飾的 Annotation 將具有繼承性.如果某個類使用了被 @Inherited 修飾的 Annotation, 則其子類將自動具有該注解

 

 

注解中還可以包含屬性:

屬性的定義類似于在接口中定義一個方法

String name();

String addr() default "xxx";

 如果注解中只有一個屬性并且名字為value,則在定義注解時可以直接寫值而省略value= 部分

 

反射注解:

通過反射注解,來確定某個類方法屬性上是否有注解從而控制程序的流轉(zhuǎn).


--希望在Servicedao中都不用操心事務(wù),是否管理事務(wù)只需要在Service接口中的方法上寫或不寫 @Tran就可以控制了

 

ThreadLocal + 注解 實現(xiàn)事務(wù)管理

工廠類+動態(tài)代理 實現(xiàn)面向切面編程

利用動態(tài)代理,使dao中不需要區(qū)分是否開啟過事務(wù)

 

 

13.訂單查詢

--存在bug,生成訂單之后,直接點擊查詢訂單報錯You can't operate on a closed Connection!!!將訂單查詢的方法放在事務(wù)當中,就沒有了bug.

index.jsp主頁中 提供 訂單查詢

OrderListServlet 獲取當前客戶的用戶號,調(diào)用Service中查詢指定用戶訂單的方法,查詢出這個用戶所有訂單,存入request,帶到頁面顯示

OrderService 提供根據(jù)用戶id查詢訂單的方法

OrderDao 提供根據(jù)用戶id查詢訂單的方法

orderList.jsp 展示所有訂單

 

訂單號 ok

用戶名稱 --- 用戶表中查

訂單金額 ok

支付狀態(tài) ok

收貨地址 ok

下單時間 ok

------------------------------------------------------

商品名稱  購買數(shù)量  單價  總金額 --------------------------------訂單項 表 商品表

------------------------------------------------------

海爾冰箱1   999   999

美的筆記本1   888   888

....

...

------------------------------------------------------

 

14.訂單刪除

在訂單列表 對于未支付的訂單 提供 訂單刪除

DelOrderServlet 獲取訂單id 調(diào)用service中根據(jù)訂單id刪除訂單的方法,刪除后再重新回到訂單列表頁面

OrderService 提供根據(jù)訂單id刪除訂單的方法 將訂單相關(guān)商品的庫存數(shù)量加回去 刪除訂單項表中的記錄 刪除訂單記錄 -- 事務(wù)控制

OrderDao中提供根據(jù)訂單編號刪除訂單項和 訂單的方法

ProdDao中提供修改庫存數(shù)量的方法

刪除步驟:

        1.prodao.addPnum(product_id,buynum)

2.orderdao.delOrderItemByOrederId(order_id)

3.orderdao.delOrderById(order_id)

        

15.在線支付

 (在真正的開發(fā)中,一些功能可能不是我們自己開發(fā)的,而是調(diào)用第三方接口來實現(xiàn))

在訂單列表頁面 對于未支付的訂單 提供 在線支付

pay.jsp 頁面中選擇要支付的銀行

PayServlet 準備訪問易寶所需要的所有的參數(shù),將這些參數(shù)保存到request域中,再轉(zhuǎn)發(fā)到confirm.jsp頁面

confirm.jsp request域中的所有訪問易寶的參數(shù)取出,組織表單 提交到易寶

CallBackServlet處理支付完成后的回調(diào)


16.銷售榜單下載:

 管理員可能需要查看商品銷售的數(shù)據(jù)--

多表查詢

csv格式的文件 poi技術(shù)

文件下載   

    index.jsp中提供銷售榜單下載連接

    SaleListServlet 調(diào)用Service中查詢銷售榜單的方法 將查詢到的銷售榜單組織成csv格式的文件后提供下載

    OrderService 查詢銷售榜單

    OrderDao 查詢銷售榜單:查詢所有已支付訂單找對應(yīng)的訂單項信息找到銷售出去的商品,做一個銷售數(shù)量的sum()操作

     

    select products.id prod_id,products.name prod_name,sum(orderitem.buynum ) sale_num

    from orders ,orderitem ,products

    where

    orders.id=orderitem.order_id

    and

    orderitem.product_id=products.id

    and

    orders.paystate = 1

    group by products.id

    order by sale_num desc;

     

     

    商品編號  商品名稱  總銷售數(shù)量

    1  xxx100

    2  yyy10

 

 

17.權(quán)限控制

web.xml中,權(quán)限控制的過濾器的映射關(guān)系在自動登錄過濾器之后

 

WEB-INF文件夾下admin.txt文件規(guī)定只允許管理員訪問的uri

/addProd.jsp   添加商品

/AddprodServlet  

/SaleListServlet  銷售榜單下載

 

WEB-INF文件夾下user.txt文件規(guī)定只允許普通用戶訪問的uri

/addOrder.jsp生成訂單

/cart.jsp顯示購物車

/confirm.jsp在線支付-確認支付

/orderList.jsp顯示訂單列表

/pay.jsp在線支付-支付頁面

/AddCartServlet添加購物車

/ChangeCartServlet修改購物車

/ClearCartServlet清空購物車

/DelCartServlet刪除購物車中的選項

/DelOrderServlet刪除訂單

/OrderListServlet訂單列表

/PayServlet在線支付

 

PrivilegeFilter implements Filter

init

讀取上面兩個文件,類變量中保存2list,存儲從文件讀到的uri。

 

doFilter

HttpServletRequest req = (HttpServletRequest) request;

HttpServletResponse resp = (HttpServletResponse) response;

String uri = req.getRequestURI();

1.管理員和普通用戶都可以訪問的資源,直接放行(登錄,注冊,主頁,注銷,商品列表)

判斷用戶是否登錄

2.只允許管理員訪問的資源,

3.只允許用戶訪問的資源

 

 


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI