TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
1.项目介绍
; O7 f, e2 [0 V0 ~' \ 典型电子商务系统(在线购物平台)。模拟了当当系统部分功能。# W* X$ s0 U% w9 M- L
2.功能需求
6 m; {' r) e; M: G3 h 1)用户管理模块(3天)user
, e4 w) q% \1 Q 实现登录、注册功能
' H' e1 s+ h5 u k0 Z9 _+ }7 Q$ J/ n 2)产品浏览模块(2天)main- `0 l4 X1 f2 B" e7 n$ f: ~
实现主界面和类别浏览功能; @9 g. n, p3 F7 _
3)购物车模块(1.5天)cart9 ]' `2 `. }; a; ]3 o
实现购买、变更数量、删除等功能/ G2 v0 F( M" b; I
4)生成订单模块(1.5天)order
/ W q( E; J/ Y 订单确认、填写送货地址、生成订单功能4 L8 F3 N+ x# F- y# ]' H$ v' R
3.技术应用8 H2 Q4 B, j8 a* V; _1 F! V
1)技术架构
8 \/ N; \0 }/ v+ m; A& J. @ struts2,JDBC(连接池),jQuery,Ajax, i1 [6 [ y$ {1 N
2)设计思想& e+ X( Q9 y) D$ @' Q \# Q) g
MVC和分层设计思想; D1 `/ ^$ J1 v; o3 e$ ?( N
a.显示层:JSP组件(jQuery,Ajax)
7 X. {( e5 d+ z$ b9 [ b.控制层:Struts2控制器组件、Action组件
- `0 E' q: D: x2 V c.业务层:Bean组件
! d1 u5 l( D+ [, p) c- O- B/ I( G d.数据访问层:DAO组件(JDBC)7 Y2 r( Q( H8 r+ m. p$ k# B
! c" b% W1 [; C% d! e4.数据库设计
( u$ H2 a, I9 } _ i4 f 1)数据库导入/ ?% ?# k7 Y6 H$ l) g( L' u
create database dangdang; //创建库! I l" `8 N* u- |
use dangdang; //进入dangdang库
9 v8 J8 O1 U! q( [ set names utf8; //设置连接和发送SQL编码/ i8 n0 P, S2 ^6 X9 m2 g/ @- ?
source 路径/dangdang.sql; //导入sql文件5 r1 i/ V" W6 ]
2)数据表功能
6 l. u. s+ [2 A j' ^& ]! X a.d_user(用户信息表)
, q& m- A( P+ l2 A, d& s1 _( ^- T 存储了用户信息,涉及登录和注册功能
x3 o+ I6 [: D2 ^' c$ i; ^+ d b.d_receive_address(收货地址信息表)2 D$ ~+ H. x+ c2 t& f
存储了收货地址信息,涉及填写送货地址功能
0 r# v8 z) p/ ]' r0 r$ [ c.d_category(类别信息表)
: Y; o5 \5 E, M2 j 存储了图书的类别信息,涉及主界面左侧类别菜单功能
2 @- h; Y6 Q) u* I2 o d.d_book(图书信息表)
/ Z) b* z2 d* F; T 存储了图书的特有信息,涉及产品浏览等功能 I6 u Q% h# q* n+ j# `. k/ x( j
e.d_product(产品信息表)* q8 I) k# i- R
存储了各类型产品的共通信息字段。' f) S. n& a M! [6 B5 g
f.d_category_product(类别和产品对应关系表)
" J9 [0 h1 |4 Y; z$ m4 E" n8 z/ F9 @7 X 存储了类别和产品之间包含关系,涉及产品浏览功能
7 G1 s$ @) ?2 \ g. d_order(订单信息表)
$ n' s) N% w& ^! c# S |$ U' N/ i 存储了订单信息,涉及创建订单功能
6 f3 \- p; f, Z9 B h. d_item(订单明细表)
3 d2 L5 U$ B0 u" M, E. i 存储了订单中所购买的商品信息,涉及创建订单功能。% g, }) S+ E% g/ A
" I5 L: }+ X6 W6 t& F; K' `5. 搭建工程结构
+ k0 d0 u3 |$ V7 B 1)引入需要的开发包( z! F- R* R7 N! w6 a9 R
struts2开发包
+ y5 Q7 e# _, u* j/ N6 ^ jdbc开发包
1 e3 i+ K2 k0 X$ Y, B0 `4 `( k dbcp连接池开发包( E8 t( ]- l6 t" F, z& B; E
2)src文件结构) D, K& ^* f, J( o* G. x1 c
org.tarena.dang.action :控制层
. _% V+ B7 j2 J) d' V0 [. b/ { org.tarena.dang.action.user :用户模块的action& Z T% p# T, [, n- i' W
org.tarena.dang.action.main :产品浏览的action
" A6 @& B" b4 |& X! R- \8 p, D org.tarena.dang.action.order :订单的action1 r0 p( G4 c/ n
org.tarena.dang.action.cart :购物车的action
, f' n% L7 a! f8 N8 J5 Z; R( ] org.tarena.dang.service :业务层
+ g( n8 N& v9 W. v org.tarena.dang.dao :数据访问层
, Y. ]8 Z6 E7 m g& ]* ~# j' x, x1 x org.tarena.dang.entity :实体类
7 c1 [* d1 J7 u org.tarena.dang.util :工具类
) N" D# y1 o, g6 i6 _3 Z org.tarena.dang.interceptor :拦截器
/ H0 ^( d1 m1 {- G: v 3)struts配置文件结构4 F% T: [: S* b5 I& B( o. Q* c" p: {
web.xml(配置Filter控制器)) v4 F J0 c) \+ _4 R# U: Q
struts.xml (struts主配置文件)6 r# _# Q) Q G4 N
struts-user.xml(用户模块配置文件)
0 t9 j5 w: O2 Y$ O struts-main.xml(浏览模块配置文件)* L+ m- k% @: ?6 T
struts-order.xml(订单模块配置文件)
2 H+ s# c7 B; q/ z struts-cart.xml(购物车模块配置文件)2 W& Z- w/ T2 F* t
8 @! g; j. X- |: B- i7 I9 }' W 4)WebRoot文件结构5 V Y2 V; z) k$ A
/user/* :用户管理的JSP1 t* n7 v; l7 l- b3 o: i4 E2 W
/cart/* :购物车的JSP
2 [% i/ P% w3 U& N6 o( J /order/* :订单的JSP
5 ]7 B+ F- Z% u* s /main/* :产品浏览的JSP4 k) v7 B# Y; y+ _5 D" z
/common/* :页眉、页脚等共同JSP
& ~% X2 |' g0 R1 c |8 V0 ~ /js/* : 放置js脚本文件
, k5 Z" d, I5 L8 S6 H; c9 ] /css/* :放置css样式文件& G2 E) \2 B( |5 Z/ @" A1 e1 b
/images/* :放置页面图片文件) W5 I( ?- u. U" s' M3 \. a& X
/productImages/* :放置产品图片
( h8 F: X: V6 T! E
3 H& H1 L8 T% c. B- p5 r& r7 }/ |-----------------连接池的优点-----------------+ J6 U# T, T, T
a.可以管理Connection对象,并且将Connection数量控制在一个安全范围内。提高数据库的访问安全性。
4 H7 V2 i" |) b0 W4 Hb.连接池中的Connection对象与数据库保持连接状态,避免频繁的建立和销毁连接。$ M4 I4 `- ?7 K; ?
" O9 _1 _' Z8 Z$ D( H
============用户管理模块==============) D; C0 o3 ]9 i6 C9 o
1.注册需求4 O6 M3 {& Y: K& G7 b/ X
1)表单验证(采用js+Ajax)2 U5 D4 m, Q3 [( C/ ~7 p
邮箱:非空、格式、唯一性(ajax)
/ C" @' N5 F( C* D 昵称:非空、格式# G+ e/ j, ^( a( G
密码:非空、格式6 b1 \. `* l8 J. L
确认密码:非空、与密码一致
- s& u J) Z/ G# W8 }- e 验证码:非空、正确性(ajax)
& s# d6 g. d* N: H! `
2 p2 A f- P) Y/ i( d' y4 t/ g 2)将表单信息写入数据表d_user
( Z% [) V0 o( q0 G# }$ X% c 编写实体类、DAO、Action% u: {1 w& ?; C: W3 V" j
3)给用户邮箱发送验证码
2 @8 q: w3 {9 Z$ n# S 引入commons-email.jar,email.jar9 K3 J) N4 H* g! B4 L/ G" R
参考EmailUtil工具类代码9 ^. Y9 }: @0 C! z/ v% Q
4)进入邮箱验证页面verify_form.jsp! X+ [) ]- C+ Z$ i% d& B
& K0 b$ A+ A' [/ s( w2 H9 g
2.邮箱验证$ B" G" G. D4 U0 g* B1 H+ L* L
1)表单验证
3 j+ O, h8 m2 U) d 验证码:非空、正确性(ajax)
( y% ?5 P& _9 a/ n) E; p6 E 正确后跳转到成功提示界面:window.location = "register_ok.jsp";
9 c% n' d3 C u$ |; }; `' T 2)Action逻辑. r; O- u( f/ _# E; K: o) ?! O+ ]
a.利用验证码去d_user检查& M; Z+ E3 S8 E5 [0 l% c
b.如果正确,将d_user的is_email_verify字段更新成Y;不正确在verify_form.jsp提示“验证失败”0 X9 H2 Y1 L F1 j; c3 X/ b
c.跳转到register_ok.jsp M+ u% _0 O; u+ S
3.用户登录
6 [& i, M; I% C" y. ^) U8 {. |6 i$ q 1)表单验证
/ }' w8 D+ s3 I" N( a$ | 邮箱:非空、格式+ h8 }3 l% l4 m
密码:非空+ L Y* b6 w6 _# I6 j: A4 {
2)Action逻辑
* }8 J- o1 ?4 |1 @' \ a.检测Email和密码是否正确,失败回到login_form.jsp提示
: V# {) d: A9 ^* N& w& K/ \% w b.检测is_email_verify邮箱是否通过验证,未通过进入verify_form.jsp
, c* W+ l: x- _* I8 I' B c.更新最后一次登录时间last_login_time和IP地址last_login_ip。7 r$ `! O) D. G2 J; J; D- V
d.将用户信息放入session。& Y2 {2 Y" l9 X6 \
e.都正确进入/main/main.jsp
/ X0 \" g% S6 j* w6 p8 }4.main.jsp页面的页眉部分,显示用户是否登录的状态6 I7 F; P* R4 \: {5 G- V& _
如果用户已登录,显示"欢迎XXX,【登出】"8 T1 o% [7 x9 p/ D
如果用户未登录,显示"【登录】【注册】"' d! d2 X/ A. P4 W; a2 i5 K0 h
& A% C- L. r! h" J5 @; C" J
数据库 模型
2 v( H, |% t" M& E4 G
8 N$ g' Z6 j' c& X9 }
+ c/ l4 C. B- p
效果演示图:
/ c+ O4 Z) O1 s; z; {0 Z$ N首页演示图:% ?! R( l7 k0 ]5 _" A* k0 S; }
! g- @, ?2 x& Y# _# k
p% C. E( Q. G J/ Q( _
注册页面:' o: T0 f: K+ N
- S- c: P/ J9 P7 U; x/ [( W0 [邮箱验证页面:
2 j b6 W, g7 `# l" A- \
6 p) A. e a Y4 [, u验证成功:3 ?; Y9 i) r# C" n- y
7 O+ |* `" e. [; g
用户在线状态:
3 u1 V# h# H4 Y9 _ |
7 F: L! q* X% X+ ~# K, J用户可以购物了:
& W& D7 |8 F$ K r4 T8 ]* m
: q/ S. k7 ^4 s {: _9 _8 U" W' X! k
; B$ x$ L6 j3 S源码下载地址:点击下载( T0 v: k6 S8 _: K- u
8 `& X0 p i) D( b% k/ v7 W0 Z1 ~2 u$ \4 M2 b" B2 U9 P
数据库下载地址:点击下载
% |# Z8 y+ o: \! Q6 F& l
+ L1 `0 |; z/ ^( d$ w7 ]4 G, D |
|