TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
1.项目介绍+ } u3 w3 a. s% X8 ^: L
典型电子商务系统(在线购物平台)。模拟了当当系统部分功能。
. A, [" d9 {" Y$ [5 Y# I2.功能需求9 f# m9 O* [. M
1)用户管理模块(3天)user a; W- k9 d' s& {! w
实现登录、注册功能$ o4 ~4 K* I( p; t5 C" C2 c' h+ y" a
2)产品浏览模块(2天)main" A0 ~" L" m% ` i1 s( X! K) y4 k x
实现主界面和类别浏览功能
; d% ?' r7 e6 q) f 3)购物车模块(1.5天)cart3 n' h2 b- a4 f3 W" }! q) }
实现购买、变更数量、删除等功能0 h( [2 m) j& T$ l3 X
4)生成订单模块(1.5天)order. r) p6 i" }' a t& J
订单确认、填写送货地址、生成订单功能3 d1 D% f" i8 F( c' P" S
3.技术应用
' b! Z! r% @2 o3 C 1)技术架构2 I; }0 `* z; L# P9 |9 P& A$ q3 U
struts2,JDBC(连接池),jQuery,Ajax
. p+ y5 ?6 U _, _4 v( W- i# z 2)设计思想
7 _$ J0 ?9 a' m7 z8 i, d MVC和分层设计思想
5 ~1 W3 S7 F5 ]2 E6 q a.显示层:JSP组件(jQuery,Ajax)6 D- S0 C6 }: l8 ?# |" T
b.控制层:Struts2控制器组件、Action组件$ V1 i5 }. _+ ` R& E
c.业务层:Bean组件, W4 w& k( F; P5 u# E4 q/ N. y+ S# ?9 b
d.数据访问层:DAO组件(JDBC)% V4 N+ _- T0 h( C; `
" d' d" D7 ]& {/ ^4 [1 E4.数据库设计
( [, v( ~3 G. c 1)数据库导入
" m# H: i; `6 c2 g create database dangdang; //创建库
7 @1 P1 \# g2 |* a0 s, ^9 r6 m2 F use dangdang; //进入dangdang库
$ B5 D6 s6 I4 D+ Y: z set names utf8; //设置连接和发送SQL编码. K+ _- i5 x1 S y: }
source 路径/dangdang.sql; //导入sql文件9 l' I3 u, r i3 H6 x
2)数据表功能
' E2 F- X! Y/ i' y" Z9 W" v @ a.d_user(用户信息表)9 k% K2 \" H5 |5 B$ W y
存储了用户信息,涉及登录和注册功能2 G) {# r p1 u2 U
b.d_receive_address(收货地址信息表)
$ D' x$ f* f5 c7 E) } 存储了收货地址信息,涉及填写送货地址功能1 Y# G$ j, a X- J# e
c.d_category(类别信息表)
$ Z1 |5 L" l7 }. J 存储了图书的类别信息,涉及主界面左侧类别菜单功能7 G# W: H H4 C# v9 | X
d.d_book(图书信息表)
5 Y( ~; Q8 e4 y* P& ~8 X, p! \ 存储了图书的特有信息,涉及产品浏览等功能
1 }- n' x/ x: s1 Y9 X8 ] e.d_product(产品信息表)
- Z4 C& _5 E. ?2 w4 F5 [! D% W 存储了各类型产品的共通信息字段。1 B. H0 L" D* E2 j: m
f.d_category_product(类别和产品对应关系表)& b+ N4 ~& L0 v4 r3 s E( Z: |
存储了类别和产品之间包含关系,涉及产品浏览功能
6 u% S, z9 N: e) ~% @( u x g. d_order(订单信息表)! r/ k$ g( H( g
存储了订单信息,涉及创建订单功能1 Z" D1 c+ `: K' L
h. d_item(订单明细表)
2 b- l- |* J5 a0 p# @' O: \0 J p 存储了订单中所购买的商品信息,涉及创建订单功能。
! I) i. o8 q/ p$ ~2 \
' G) ^2 |5 B6 }1 a9 x: ?2 w5. 搭建工程结构
9 b2 ~+ t/ H$ a* h 1)引入需要的开发包( F% d P* ^$ y, a
struts2开发包6 ^3 L' V0 p6 Q
jdbc开发包
3 {! W2 {" r* ]4 \; f dbcp连接池开发包
; \" m( N( |' \' I 2)src文件结构( \1 K" z7 [ J4 F& _3 ]) c1 O
org.tarena.dang.action :控制层. ]& ]; f% i7 y
org.tarena.dang.action.user :用户模块的action0 C; `& k/ |7 m! C; x
org.tarena.dang.action.main :产品浏览的action
+ q% v- T( U5 d, a2 ]" ~ org.tarena.dang.action.order :订单的action( b/ {2 ]1 t4 N6 |8 ]
org.tarena.dang.action.cart :购物车的action4 b6 I- t0 L& ]3 ~" A
org.tarena.dang.service :业务层
5 \+ t; e8 Z; N5 O" `" v' E org.tarena.dang.dao :数据访问层/ `& e0 D& p' R, v0 k: g
org.tarena.dang.entity :实体类
' R6 c- @: k A$ _ org.tarena.dang.util :工具类' W# Z, D% M" }0 t
org.tarena.dang.interceptor :拦截器
( V1 P7 }% `4 Y% Y* l* y/ ^. k 3)struts配置文件结构8 z: G: ~' E! g# l/ h, G, {
web.xml(配置Filter控制器)
, i4 {" ?# T% a; y1 l/ P2 g struts.xml (struts主配置文件)5 S8 S2 H" L$ f4 f
struts-user.xml(用户模块配置文件)0 K* n" P- W& |" I! S& B
struts-main.xml(浏览模块配置文件)
1 `- j& _& }2 N4 Q struts-order.xml(订单模块配置文件)& R+ f: J. M3 a/ K' r, P
struts-cart.xml(购物车模块配置文件)
1 M) e( _( K0 V0 C4 H$ |0 t N5 p2 w V! N2 Y8 ^2 }
4)WebRoot文件结构' r& {! ~9 L! h: k2 `' U4 c1 m% Z7 T& `
/user/* :用户管理的JSP2 ?# q2 e7 B! ]5 J/ _
/cart/* :购物车的JSP
! u' L* ^; r# D7 a- I2 S /order/* :订单的JSP# x) j1 N8 u; F
/main/* :产品浏览的JSP
2 a, i' @: w: c' ` /common/* :页眉、页脚等共同JSP
* d1 H I9 v0 U# B /js/* : 放置js脚本文件
: I t1 ^9 e7 ]( H0 m7 r /css/* :放置css样式文件. O9 c$ ~% O+ y( |/ _
/images/* :放置页面图片文件
9 @/ i X4 [" f( W: X /productImages/* :放置产品图片
- v( ?+ ~: ]6 @9 B, @! v, A. h d6 p) _0 z: J- k
-----------------连接池的优点-----------------/ \! Y: j( {3 g9 n/ C
a.可以管理Connection对象,并且将Connection数量控制在一个安全范围内。提高数据库的访问安全性。
* N7 P, }4 K3 s. W/ Kb.连接池中的Connection对象与数据库保持连接状态,避免频繁的建立和销毁连接。
# C- [% z# N6 K6 V0 n
% p3 C# ?5 V5 _; i" T$ N============用户管理模块==============/ U4 W' v; @% @. P, w) x9 @8 j8 S
1.注册需求. n) E9 O u T& w/ z! D
1)表单验证(采用js+Ajax)
' @' g. |; m! y3 y/ i9 A 邮箱:非空、格式、唯一性(ajax)2 e2 B' Q* e* x5 x# |
昵称:非空、格式
0 N0 T: j8 b& R; [9 w! w& _* ~& Y# Q 密码:非空、格式5 q4 [; O# Z6 ^8 K2 L, J& r
确认密码:非空、与密码一致2 C# n' y4 D& K4 j4 a
验证码:非空、正确性(ajax)7 R- N; `3 Z' \' d
8 d# v6 C5 X4 M& R
2)将表单信息写入数据表d_user
3 d$ ^$ ^3 k& E' E6 y4 e 编写实体类、DAO、Action6 I" G6 `: D% \. g% W: M
3)给用户邮箱发送验证码6 F0 e% C) q; ^0 T* Z$ X
引入commons-email.jar,email.jar
0 z# N# G# C1 U- e/ _7 _- M& e9 { 参考EmailUtil工具类代码
! W( H7 ~& o4 t/ H6 X7 N 4)进入邮箱验证页面verify_form.jsp
7 I; y, n1 ^9 i/ [5 `2 P( T% E% \5 h( Z
2.邮箱验证8 o7 g) m' F4 W. U; w
1)表单验证
, d1 J( f/ R+ R1 @: ?6 f3 s. ^ 验证码:非空、正确性(ajax)
@3 M I% ]: n9 S; e 正确后跳转到成功提示界面:window.location = "register_ok.jsp";6 j4 P# f' s5 b- l! C, C
2)Action逻辑
4 O" p, |9 t6 v0 `0 h6 k; l0 ` a.利用验证码去d_user检查9 T5 I h& e) c: @. L- I) C% R
b.如果正确,将d_user的is_email_verify字段更新成Y;不正确在verify_form.jsp提示“验证失败”
7 }$ N+ m) \0 l2 x c.跳转到register_ok.jsp! @0 y! G) E% o) u* O1 z" P& O+ a
3.用户登录
# b8 e8 h. Y _# a. u0 X 1)表单验证, v; {7 ^- e0 Y- {8 q
邮箱:非空、格式
& F# e5 U+ L7 r 密码:非空
" O. B2 W) w6 L9 r+ b 2)Action逻辑7 _! c; Y# d( w1 i0 H1 o
a.检测Email和密码是否正确,失败回到login_form.jsp提示
) T# @0 ?7 A2 a5 Z) w' y0 D b.检测is_email_verify邮箱是否通过验证,未通过进入verify_form.jsp8 ]+ o6 D5 Z# t
c.更新最后一次登录时间last_login_time和IP地址last_login_ip。+ `5 Z" h: ]; N5 F1 J
d.将用户信息放入session。
7 O) @0 G: B. Z. n e.都正确进入/main/main.jsp2 M' k% B- a& t* W& Y
4.main.jsp页面的页眉部分,显示用户是否登录的状态
6 }) ^2 X2 u# X3 R a T 如果用户已登录,显示"欢迎XXX,【登出】"! B# v& m7 }6 M
如果用户未登录,显示"【登录】【注册】"
4 u* T# `0 Y1 m8 C$ C7 e& T4 k5 K. @; H5 l! f) i& K, V/ U4 S: N3 q
数据库 模型 1 L# C4 |! Z% {" Y
. t5 F% I7 h. b$ X# `
* f3 }: n2 B% u/ N效果演示图:
: C! C/ r& A3 A4 f8 E* F, h首页演示图:. q# M4 h- g8 _3 R2 k
9 U( X! v2 z/ e4 _) B' M5 f0 J
$ N R' O p' E注册页面:
1 x4 ~( z' F. ?
5 H. p" K- i+ I, q* M( ^, Q
邮箱验证页面:5 L: V# g" ^; k- p
1 f* w# Q. s2 F0 A2 ~+ M# i# k验证成功:$ Z* u7 ]4 D( O N f
( a7 J8 \# C1 i
用户在线状态:& T+ g7 o& `, w* |3 ]7 Z8 g
7 Y6 @ F+ k: t* M) j- J; \) P用户可以购物了:) k- r5 ~7 J' h, {* l
# B E" j9 p2 k3 j$ D. Z% b" Y5 `. M1 h
源码下载地址:点击下载
! |* s9 e; @. m3 @$ ~
# M+ D" W# W$ E C" y* B j" M
2 R$ W. c6 Z8 {( }数据库下载地址:点击下载 r& C0 l% l& M
! [# M: P; P7 b! p4 y# w |
|