TA的每日心情 | 衰 2021-2-2 11:21 |
|---|
签到天数: 36 天 [LV.5]常住居民I
|
1.项目介绍" ? S/ M& E/ t; G* n/ R
典型电子商务系统(在线购物平台)。模拟了当当系统部分功能。$ e; {! E7 j- Q1 b, Z) c+ W
2.功能需求$ }. ]- v" Y/ x; J' k9 j# Z
1)用户管理模块(3天)user
; v% |$ R0 j! b7 T 实现登录、注册功能: x% f/ [7 D! W! V+ q
2)产品浏览模块(2天)main
0 p$ T4 ^2 t* L 实现主界面和类别浏览功能
( s3 W1 S7 m: T \9 M' t 3)购物车模块(1.5天)cart9 m% p% Q+ R2 ^9 |. R' J; `
实现购买、变更数量、删除等功能- i0 U) F1 \+ a' i j" W4 s
4)生成订单模块(1.5天)order( c4 G: x4 q: U' T
订单确认、填写送货地址、生成订单功能) ~: F0 }0 V' K
3.技术应用
6 s2 u1 ?$ K4 n$ { 1)技术架构
) _$ D& t; `- E( o! J struts2,JDBC(连接池),jQuery,Ajax
/ w$ ~, q- a- x. L) n* s y1 C6 j 2)设计思想" ]1 n& D, ~1 E5 b' R/ A7 B+ J
MVC和分层设计思想
/ w/ D4 Q% h' j' p, w a.显示层:JSP组件(jQuery,Ajax)
8 \5 j" l0 J# P b.控制层:Struts2控制器组件、Action组件
# s" }. M: i) ?' t- J3 N c.业务层:Bean组件
0 Z3 Y* |' L& H2 K( a: j d.数据访问层:DAO组件(JDBC)) v$ A4 E5 N A
9 H/ h( O/ Y7 {: w+ v y4.数据库设计
! [5 h( B3 M0 t 1)数据库导入
. D0 V+ K! N* i4 p9 j; K/ ~+ K create database dangdang; //创建库" J" c( Q7 m N+ J* o0 y. d( k% v R
use dangdang; //进入dangdang库+ ]4 h% i5 }3 U% j; s" I( a/ ]
set names utf8; //设置连接和发送SQL编码/ z! P. p+ Z7 Q+ h& B" J# y
source 路径/dangdang.sql; //导入sql文件
$ y; O- }! ?7 y' ?5 A" E) N 2)数据表功能
* K8 L: @9 _4 i6 Y/ g4 N* u a.d_user(用户信息表)
$ \6 ^" [/ u1 v% U4 _, k4 W 存储了用户信息,涉及登录和注册功能
W% d6 O, p. p5 n b.d_receive_address(收货地址信息表)! K# L2 h/ ^ |2 y1 \
存储了收货地址信息,涉及填写送货地址功能" Z; G1 H& U/ I0 l, B
c.d_category(类别信息表)
( R) D2 J% S* m3 t& ? 存储了图书的类别信息,涉及主界面左侧类别菜单功能! [! m3 Y. S. I' c3 M
d.d_book(图书信息表)' b) A- _0 _3 x' f
存储了图书的特有信息,涉及产品浏览等功能
: w6 v" k" a4 F# O e.d_product(产品信息表)- p: J3 c" W! C
存储了各类型产品的共通信息字段。
, a/ G# e# u9 l$ R. x f.d_category_product(类别和产品对应关系表) M2 D- r4 `. t% X' ?& {
存储了类别和产品之间包含关系,涉及产品浏览功能8 _5 p2 E4 `# a4 ~1 t% O9 |) g) b
g. d_order(订单信息表)
0 j) n2 \. e9 c' A/ _+ h 存储了订单信息,涉及创建订单功能& h) G( J: M. G9 l
h. d_item(订单明细表)8 l' H) [3 c( P& e" `( A! e2 X5 \/ y
存储了订单中所购买的商品信息,涉及创建订单功能。0 p6 H0 ~7 q" j; c6 s- J" r
$ A2 I& o" K9 H# v: v$ o. g4 ~! V. ^
5. 搭建工程结构0 G& v/ ]: ^6 k( s+ C% G
1)引入需要的开发包1 _- p8 M) s1 \& T2 g. v
struts2开发包0 z0 o# ^2 N) @
jdbc开发包5 s; m' M# w+ u* `8 G9 i
dbcp连接池开发包1 A6 {5 D/ {, L! n" @5 J
2)src文件结构% q: M. S: z8 j2 m4 f: j
org.tarena.dang.action :控制层
6 B1 j0 r% [: C org.tarena.dang.action.user :用户模块的action
5 `* K+ @6 N W4 I& [ org.tarena.dang.action.main :产品浏览的action
$ y) |0 @+ K4 L \9 P, P org.tarena.dang.action.order :订单的action
. c7 e; f4 v; Q org.tarena.dang.action.cart :购物车的action
- }; @( r- C4 b2 P0 E) N/ Z org.tarena.dang.service :业务层( e( W2 d8 _% T- `
org.tarena.dang.dao :数据访问层" w7 b' y% X! k: p2 P+ v
org.tarena.dang.entity :实体类
# J6 E4 w! N- h" B3 x0 g. E/ H org.tarena.dang.util :工具类
$ `/ h! Y8 T0 R org.tarena.dang.interceptor :拦截器
9 i4 S' y; m' X7 B& w' v 3)struts配置文件结构2 X% c+ m( N: u0 Y" w& v5 [7 E6 r
web.xml(配置Filter控制器)
, z9 I; h7 {( Q! k" Y) E$ o4 E# O struts.xml (struts主配置文件)) I; Y% @5 M2 J E7 ?. b: J
struts-user.xml(用户模块配置文件)& q$ D/ k6 x8 G# K$ ]: I
struts-main.xml(浏览模块配置文件)
2 W2 J3 _" d! x# T+ g struts-order.xml(订单模块配置文件)+ v' R8 w Z# ]7 \
struts-cart.xml(购物车模块配置文件)0 W" u) I3 I' G% f8 ?( `: R* u+ r
; z' l2 H5 ?6 Q8 e3 t 4)WebRoot文件结构
) U; R; ?5 S; ?2 w/ P% i1 r$ Z% i% s /user/* :用户管理的JSP
# K. ~& N' k5 W7 X# p+ c9 w( }. j; c, b /cart/* :购物车的JSP
H f6 m" ?1 D" b /order/* :订单的JSP# p9 J, O' a/ {! ?0 E
/main/* :产品浏览的JSP S$ ~' a2 @" F2 G! Z6 q
/common/* :页眉、页脚等共同JSP: G5 O! {' N w4 A
/js/* : 放置js脚本文件( v r! b+ c+ h" F
/css/* :放置css样式文件
) D- Y6 z, I2 f* Z: v4 `. ~9 m) y /images/* :放置页面图片文件% m- A/ R- }' ~! C! E
/productImages/* :放置产品图片: @/ ^1 w% f- F" Q( d, O
1 Q* E7 y% D; x
-----------------连接池的优点-----------------
9 o9 F# C% t' j* D' Xa.可以管理Connection对象,并且将Connection数量控制在一个安全范围内。提高数据库的访问安全性。
) j0 m) {7 l7 c! T9 @) [b.连接池中的Connection对象与数据库保持连接状态,避免频繁的建立和销毁连接。
\. B2 f* s6 X, I! a8 V4 b, k& ^$ c* M
============用户管理模块==============' }% G3 ]! ?' E0 ?+ a" f/ E- k
1.注册需求
) {# _1 w" U$ T9 R 1)表单验证(采用js+Ajax)) z7 C& {8 s. j* x
邮箱:非空、格式、唯一性(ajax)6 g3 \% r5 L+ w S9 o: z
昵称:非空、格式& M' L8 w& O: o5 s. z
密码:非空、格式
$ b9 p7 m. a5 C9 s: A$ B 确认密码:非空、与密码一致
9 O0 d& ]. C! E 验证码:非空、正确性(ajax)
" w9 b6 _4 U! [* a! R: S$ L- `3 @; t& `$ f
2)将表单信息写入数据表d_user
; B- H4 m! R5 I! X' ^0 o 编写实体类、DAO、Action
0 H% P: y F- z# e) y3 i7 n 3)给用户邮箱发送验证码+ x8 T( u# K) _/ {' W
引入commons-email.jar,email.jar X z5 @, S A( V( J# K
参考EmailUtil工具类代码
5 H! L6 h, U$ P. K4 z 4)进入邮箱验证页面verify_form.jsp
) l$ }1 w$ r5 B: R) j u% O7 _
" `9 F- @ \5 A+ S6 D2.邮箱验证
, b1 Y% Z k; E$ w' c. m& X& j 1)表单验证
9 `% `; |% v, Q M$ v% Q 验证码:非空、正确性(ajax); \- d- r) j8 k h# Z
正确后跳转到成功提示界面:window.location = "register_ok.jsp";+ }! i5 k7 P: a3 f& W5 Y
2)Action逻辑1 L, l% s& @3 e0 R
a.利用验证码去d_user检查! d; S& N+ t! n7 \
b.如果正确,将d_user的is_email_verify字段更新成Y;不正确在verify_form.jsp提示“验证失败”
! N* y# y4 L7 t! l9 O c.跳转到register_ok.jsp* |; l' ~# P5 B( @
3.用户登录
/ d( a# W1 G3 t4 a 1)表单验证7 E. q; |7 z* Q6 J5 [6 p$ C* @ J: {
邮箱:非空、格式3 W* D" e7 e0 @7 W
密码:非空
! g5 f4 | F/ Z3 [$ V7 w5 F7 h 2)Action逻辑
9 A. X" o( K! ] a.检测Email和密码是否正确,失败回到login_form.jsp提示7 l, D: U+ ^+ z
b.检测is_email_verify邮箱是否通过验证,未通过进入verify_form.jsp+ X; P1 H4 }" W1 _7 {$ D
c.更新最后一次登录时间last_login_time和IP地址last_login_ip。
' y# l7 }5 U1 L d.将用户信息放入session。
& }2 K4 V4 [/ ?2 k e.都正确进入/main/main.jsp; m8 N: g! i3 a! p1 o
4.main.jsp页面的页眉部分,显示用户是否登录的状态
. ^( G* z) l7 [0 h3 p* m8 N! x 如果用户已登录,显示"欢迎XXX,【登出】"
! e) c) P) F% J 如果用户未登录,显示"【登录】【注册】"; m$ v% s( w p. K* X9 x/ q
3 h# \# k/ I. n5 J
数据库 模型
4 l4 H: B* F; |/ O9 y$ O
" J; X8 C/ @: E$ B; m( p1 R
- F8 |/ Z! Q" P% h$ Q) G7 q% k$ R
效果演示图:
1 \4 S: [& a# w3 t, \/ q7 ]首页演示图:$ P4 W* t3 ^9 {) x; R8 ~5 I
; q7 S* _$ y; p! A
A! V2 l% F! J- s8 t' J, E注册页面:) m: M& ?- T9 X& e- b
. j, c) Q& s2 l1 H6 P$ Y/ G7 w
邮箱验证页面:
" E5 w0 F& M( P" O& {; L! p
* V& u9 u5 J: \4 u( ^0 ^
验证成功:
, m7 Z/ g; J8 E- R- P
. g& E! q6 m- \' N用户在线状态:5 l' I! d, p/ N) F! a
* s. v0 Q o- q) x用户可以购物了:
; k3 I) t; q# `3 u
4 C0 p% H# K) u
; H2 {; F# L- [0 t
源码下载地址:点击下载
1 |! L: ]5 t+ V/ P# ~8 n& E. }+ S: r: o! y
3 M% ]" U* a G* [
数据库下载地址:点击下载$ {9 y) c k& ]. v- d7 t+ S# \
/ b. l8 v/ c+ s5 z1 L |
|