TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
1.项目介绍
3 F T2 |7 E6 v# ~ 典型电子商务系统(在线购物平台)。模拟了当当系统部分功能。; e" S' [9 i4 ^
2.功能需求
8 q- p8 H& S4 _' t# M( Q% q* n 1)用户管理模块(3天)user! R. J8 @' J: d, v7 \0 M6 U; C
实现登录、注册功能
8 c, u' E: _# U* o+ f* { 2)产品浏览模块(2天)main8 x5 ?. [/ ?" \6 S
实现主界面和类别浏览功能1 V* n- f2 _! O9 Z
3)购物车模块(1.5天)cart
$ Z$ }! ~- b; y+ s. `! f 实现购买、变更数量、删除等功能5 f, U+ p; v/ ?- x7 z
4)生成订单模块(1.5天)order
% \5 Q, r% S" |& S5 X ~; C 订单确认、填写送货地址、生成订单功能4 m8 i3 G. E; u* _1 T: ^% _5 k
3.技术应用
3 q% [, C. \; P* u! j. p 1)技术架构
5 |# v5 ^( Y% A& U6 ]& I struts2,JDBC(连接池),jQuery,Ajax
0 }8 z- U$ n9 B" V. | 2)设计思想
7 X' [( T) Y* S" K' _ ` MVC和分层设计思想3 ]+ y+ O7 h' y) q; J
a.显示层:JSP组件(jQuery,Ajax)+ s: A1 }4 u2 k
b.控制层:Struts2控制器组件、Action组件
) X6 k8 z( M9 F {. D4 Y c.业务层:Bean组件1 G9 |2 u5 \$ M: X- i# v
d.数据访问层:DAO组件(JDBC)
' m) q/ y A1 ?! r0 ^
* }& k& ^6 b, q4 T( U! q0 \4.数据库设计
6 U! J- v8 W4 R; E% s% b* ]" S 1)数据库导入
# e7 s: ]: `3 t5 U1 j: U( C) F8 T create database dangdang; //创建库9 u0 A; A* c: A# W) \1 a" B
use dangdang; //进入dangdang库9 |$ n5 I7 b* j+ _; v0 e
set names utf8; //设置连接和发送SQL编码) ?2 f% e: |" v5 V1 U- y
source 路径/dangdang.sql; //导入sql文件
* k5 C6 G; z( L5 l. ?8 |; m 2)数据表功能
' c% T/ ^2 @5 {- O( o a.d_user(用户信息表)7 O7 K/ X9 z' l: Z" p
存储了用户信息,涉及登录和注册功能
+ Y- w% [6 v/ W) L" c6 p b.d_receive_address(收货地址信息表)
8 L9 ^, P" H( m. \! r! s9 O# W 存储了收货地址信息,涉及填写送货地址功能& u5 c" H6 y2 h* b& X
c.d_category(类别信息表)
5 v; l1 _6 y# o2 V 存储了图书的类别信息,涉及主界面左侧类别菜单功能+ @/ t) ~. g( S( s
d.d_book(图书信息表)
) O6 v% a4 X3 y 存储了图书的特有信息,涉及产品浏览等功能
5 ^# T, r4 a1 j e.d_product(产品信息表)
; h1 G l: I) T7 R: `. q 存储了各类型产品的共通信息字段。
P/ c8 K/ z+ r" h5 A# E( ~0 R* r f.d_category_product(类别和产品对应关系表)0 S/ h& U0 R$ E2 m9 p5 H' @
存储了类别和产品之间包含关系,涉及产品浏览功能
' t* Q0 P$ t5 t1 d! x( Q- h, ]; [ g. d_order(订单信息表). U! h3 `6 t; r J5 [
存储了订单信息,涉及创建订单功能
( W2 K( \9 w9 a6 c6 ]7 C5 | h. d_item(订单明细表)
! E0 C0 q) Y& z8 f$ s7 V1 z 存储了订单中所购买的商品信息,涉及创建订单功能。
# L: ]7 T6 r+ c; |0 k h* v: ^1 Z
5. 搭建工程结构# ^% q+ r: y) F3 v5 x9 t
1)引入需要的开发包& h1 }3 P" a( m- b2 J
struts2开发包2 H$ w. t% D0 T) _' R; N4 U
jdbc开发包
8 P8 ]- p# Q5 e9 o1 H dbcp连接池开发包
7 A+ j, a1 Z1 v' K8 ? 2)src文件结构
# m* I7 D+ B; b; W2 c ~6 D: A; G org.tarena.dang.action :控制层! e" g6 }8 a4 e; @. J) f4 f
org.tarena.dang.action.user :用户模块的action5 o, I v1 N1 X% [& o
org.tarena.dang.action.main :产品浏览的action
9 G* d. p; J; A$ e {% I- ] org.tarena.dang.action.order :订单的action( o5 V8 [9 F ]: l/ |5 o
org.tarena.dang.action.cart :购物车的action
7 [! g% M6 I# i% {1 n org.tarena.dang.service :业务层
9 o" V( x; G* a2 j; b org.tarena.dang.dao :数据访问层0 K% @% v8 m8 x! S: D
org.tarena.dang.entity :实体类9 V$ J, d5 H# E+ ]4 d/ e! N
org.tarena.dang.util :工具类
- P' T5 @* _0 A a S+ h org.tarena.dang.interceptor :拦截器
8 u4 U( Z: W# U% Y9 M 3)struts配置文件结构
% y6 v+ q4 R$ S7 S, T) p: s web.xml(配置Filter控制器)
# _$ F- x& A2 {" T! {3 t6 l, t struts.xml (struts主配置文件)
& v' t( v4 K. P" F# s struts-user.xml(用户模块配置文件)
$ B$ E; m) _4 N9 F9 v0 j struts-main.xml(浏览模块配置文件)/ J- ]$ d j+ e- L+ f/ {) W
struts-order.xml(订单模块配置文件); ?# o# N1 e+ R
struts-cart.xml(购物车模块配置文件)4 V# N7 O6 V% o, a7 V
# |8 T! u' n5 O1 W9 M# W1 B' O1 F
4)WebRoot文件结构
- t: t2 `( b0 i /user/* :用户管理的JSP
- N7 L/ \) ]. i/ A8 i' f, Z8 d /cart/* :购物车的JSP
, K. M0 d' h8 \4 c# y# Z6 ^- S /order/* :订单的JSP
2 M+ R& p4 k# n /main/* :产品浏览的JSP
0 P0 c3 V% i3 ^0 a: l /common/* :页眉、页脚等共同JSP1 s$ S6 O% x4 t" l
/js/* : 放置js脚本文件% f% `) b1 a8 Z" `3 M, ?
/css/* :放置css样式文件
: i" p( b f1 s g; p/ r3 C$ i& Q /images/* :放置页面图片文件
* w+ F; w3 p* j /productImages/* :放置产品图片
. m9 R' p) l# ~) M w3 S- Z1 @/ C, ^7 w# v W* p* X( H4 T
-----------------连接池的优点-----------------
8 T1 c- [0 ]+ N; Na.可以管理Connection对象,并且将Connection数量控制在一个安全范围内。提高数据库的访问安全性。
4 C4 g. L' i7 B6 M4 k. H# F# o1 nb.连接池中的Connection对象与数据库保持连接状态,避免频繁的建立和销毁连接。
, [2 D) F9 k/ B6 `, F1 g. g; y" K
============用户管理模块==============% X6 d0 ^" q8 A8 _! n1 R
1.注册需求
' j& x+ @# ^# d$ i 1)表单验证(采用js+Ajax)
9 j7 d8 t" X2 ?/ A1 W$ b 邮箱:非空、格式、唯一性(ajax)
8 I! h4 Z) u- i$ P- u; B. x 昵称:非空、格式; b6 p) @, S& o1 [( l) d
密码:非空、格式/ u! ?( _1 h8 d7 F; K* L! h' j5 Z
确认密码:非空、与密码一致
9 b+ w1 B& ^7 A! Z" l, P0 o 验证码:非空、正确性(ajax)
' `' j7 H. s0 w- M( Z2 m
& v" ?/ q( Z% \; A 2)将表单信息写入数据表d_user
) o) u* H% U( N# }2 y 编写实体类、DAO、Action. g) I& U* h# x8 E' i" t
3)给用户邮箱发送验证码8 G/ q" j/ N3 U S' ~) H
引入commons-email.jar,email.jar) X1 E8 F+ @. X' T
参考EmailUtil工具类代码$ G% N/ q3 \) C2 u1 o
4)进入邮箱验证页面verify_form.jsp2 O) y( e) A2 F( Q2 Q7 Q
, n4 I& O' u- H1 t) T2 Z1 j" q* f
2.邮箱验证4 {( \: \1 F r& l R- t# N" S5 a
1)表单验证
6 O, ^; W& L! h, z: u 验证码:非空、正确性(ajax). Y9 C! _4 P. \' B1 c
正确后跳转到成功提示界面:window.location = "register_ok.jsp";* y/ \5 H+ P8 Y& K* [; g
2)Action逻辑6 Y9 [6 l1 S' ` M
a.利用验证码去d_user检查
* d6 ~* L4 M: d8 Q# B" d/ g b.如果正确,将d_user的is_email_verify字段更新成Y;不正确在verify_form.jsp提示“验证失败”
) Y+ H* ]; E/ \- v, u B- q) ` c.跳转到register_ok.jsp& S$ {3 u+ g4 ?0 \
3.用户登录# }& N. I7 m& K/ A
1)表单验证
C9 r7 V' g$ Q7 o4 Z' \ 邮箱:非空、格式7 B3 @2 v! } l, `; D+ b
密码:非空. _. c, ^( i+ t- l1 W
2)Action逻辑4 `% |: P+ C0 X5 c- d/ A( A; C
a.检测Email和密码是否正确,失败回到login_form.jsp提示( S; O) z, E* v+ v" L, ~
b.检测is_email_verify邮箱是否通过验证,未通过进入verify_form.jsp. p, t8 [ t9 N. Y, p
c.更新最后一次登录时间last_login_time和IP地址last_login_ip。# J; F1 Y& |8 [$ }
d.将用户信息放入session。
. ~ F0 ?0 I* h- \ e.都正确进入/main/main.jsp2 n2 X) r6 R: ^. c- W
4.main.jsp页面的页眉部分,显示用户是否登录的状态2 z! h' t Y k0 a) W) x/ v
如果用户已登录,显示"欢迎XXX,【登出】"3 G+ J# `/ A$ p6 b1 { B( |/ l$ ~3 y
如果用户未登录,显示"【登录】【注册】"' {6 T/ Z8 r. I I/ b! y
0 T1 j/ Y1 r( {# ~8 M数据库 模型
+ f, ]7 g) @0 @5 b+ y0 h
D- o. l" I6 ^- }0 n" r# K ~
; S- g* S" R# T' ^0 s3 e. j8 M& F, ~效果演示图:4 J) @4 H6 ?: V% c$ g& q/ N+ N
首页演示图:
/ _" ]( ]/ ? F7 S! {* V7 `
+ G, R3 q- r5 `# O) Q# v. R
! F5 ?# ?5 g. I
注册页面:
J2 B9 K- s% k& \" u4 X
0 }) @# v, g( Q- V
邮箱验证页面:" ?" c7 V1 U0 [# B/ d& _9 t, Y
0 w% H# J. R; A$ V) [0 d0 @
验证成功:
* P. `3 v6 x% W7 O
* p D! |0 E+ j o \# B- O/ {
用户在线状态:
' H5 b* p/ m) s/ k, l5 C
# f; S O: }# e; t5 X' j2 e用户可以购物了:0 N q/ G1 f. D
5 @7 A1 W9 [4 N' v" P2 u& ^2 r3 m: l: ~# o9 w+ Q& N" h
源码下载地址:点击下载: a4 `; j& K6 ]. E) E2 ?
) p$ o& R1 i6 Q# v. ?2 P, O
% [4 F( O: M- ?$ T- W E8 K+ _: r
数据库下载地址:点击下载. b, Q* ^4 }, a9 _3 E) [1 e7 J
- M8 ^) o3 X/ I/ f3 v& b |
|