TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
1.项目介绍
: I$ e" M" r! F# L) h 典型电子商务系统(在线购物平台)。模拟了当当系统部分功能。! W8 i) d; b, A; t; q- N% v
2.功能需求
# H% d) R! J' S3 s 1)用户管理模块(3天)user$ T3 |+ b/ |( j) T
实现登录、注册功能
' d2 \# U% F0 ?6 G 2)产品浏览模块(2天)main
$ X! Z4 U' I3 J4 C& K 实现主界面和类别浏览功能
* `$ j( P! {7 }$ t 3)购物车模块(1.5天)cart
: h2 ]) X5 e( d7 Q5 Z+ F 实现购买、变更数量、删除等功能+ b) i: C2 s8 L% g& I& M
4)生成订单模块(1.5天)order
' c9 d2 P5 D2 ]6 j 订单确认、填写送货地址、生成订单功能4 q- ]( w$ s4 s5 F) [: l' k: o! c
3.技术应用
, T+ l5 e7 _& @, y: W) g 1)技术架构1 ]: J2 w3 N4 x; h
struts2,JDBC(连接池),jQuery,Ajax1 H2 d7 F& Q- X3 k
2)设计思想$ B/ H( c( V6 g, d& }
MVC和分层设计思想+ y5 T7 X4 f8 _0 _2 U. R+ J- w
a.显示层:JSP组件(jQuery,Ajax)
$ M6 z0 J8 o4 m: c/ A8 H8 m6 { b.控制层:Struts2控制器组件、Action组件
- G" F' d, [4 ?$ m4 u7 s/ h6 Y& b c.业务层:Bean组件
8 w3 L1 w8 Z4 L! }& O* ? d.数据访问层:DAO组件(JDBC)6 S2 B7 m% i! l2 |4 f, C
" i- ]% q# W- i) x( F8 w7 E: n
4.数据库设计9 h9 H. Q" E/ r- l
1)数据库导入
3 C9 M, ], z0 s. z- T: F# X create database dangdang; //创建库8 d, }- e4 I2 f2 Z; H0 L
use dangdang; //进入dangdang库: }: E9 V( \$ S! {
set names utf8; //设置连接和发送SQL编码1 ~4 J8 a- c3 ]
source 路径/dangdang.sql; //导入sql文件
. U: @% h( \ v8 d 2)数据表功能* `2 Y8 F; q# t
a.d_user(用户信息表)
9 ~; y9 G5 o' [5 m: I& Y7 p/ Z 存储了用户信息,涉及登录和注册功能- z0 s4 C: `# I5 I
b.d_receive_address(收货地址信息表)
! \& Z" N" t9 p( Z& R2 ~5 | 存储了收货地址信息,涉及填写送货地址功能5 q6 D/ q7 N/ @% N1 M* M' ~
c.d_category(类别信息表)
' T1 M8 J$ v6 y( C6 E: P* b2 O 存储了图书的类别信息,涉及主界面左侧类别菜单功能
4 A; B/ ]( C5 S$ B d.d_book(图书信息表)& Z, d- L4 q0 Q, \4 d3 j: A' R
存储了图书的特有信息,涉及产品浏览等功能, S' z4 h* i5 V( Q7 r8 L7 z
e.d_product(产品信息表)
& Y- R+ w9 ~# L4 m; l 存储了各类型产品的共通信息字段。1 v% T5 K! e- b+ u
f.d_category_product(类别和产品对应关系表): i0 B1 {0 `8 S
存储了类别和产品之间包含关系,涉及产品浏览功能
$ r+ n; `: \" c: S/ u g. d_order(订单信息表)
, [/ M2 m9 p4 \% `# A @ 存储了订单信息,涉及创建订单功能
& F8 e* V+ a* r" E h. d_item(订单明细表)
% v$ B4 o' k+ o4 r& V# e 存储了订单中所购买的商品信息,涉及创建订单功能。
8 Q0 k8 Y1 n3 x, J2 Q
$ l' x9 |7 _ [" X, i5. 搭建工程结构% y: g2 U; s8 `2 E+ \
1)引入需要的开发包
( |7 [! M$ F. [! |- Z' Z struts2开发包
/ w5 i! s- l- q! H+ t1 Q' R6 ~; t jdbc开发包
9 Y9 u& T: r) P9 t" f" \ dbcp连接池开发包
/ y& C, c0 F" G j 2)src文件结构
5 Q6 Q: m% [3 }. S org.tarena.dang.action :控制层
/ s; z' y+ q2 D7 _0 j org.tarena.dang.action.user :用户模块的action+ l- C( T& G, v
org.tarena.dang.action.main :产品浏览的action
- Q+ u/ j: S2 O1 @ org.tarena.dang.action.order :订单的action
+ w0 F: p$ f, @' M: q8 \' c4 L org.tarena.dang.action.cart :购物车的action+ s8 N% b% h- d& K" o- P1 g
org.tarena.dang.service :业务层
0 c" O3 P5 B% ^6 ~- F; F& D org.tarena.dang.dao :数据访问层
9 `! S4 a- Z, l+ i' D6 @% a5 B* I3 O1 S org.tarena.dang.entity :实体类
: O2 ^9 ?6 N! k org.tarena.dang.util :工具类% L: ` U; M( V! `( y$ D
org.tarena.dang.interceptor :拦截器& U' Y8 S' Z$ f
3)struts配置文件结构
) c8 X. h3 @' C web.xml(配置Filter控制器)
3 T* U. G& D) n3 K8 s" L struts.xml (struts主配置文件)" [" L5 L, j/ c G3 \: M
struts-user.xml(用户模块配置文件)/ o4 q* |+ x, N Z' Y! p0 z
struts-main.xml(浏览模块配置文件)
3 j; C8 E* O7 B& \, w struts-order.xml(订单模块配置文件)
6 u/ v2 L8 k: X1 w$ o- X struts-cart.xml(购物车模块配置文件)
* S l+ H0 m7 D" k/ k# e$ K) i' S; y+ r
4)WebRoot文件结构
$ y: Q, ~/ h5 t6 G% O /user/* :用户管理的JSP6 y1 @& n4 [0 p% ^7 n
/cart/* :购物车的JSP0 Q/ z; Z( ^! D7 ^; n+ f
/order/* :订单的JSP" W/ d: Y) f$ E! ^' B
/main/* :产品浏览的JSP. V D Z# i% ^( o( H: z3 s% J
/common/* :页眉、页脚等共同JSP _9 P8 o, |2 G" S
/js/* : 放置js脚本文件: e; u! i# D* f
/css/* :放置css样式文件( I9 T: _; W9 d# w p
/images/* :放置页面图片文件
+ u G, i4 h( m3 l3 K- j* @ /productImages/* :放置产品图片2 q1 w6 L4 F8 [3 ?, G8 Z( b
7 \0 m( Y9 c( u) q- o4 }-----------------连接池的优点-----------------! k: P, h7 ~9 J5 W
a.可以管理Connection对象,并且将Connection数量控制在一个安全范围内。提高数据库的访问安全性。4 e8 ^! k4 Q4 w! l% e4 a8 I* o
b.连接池中的Connection对象与数据库保持连接状态,避免频繁的建立和销毁连接。" _6 e6 s1 D: S7 B5 z# k, ^/ ~
0 ^2 S, @ p4 e# s8 h1 c. m============用户管理模块==============$ \- T- D# ?4 G- S. W
1.注册需求. z9 S- e2 C$ @: a' G) h/ H/ {
1)表单验证(采用js+Ajax); G: D0 r% P' |' \( U- \* C& A1 K
邮箱:非空、格式、唯一性(ajax)! S c- C4 B$ ?$ e* l* O+ u
昵称:非空、格式$ N8 {& u# x0 p: c
密码:非空、格式! y+ O0 ]0 `- n* \( X) p
确认密码:非空、与密码一致
3 V \- n4 ^" {& ^+ { 验证码:非空、正确性(ajax)- o, B1 Z* ]" x e6 B
5 f3 @+ k5 K1 z y8 T 2)将表单信息写入数据表d_user1 i; Y- L' J( g1 ^
编写实体类、DAO、Action
9 o$ W4 S, u5 m# Z 3)给用户邮箱发送验证码# c# f0 S% k. g' V5 v. l
引入commons-email.jar,email.jar
0 D Y+ m; W: @, T) U h" O 参考EmailUtil工具类代码
% u7 x- F* u6 O8 \& ^( G" d5 y, k 4)进入邮箱验证页面verify_form.jsp: @, P# L2 e d1 A" Y/ i a
/ r1 z) ~: h, e2 e3 A9 h, k( D
2.邮箱验证
+ Y4 J! J- r0 W$ c4 O2 T2 T 1)表单验证7 f6 l) _( C' Y. X$ T
验证码:非空、正确性(ajax)/ C/ Z: C# t1 s r; ^$ x9 c( y; ?
正确后跳转到成功提示界面:window.location = "register_ok.jsp";
m' l8 V6 D1 L& K+ F% P8 k 2)Action逻辑6 K4 ?9 z: ?0 o4 \
a.利用验证码去d_user检查
8 N' Q- d* R/ j2 ^, P8 k b.如果正确,将d_user的is_email_verify字段更新成Y;不正确在verify_form.jsp提示“验证失败”
9 W( {" o. |. s. J c.跳转到register_ok.jsp- L' r0 f" Y+ j7 {
3.用户登录; J& F& j7 h9 K$ x
1)表单验证
+ Q: T! ?8 z+ J% ]* z$ @9 z" F9 q 邮箱:非空、格式; q, Z. }8 b; c7 q, x
密码:非空( D: h; N0 b$ M9 o
2)Action逻辑
2 f9 Z* W+ K: e, f& b# N: }& h a.检测Email和密码是否正确,失败回到login_form.jsp提示) b2 L" P4 u. N6 U+ p: }7 n
b.检测is_email_verify邮箱是否通过验证,未通过进入verify_form.jsp
& ?0 v8 Q+ X3 v, m, _8 M5 @ c.更新最后一次登录时间last_login_time和IP地址last_login_ip。1 G9 y! z! T, r7 ^5 c# Y
d.将用户信息放入session。& g. f4 W8 @ C/ z/ e4 p* V
e.都正确进入/main/main.jsp4 Y1 |3 M! J" }% J) h8 O
4.main.jsp页面的页眉部分,显示用户是否登录的状态( w3 Y* K8 N% l' I
如果用户已登录,显示"欢迎XXX,【登出】"
- f- A8 c! u. @ 如果用户未登录,显示"【登录】【注册】"/ q, V9 C4 u/ r1 K( {/ q; _7 s
3 H( K7 \) j9 V7 Q$ u$ \
数据库 模型
8 r) Q- B8 @. Y: I8 T, u9 l- [6 m
/ B" {1 x) l" i) q8 p, _3 V
- A! z% E% B- I6 Q* g m" s效果演示图:. S3 F' h) ]; \* b
首页演示图:
- m6 ]6 W% A3 {8 [ z" j! a
3 |# }6 o; t- c+ [$ [0 \( E+ e
0 j: G/ z) E2 g* z' o
注册页面:+ [7 h! p- G7 t9 r/ d0 I% v
) R0 H. ~( v2 e0 ] c5 t
邮箱验证页面:6 s6 u% f7 f0 u( ~, D7 _
) Q! ]5 ~0 N3 U3 `: H
验证成功:: j% b; t8 J; H* {
5 E* D# @0 A8 R& `
用户在线状态:
3 M) \! i8 b. X( K* K
5 L8 H1 _+ \* ]' e# s2 ?1 z5 B# i用户可以购物了:* \* m9 }& B; J. u, W; A" t9 K% z' S
) r+ a/ i2 ?; D" f- g& M
% Y$ _; ]6 f& ^2 w
源码下载地址:点击下载
& @4 t, }' _- n4 O
; \3 S6 S9 I* o6 q; R- z7 c# i
, k/ } j s$ i数据库下载地址:点击下载
5 E1 l0 v5 [$ \
( W- y% t' E* l9 |1 _& N# m |
|