TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
1.项目介绍" t: Y5 [! V6 [$ [5 N1 Y$ S9 b
典型电子商务系统(在线购物平台)。模拟了当当系统部分功能。
: S# x; T/ R8 \2.功能需求5 F4 ]' i4 ?4 i
1)用户管理模块(3天)user
5 ?' h/ l( a- }# J 实现登录、注册功能
6 i/ X* a, b* A6 x2 a4 F' J* ? 2)产品浏览模块(2天)main. {) _7 f/ i2 \/ N
实现主界面和类别浏览功能
: I F5 o# w1 P1 @0 n! f 3)购物车模块(1.5天)cart! g- [. r7 X8 c! `- @
实现购买、变更数量、删除等功能
8 H# D* M) H# g! e$ p 4)生成订单模块(1.5天)order7 q$ `! g4 R+ g, R, G
订单确认、填写送货地址、生成订单功能
1 X- q$ f- v/ z3 [$ ?/ \8 K3.技术应用; R6 j2 y q$ b
1)技术架构
3 b% J/ E. |' Q6 b' ]- z) S struts2,JDBC(连接池),jQuery,Ajax! ~# l0 P7 B* B- o5 A
2)设计思想
: D7 b; d4 C3 e, X" K7 g& p6 N6 G$ ` MVC和分层设计思想
3 z7 A' _3 C5 l- i! ^! R" C a.显示层:JSP组件(jQuery,Ajax)* K" }; E: q) J7 m9 i( M0 T
b.控制层:Struts2控制器组件、Action组件& j7 S7 d4 ?, Z p+ y; u% c" g
c.业务层:Bean组件; z1 Z c# c& @
d.数据访问层:DAO组件(JDBC)9 y# m L2 v& I. t
) P4 e, @3 i) d* u; s& I, W
4.数据库设计
$ y& [' [, Y5 O 1)数据库导入% k/ S- e! a# ]
create database dangdang; //创建库
0 O1 @+ R/ R3 u& e4 k9 W* a use dangdang; //进入dangdang库( g% T( F' F; ~+ T9 G0 P8 W9 n! |: K
set names utf8; //设置连接和发送SQL编码! J" o; a; W! u1 s1 }3 h
source 路径/dangdang.sql; //导入sql文件, _& j; S% }$ ] B0 ^$ c
2)数据表功能$ w/ r, F! [, R$ H
a.d_user(用户信息表)
4 F$ ~" _! A9 |+ A 存储了用户信息,涉及登录和注册功能
+ H+ @& @2 ?! v9 ^" }$ T* n* p b.d_receive_address(收货地址信息表)
( R V: b) ^# n& j: ^ 存储了收货地址信息,涉及填写送货地址功能
& X+ h y: n* y, a/ e c.d_category(类别信息表)+ [, | K: {. I4 y6 Q7 j
存储了图书的类别信息,涉及主界面左侧类别菜单功能1 |! y# |4 @0 |. P4 L
d.d_book(图书信息表)& G% }+ ]: Q9 ~- k/ I( ~
存储了图书的特有信息,涉及产品浏览等功能
8 g- D- H" A2 j3 B, a e.d_product(产品信息表)
$ J% k- P5 L: ]" B 存储了各类型产品的共通信息字段。2 g' f% D5 O. S1 h& o+ ?0 ~9 B
f.d_category_product(类别和产品对应关系表)
! _8 A4 d+ Y1 S9 z }* j" P 存储了类别和产品之间包含关系,涉及产品浏览功能
! Y q5 t1 T+ V5 g# X g. d_order(订单信息表)8 Y7 |: S0 l" ? T$ E( K- ]
存储了订单信息,涉及创建订单功能
% R# J0 @ s. a& s h. d_item(订单明细表)9 X0 a C8 v- \! i/ H% j; \
存储了订单中所购买的商品信息,涉及创建订单功能。
8 S( B& H2 F) o+ h8 o% I- w: V3 N! F5 M4 i, W6 V
5. 搭建工程结构0 o- N8 s3 M, ]4 v6 p
1)引入需要的开发包+ u) y8 _1 D) G' m
struts2开发包
2 F0 w: E2 Q0 B; l, ~8 r7 m( p jdbc开发包
% k; T6 m( U5 P% G: r; u2 A- K4 m dbcp连接池开发包' }' Y( u) l# D
2)src文件结构
: I$ |9 n- E* e; a org.tarena.dang.action :控制层# ^' g0 p: x# }. k& |6 T) [* V3 e
org.tarena.dang.action.user :用户模块的action
! b ~- u3 M' ] org.tarena.dang.action.main :产品浏览的action
- m" C4 o5 i, A7 s# z& C org.tarena.dang.action.order :订单的action
% H! f5 ?% J8 w1 { org.tarena.dang.action.cart :购物车的action
g; w1 K# L& ~- ]& z org.tarena.dang.service :业务层
( Z E, x( J4 ?9 k! Q! [ org.tarena.dang.dao :数据访问层1 Q' Y8 m# G/ ^1 a+ R
org.tarena.dang.entity :实体类0 \; t* x7 O8 R
org.tarena.dang.util :工具类
1 j" a1 p8 a9 K/ j& W org.tarena.dang.interceptor :拦截器3 C0 }6 b4 n: A( `% B3 X
3)struts配置文件结构7 s4 {. H8 Y" c* B% e5 H, U# J
web.xml(配置Filter控制器)0 h" n) V4 p2 a5 L7 C) c
struts.xml (struts主配置文件)+ t# ^3 p+ R1 M8 r5 Q1 O% w# k0 u" p
struts-user.xml(用户模块配置文件)6 z5 }- V. Z5 C
struts-main.xml(浏览模块配置文件)
+ U7 W% _/ t; |1 a5 ^; p( \ struts-order.xml(订单模块配置文件)& p" c% w; u% B/ D* K
struts-cart.xml(购物车模块配置文件), T' @5 b* r* F9 u( {
% a" |3 V v0 Q' i- T. o* ]0 U. g4 `0 \
4)WebRoot文件结构; X7 b2 J6 U% f0 H
/user/* :用户管理的JSP+ A& b, u6 Z, }; D0 P% e9 s
/cart/* :购物车的JSP
8 ?2 | M9 r* A" K# B/ i /order/* :订单的JSP
: j* K& K% U+ h/ V8 R8 |! \ /main/* :产品浏览的JSP
; k0 z8 y* M* V /common/* :页眉、页脚等共同JSP
" B }2 x$ l- o /js/* : 放置js脚本文件2 X# l! `* `3 ^! C1 [
/css/* :放置css样式文件
$ ~/ q1 R% O; s2 N9 F4 ]2 y4 g /images/* :放置页面图片文件
. `% ~5 l6 s8 J; B* b# y4 {. b /productImages/* :放置产品图片
' t0 C% U% } O. H
( e M# N7 f* |% z6 z- ~-----------------连接池的优点-----------------
/ |3 L% k; z/ X ]' ^; D& Va.可以管理Connection对象,并且将Connection数量控制在一个安全范围内。提高数据库的访问安全性。# D7 s; H9 x5 j. Y8 Z
b.连接池中的Connection对象与数据库保持连接状态,避免频繁的建立和销毁连接。$ b7 v V& O' H' M ?! K' k6 F( r
/ s# F6 \; V; l2 Y! h0 [
============用户管理模块==============
7 G1 L$ {. s! M7 ^' S, E8 e8 K% Q [1.注册需求
) o1 O1 }( |5 d9 R: n$ a. N 1)表单验证(采用js+Ajax)7 x. u4 `% C6 J% [8 |* V
邮箱:非空、格式、唯一性(ajax)
1 H& y; r1 N4 X& Y- F 昵称:非空、格式
* R6 K- }; s+ _& U 密码:非空、格式
% \( C9 Q* I: a* P- Q 确认密码:非空、与密码一致
- I; i4 Q0 h- H) p2 N4 Y 验证码:非空、正确性(ajax)
: B2 M2 T; ~5 s' U: ?& Z9 t
+ f6 C- c' l9 O+ s4 @7 ? 2)将表单信息写入数据表d_user
, U) j5 r5 n O- K5 |8 N 编写实体类、DAO、Action
7 _& F& j% |' K" K9 y5 B* d0 } 3)给用户邮箱发送验证码$ Y2 w$ Y" u) n8 f% x, x z8 N# W1 x
引入commons-email.jar,email.jar
( F% x- }1 t+ g 参考EmailUtil工具类代码, K- N- y* W3 \9 j1 X% t) b `/ h
4)进入邮箱验证页面verify_form.jsp3 z: G- o" W& }+ e
% m9 V9 ?# {& ^( b
2.邮箱验证
" C) s4 O$ k! d a [8 U3 S3 u 1)表单验证- x! G% I' [2 {, x/ m. h
验证码:非空、正确性(ajax)
( d' n7 [' S5 b4 c s+ n 正确后跳转到成功提示界面:window.location = "register_ok.jsp";# ]- B6 B5 c! g2 B g N1 @0 V
2)Action逻辑! p2 b- l/ O4 K% t/ s- |% U
a.利用验证码去d_user检查1 |1 {+ [' v" n) B
b.如果正确,将d_user的is_email_verify字段更新成Y;不正确在verify_form.jsp提示“验证失败”
+ T" x& S. c7 G& t6 q& V9 z8 } c.跳转到register_ok.jsp
0 O! E' o! Z( y1 u" W _3.用户登录7 U' ^, B) ?) H1 w. {7 F4 j! S
1)表单验证
" \4 I' i( ^3 ^1 `) X# o/ G 邮箱:非空、格式8 j9 r& E* }3 C0 ~' a
密码:非空+ E i. b( n' v5 T
2)Action逻辑, e2 v1 k% f ~2 Y% x X% b
a.检测Email和密码是否正确,失败回到login_form.jsp提示
/ g- z) O& D* |. a6 i: ? b.检测is_email_verify邮箱是否通过验证,未通过进入verify_form.jsp! \: H* n- }) T& C2 I0 j2 O5 a8 ^- W
c.更新最后一次登录时间last_login_time和IP地址last_login_ip。( c6 _1 z% H u+ o4 v6 y
d.将用户信息放入session。
; Y# d1 l; U( U% J; F9 G e.都正确进入/main/main.jsp. p/ a% E+ c# G& O2 B9 E X6 m* J
4.main.jsp页面的页眉部分,显示用户是否登录的状态
: R/ A" X6 w( U/ { 如果用户已登录,显示"欢迎XXX,【登出】"
" z5 r9 J' [9 d d 如果用户未登录,显示"【登录】【注册】"& t7 H0 B) p; R2 }
4 C$ Q0 c f& }6 X3 Q4 Q2 G
数据库 模型 2 H9 u! J$ \% M4 P- B% \$ X
5 U# x! r7 T2 v+ Q. ]8 l$ T" g& R( Z* v3 W3 x( [8 l
效果演示图:* O' u0 T. W. F
首页演示图:& x6 w B( j$ H+ [: l# ]0 C E
! j3 m6 Z1 ]7 D, K$ D" U
; Y) I8 M7 h7 P( f0 y9 g
注册页面:
7 d2 Y0 @2 F8 `% K4 O* O
& `/ {' x: C8 P3 j; V, j/ ]: ]% r邮箱验证页面:
; b5 W& v9 r0 e
2 }6 r |0 A. \9 N' x
验证成功:9 ^) a1 z( e( [9 L7 r% A
7 I$ p8 G: M& Q2 @9 h
用户在线状态:5 b _$ Y8 H) p' P. r
2 [* G4 S0 Y; n
用户可以购物了:3 y/ R# n5 O# V" o
6 U( Z7 Q2 K8 T( x* i: W9 {/ _; N: k1 H" C' a/ x5 i' e. @
源码下载地址:点击下载
1 h/ P! K& C# N1 ?
' j$ s' E+ S( B1 Q( X* O1 @: V/ X$ m' _3 v
数据库下载地址:点击下载
) }$ y0 {/ U- v* Y% u7 S, p$ w8 K4 u
|
|