TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
1.项目介绍
6 T/ y- h6 E9 }/ G6 _ 典型电子商务系统(在线购物平台)。模拟了当当系统部分功能。: q+ M! J" w) P
2.功能需求0 G$ X; n4 W1 J) t9 _0 K1 U
1)用户管理模块(3天)user7 K' Q4 X- H0 I4 d$ n' h
实现登录、注册功能0 _/ Z; S' c6 ^1 r* p* O d
2)产品浏览模块(2天)main
- ?( G0 b5 H. J! w9 I 实现主界面和类别浏览功能% P e. N& L$ F3 p
3)购物车模块(1.5天)cart& X: P4 n) [& u( U
实现购买、变更数量、删除等功能# A( E5 R K4 z M1 J M
4)生成订单模块(1.5天)order0 w8 ^. j% Z0 g/ w4 X, p2 X% O1 n
订单确认、填写送货地址、生成订单功能% j6 \8 h7 G: Y) ~
3.技术应用% Q1 j/ n" O$ x
1)技术架构
) b0 m( g+ a5 r struts2,JDBC(连接池),jQuery,Ajax g; b. |+ |# m+ Q& ]+ K
2)设计思想
' u& n, y/ C; j' Q MVC和分层设计思想" r, z0 ?* c" O9 g' t
a.显示层:JSP组件(jQuery,Ajax): S6 a* M" C8 I8 g4 W0 X) C, S. ^
b.控制层:Struts2控制器组件、Action组件
+ n; H! W1 D- w2 \3 ` c.业务层:Bean组件1 H4 Q0 t" c. I8 X) p3 `
d.数据访问层:DAO组件(JDBC) o& a- d% I8 i/ n
& A- b F% O% n% |) n4.数据库设计
( E. j! r7 g: F- L 1)数据库导入
9 }7 x) b# i; s( Q. d create database dangdang; //创建库1 x/ h! f( N1 S' K
use dangdang; //进入dangdang库
0 p/ }- g, z1 b& l1 Z set names utf8; //设置连接和发送SQL编码
- b U5 g3 t# F' A! I$ ?4 s source 路径/dangdang.sql; //导入sql文件9 C* Q& @, h) F+ {
2)数据表功能
8 }- T* I$ D# s4 L a.d_user(用户信息表)9 m* {2 S! ]7 _# s5 V$ t
存储了用户信息,涉及登录和注册功能
2 }8 D. ~' N1 e5 y9 Q! y5 l0 z8 m b.d_receive_address(收货地址信息表)
' `7 q# |: d9 C: W 存储了收货地址信息,涉及填写送货地址功能
8 b8 M, y) A5 p7 I, } c.d_category(类别信息表)
' } o* M) N1 ^" s 存储了图书的类别信息,涉及主界面左侧类别菜单功能, ^9 z9 k- |* h7 u2 |$ d: N
d.d_book(图书信息表)) D2 `: y" L0 b! z
存储了图书的特有信息,涉及产品浏览等功能
+ x2 v% q( L1 x y: r e.d_product(产品信息表)
0 `1 g* V* C& B4 N6 f* Y 存储了各类型产品的共通信息字段。
3 ^6 n, P$ W7 | f.d_category_product(类别和产品对应关系表)
) D; Z. H8 k* M- B9 y5 E 存储了类别和产品之间包含关系,涉及产品浏览功能 i. G0 ~+ n# l6 Q6 t3 H6 W
g. d_order(订单信息表)5 a0 B, f; T# v
存储了订单信息,涉及创建订单功能. r: a: J5 F y0 D% F, u0 U$ s) f
h. d_item(订单明细表)' \5 O! _% A3 G& k- `! N$ O N
存储了订单中所购买的商品信息,涉及创建订单功能。4 U% F$ @, F. z7 ^) E1 s0 }* [
9 k3 }; g9 W! V& [% j+ p' ]5. 搭建工程结构
2 f2 [7 u) v% D* x. q 1)引入需要的开发包
* z4 j$ r8 \9 X4 |5 g struts2开发包
* v/ k G& {! Z: | jdbc开发包6 D2 l/ V$ W1 b
dbcp连接池开发包
9 v# h4 R w' g+ Q5 Q0 Y. q% |+ e0 X 2)src文件结构: w8 e3 t% i. W
org.tarena.dang.action :控制层0 H" A" w2 _$ n& ?. _4 r' ^9 M
org.tarena.dang.action.user :用户模块的action; V( F7 @0 }$ r0 i5 Y7 f6 z
org.tarena.dang.action.main :产品浏览的action
6 Z/ R* C0 Z6 @' v- P4 k) }/ i org.tarena.dang.action.order :订单的action8 h" m% f. g2 |" v3 q6 Q0 C; X
org.tarena.dang.action.cart :购物车的action
9 _; q% Q$ p% m9 r: H org.tarena.dang.service :业务层/ t8 ^& D, W3 w
org.tarena.dang.dao :数据访问层' y1 ~8 m$ U2 [9 }5 \
org.tarena.dang.entity :实体类
, N& n7 \+ {0 a org.tarena.dang.util :工具类6 v5 A' _* I0 p8 f" }* N# R0 G- W
org.tarena.dang.interceptor :拦截器
P, A6 A* o0 b 3)struts配置文件结构
7 n( [, r. ~% n3 ^) W* n+ ~ h web.xml(配置Filter控制器)
& @- m# W- i* I! [" V/ P! s. c$ s7 a struts.xml (struts主配置文件)2 V( g- W4 C% U' ?/ T) f
struts-user.xml(用户模块配置文件)
+ J4 F4 }9 t8 @9 J6 ^1 P struts-main.xml(浏览模块配置文件)
, d7 l1 m* ^/ J' f+ M struts-order.xml(订单模块配置文件)
7 _- L) b: `5 l7 C struts-cart.xml(购物车模块配置文件)
+ [: j% O! F0 P1 p4 O# d9 d2 C
9 |# }( V, b1 d6 _3 e3 p 4)WebRoot文件结构
& q) a$ ?8 ]7 x7 ^. z) Y: B) y: c /user/* :用户管理的JSP3 t2 }$ j `) Z0 O& g+ E
/cart/* :购物车的JSP% s% v6 r" `$ t$ H
/order/* :订单的JSP% R' y6 Z; }5 A
/main/* :产品浏览的JSP; p0 K R, h; m$ H
/common/* :页眉、页脚等共同JSP
7 p6 ~7 g1 I6 o5 L2 j /js/* : 放置js脚本文件
$ n7 m! @2 l* E- s! s; s; g+ Q" L /css/* :放置css样式文件
+ N; q6 Y+ i, w$ M7 x /images/* :放置页面图片文件7 l9 K. q; s% ]
/productImages/* :放置产品图片
( I- G# {8 t& m9 A7 c' M7 b8 f% j2 S* }6 T' `
-----------------连接池的优点-----------------7 ^( d+ q( B& V/ k2 W! P5 h) f' @! D
a.可以管理Connection对象,并且将Connection数量控制在一个安全范围内。提高数据库的访问安全性。
- ]* R( B, U1 c0 Z& _5 { K- ^b.连接池中的Connection对象与数据库保持连接状态,避免频繁的建立和销毁连接。
5 x0 D4 y( O' c( U7 [2 j* I2 V" A+ I8 S4 m9 R( S
============用户管理模块==============% W, g2 J$ d0 N# Y/ Y1 o& Y$ x7 `
1.注册需求
2 h9 |6 u6 [( T; ?6 g) n4 u* D6 u b/ W. m 1)表单验证(采用js+Ajax)
J1 r# F8 y. Q, L 邮箱:非空、格式、唯一性(ajax)- w; W! W9 ^* J
昵称:非空、格式. ^# ]3 H+ C2 e9 C5 N: ?7 R* u4 g
密码:非空、格式* \! y, ~) F' i; _" E0 d
确认密码:非空、与密码一致
8 W/ x- I& I1 f, c; P 验证码:非空、正确性(ajax), a9 l! P l1 f
! e# K. ]! P' p2 @# B% y
2)将表单信息写入数据表d_user
! r* q/ m" |# c; }+ o7 a& | 编写实体类、DAO、Action
9 N0 \7 u1 X- z5 b* y 3)给用户邮箱发送验证码
' ^% h5 ?* v5 w 引入commons-email.jar,email.jar
7 W# |& H+ Q: @) c0 e ^ 参考EmailUtil工具类代码
, R9 }; `% q: w0 {$ m 4)进入邮箱验证页面verify_form.jsp: F" S+ l4 S8 t* b
* X9 f( C3 Y) ]8 ~: `2.邮箱验证
/ @% @* w+ b+ @8 e; w# s" c% ~6 L 1)表单验证
4 N; i9 \/ H% O9 X" {/ ?+ q 验证码:非空、正确性(ajax)7 b- l& k0 O5 j
正确后跳转到成功提示界面:window.location = "register_ok.jsp";' I7 ~, i) t" H2 j
2)Action逻辑& h. z' W# v- }# V) n, F" d
a.利用验证码去d_user检查0 a$ R1 ?+ D2 J. K. C$ b
b.如果正确,将d_user的is_email_verify字段更新成Y;不正确在verify_form.jsp提示“验证失败”5 \, @1 e9 v, B1 b
c.跳转到register_ok.jsp' r( |: e3 `1 C. f; K
3.用户登录
" i$ F: S1 s+ A, t& @ 1)表单验证
7 A$ j- U) K H% V- x 邮箱:非空、格式 A; {* h# t& p1 r2 k/ U U! ^
密码:非空
4 \5 a1 `+ p) h) U7 z3 n 2)Action逻辑
: ^5 |1 E) r9 H# z a.检测Email和密码是否正确,失败回到login_form.jsp提示
% V' v7 y! d. D. b b.检测is_email_verify邮箱是否通过验证,未通过进入verify_form.jsp3 ^0 I y& a! t' I
c.更新最后一次登录时间last_login_time和IP地址last_login_ip。
+ ?+ ~. o3 u$ L7 p d.将用户信息放入session。- R+ d/ ?# T, e' `/ u
e.都正确进入/main/main.jsp
% U" i+ S+ A) U' `( i4.main.jsp页面的页眉部分,显示用户是否登录的状态 }9 c0 T7 K% R% o. G' l W7 S7 T
如果用户已登录,显示"欢迎XXX,【登出】"2 ?. p3 b- s! J5 s' |
如果用户未登录,显示"【登录】【注册】"
! L' e$ r! ]' P) P9 V4 z- w, J- C3 g( }% \" i7 s' { z' @
数据库 模型
9 t; O6 B6 }; w0 ]. } f
/ P L1 U! ^$ `( d
0 P; s% ^4 [& Y% |) B/ z效果演示图:
/ }# c0 B9 k. v; z首页演示图:9 f) X2 t: X: l7 b- O$ ]; `, O
% L7 N: k7 R1 ^& m% z" x% X6 N% X! F2 D
8 u* f" X! ]8 [2 B1 g
注册页面:, W8 }! c* ?1 G5 x
7 U- S$ b' z3 g5 @5 m) I
邮箱验证页面:3 @, G* S7 {1 ? U. l2 f
6 _% L/ e) }9 {9 R! U, v# T0 b
验证成功:
7 |+ p7 G) W+ K& B, x2 A+ T" M
- x5 P, V9 ?. V
用户在线状态:9 j3 U- F" s4 Y$ a# r
; A$ B; @9 q* U3 z用户可以购物了:
, P! I# W7 |# j
3 B: K" P' R, p2 b" C; J5 ] K/ l2 R" V, y6 [; f; u+ X6 U0 a1 S
源码下载地址:点击下载
/ [" R& x# B- [4 d9 w3 p# e7 Q) j9 C, ^+ L
3 l. \* T" I) q
数据库下载地址:点击下载. F) e$ f' W/ t$ ?5 C
: a) x! A# p L- W' _2 Z |
|