TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
1.项目介绍
9 U' z/ B4 F0 f 典型电子商务系统(在线购物平台)。模拟了当当系统部分功能。
- t# \/ Z. I9 h/ L2 K# O! z2.功能需求/ e i1 L r) t
1)用户管理模块(3天)user2 z) S/ t' G6 i, ^. @
实现登录、注册功能- _7 @1 I+ L! `/ S. H7 r
2)产品浏览模块(2天)main
) `% `+ J$ V3 P" K 实现主界面和类别浏览功能0 P- W8 S& Y5 N' z% i
3)购物车模块(1.5天)cart
2 ^5 \4 ~& k; Y" a+ D. n7 k 实现购买、变更数量、删除等功能
/ h3 Y2 y# _ T. n) N% o0 q 4)生成订单模块(1.5天)order
7 O; P1 o; A8 ~$ I! k$ I 订单确认、填写送货地址、生成订单功能7 j0 _- F; p) Z
3.技术应用
+ d; L; i1 q- ?. m' T 1)技术架构7 Q4 P8 f- n; |( Y- w
struts2,JDBC(连接池),jQuery,Ajax
* E0 U, |8 C. Q& V1 a 2)设计思想
* i9 w- o& U6 k/ O. N- T MVC和分层设计思想* A* A1 ^1 y6 Q
a.显示层:JSP组件(jQuery,Ajax)
5 e6 F: V) L3 i+ C/ Z b.控制层:Struts2控制器组件、Action组件
' _" |" c. x% F+ ^ c.业务层:Bean组件) ^* k" m$ U: I5 w' W3 i5 q/ q
d.数据访问层:DAO组件(JDBC)/ ~( H# e" s3 X Q) K: s
$ Z" @: v4 Q/ c9 n9 p4.数据库设计
3 p% s; ^# j! Z3 y2 _ 1)数据库导入* v3 o, y& U0 Z8 E( d& ~- n
create database dangdang; //创建库
1 |4 n4 e: b& J) ]$ ~( M+ Z2 W; l8 Q use dangdang; //进入dangdang库* q( [ ]+ j8 O x, P/ J
set names utf8; //设置连接和发送SQL编码, ~. I' ?, F' Q2 a- A0 w8 h
source 路径/dangdang.sql; //导入sql文件
- W* D: N( f$ B" S; f' u- R 2)数据表功能
0 D# e4 {: N0 i( D; n6 V6 L a.d_user(用户信息表)
+ ^" l B9 D, C% f* t+ u 存储了用户信息,涉及登录和注册功能
! H6 i$ N. P: N& v4 B( Q9 O b.d_receive_address(收货地址信息表)2 q5 a5 b+ Y) ] z
存储了收货地址信息,涉及填写送货地址功能
. H5 q, `3 C2 l c.d_category(类别信息表)
: j5 S [4 E+ v. W: R" E2 a* G: w 存储了图书的类别信息,涉及主界面左侧类别菜单功能5 x* w# j& ]0 i
d.d_book(图书信息表)
8 x- S! d& t0 y8 L# p 存储了图书的特有信息,涉及产品浏览等功能; q, U# |3 ?+ G% Y- u# b
e.d_product(产品信息表)
4 x6 T1 X" y3 e# x- ? 存储了各类型产品的共通信息字段。$ ], T4 K* o3 e$ q- t
f.d_category_product(类别和产品对应关系表)
/ ]# U, u6 P4 q, [+ F! H' Y) J# i 存储了类别和产品之间包含关系,涉及产品浏览功能
6 ?1 ?' ]3 ~. i$ i' U1 | g. d_order(订单信息表). q! \5 j: P' F) e$ l1 q; V
存储了订单信息,涉及创建订单功能
# b! n/ b3 h/ @1 O: ` W h. d_item(订单明细表)
) ]; e8 [; o; a- E! Z1 g/ {- b) U* M 存储了订单中所购买的商品信息,涉及创建订单功能。
2 R' O. M9 c( A4 D/ d' c) H/ H/ z; j% o4 |( i, c! C
5. 搭建工程结构
/ \3 _! m8 R4 S) U6 _" f* x+ H 1)引入需要的开发包) N+ Q7 g* B6 ]7 ^% K
struts2开发包
+ ?7 B! g& |( G1 O$ H9 L jdbc开发包
4 M1 E8 z% m% ^ dbcp连接池开发包# d6 b( o+ w; k* X" v" [8 I
2)src文件结构
, h* H" W! I" l' F3 S4 Y org.tarena.dang.action :控制层
+ E j8 C `7 c4 a1 V) n org.tarena.dang.action.user :用户模块的action& D* a1 u$ M2 {. ^
org.tarena.dang.action.main :产品浏览的action, p k& C* W0 Y8 [: j9 a
org.tarena.dang.action.order :订单的action4 `/ ?4 k a9 A* x/ w9 V2 J
org.tarena.dang.action.cart :购物车的action
# `/ o. g6 a. f- k9 F- J' [ org.tarena.dang.service :业务层
! W# l0 Y1 s9 b2 ~5 V5 k; k org.tarena.dang.dao :数据访问层- q( n, w5 M+ j$ U' b! i. q% T
org.tarena.dang.entity :实体类- H% ]! I, D- z1 | Z
org.tarena.dang.util :工具类
' h5 {6 c" n3 N. c! w6 L( |2 S org.tarena.dang.interceptor :拦截器# N7 J/ U6 e8 ]( _+ c/ x9 {5 `2 Y
3)struts配置文件结构
0 E0 m- Q" m: J A web.xml(配置Filter控制器); ~# s5 b6 Y$ p0 A+ E
struts.xml (struts主配置文件)
8 p1 B N) D( V- k struts-user.xml(用户模块配置文件)
2 f5 l- H9 t" E- k& d; Z struts-main.xml(浏览模块配置文件)9 a0 @# i& X$ J7 f& J# B# i
struts-order.xml(订单模块配置文件)1 }) c& _9 Y) }& _0 \) J D6 B0 G
struts-cart.xml(购物车模块配置文件)
* V; {8 O% B* t* h5 S1 p# y" L1 j
4)WebRoot文件结构( A: a, i4 G& h9 V" ^
/user/* :用户管理的JSP0 r/ S5 U6 ~* Z. l- B
/cart/* :购物车的JSP, K" R/ P+ ?8 P4 w0 j
/order/* :订单的JSP
$ B. z. H6 G6 ~9 k4 Y; B /main/* :产品浏览的JSP. o/ f. U. |: d, }* D$ v7 D! ?
/common/* :页眉、页脚等共同JSP
. v' O: J8 v. @4 B0 l /js/* : 放置js脚本文件9 C7 Y+ q- S, g; l3 V4 G) p9 l% s s
/css/* :放置css样式文件3 L" G2 q2 w5 J/ N0 ^$ F
/images/* :放置页面图片文件$ k- h# n3 G3 v2 t* I
/productImages/* :放置产品图片: A: U: [" S" |; ]: h+ q
/ f& L" Z R; n3 h. O
-----------------连接池的优点-----------------
; a; C4 `' D3 O/ e p. wa.可以管理Connection对象,并且将Connection数量控制在一个安全范围内。提高数据库的访问安全性。
' E; S- o1 R% Xb.连接池中的Connection对象与数据库保持连接状态,避免频繁的建立和销毁连接。
4 P& c5 b3 `4 \5 J5 u* I8 z
0 r# f; K7 `8 ^! }' e============用户管理模块==============6 _- _# A# q* s: D8 n
1.注册需求9 M f9 d1 I% n: z
1)表单验证(采用js+Ajax)
/ ~( ~0 `4 {' l4 e 邮箱:非空、格式、唯一性(ajax)0 a5 }6 b S3 g' Y: P. J9 e
昵称:非空、格式( J* T8 G# E9 @# F" M2 Y( B; k. F
密码:非空、格式7 X" {. W( L0 B/ k
确认密码:非空、与密码一致0 @- c" p5 x* j8 Z+ |
验证码:非空、正确性(ajax)& M/ r( y7 h: z/ D$ [6 f1 b
! `( U" j8 ?7 n b 2)将表单信息写入数据表d_user
7 e( X( ~5 X5 K |9 _/ [ 编写实体类、DAO、Action) S% D( c' ?# C' E
3)给用户邮箱发送验证码
+ @' Y, f; V+ O- z, Z5 R 引入commons-email.jar,email.jar
- a& u5 d: ~4 v1 w6 U 参考EmailUtil工具类代码
6 ?3 L. @$ P2 U, @1 _7 p) A 4)进入邮箱验证页面verify_form.jsp" Q" _! S% p- _2 M$ k& L0 V
# x* B% ?3 T: @$ W
2.邮箱验证
; T( F5 p+ U9 ^4 S3 P! u- P 1)表单验证* T% b/ H7 _- q4 I( M7 q/ s# t8 O; X
验证码:非空、正确性(ajax)) ]) r/ a4 f( J, k4 a+ n# q$ E2 A
正确后跳转到成功提示界面:window.location = "register_ok.jsp";7 k* Y) r* S* \4 W* v9 \3 K
2)Action逻辑
* x! o1 z! f0 x7 p v) T a.利用验证码去d_user检查. @' g) o: [" X3 {9 \. [
b.如果正确,将d_user的is_email_verify字段更新成Y;不正确在verify_form.jsp提示“验证失败” M1 j2 l0 e+ q( s p
c.跳转到register_ok.jsp# c A7 q1 ?" P6 f# U3 T+ B3 s
3.用户登录4 p( F$ ]! U9 D6 V6 e; I0 ]1 V, @" z
1)表单验证: Z( s4 o" g9 P" J5 Z) c) n
邮箱:非空、格式$ S( ~/ V b+ i' P
密码:非空6 Z$ S' g) p3 Q3 |$ H% W4 U
2)Action逻辑
9 o T1 D8 j7 V7 }; E, N! U" S a.检测Email和密码是否正确,失败回到login_form.jsp提示
7 S$ d( q' w2 I B, s# X. g2 V b.检测is_email_verify邮箱是否通过验证,未通过进入verify_form.jsp
+ O+ i) r. p: W1 {* H Z4 e: a+ l; D c.更新最后一次登录时间last_login_time和IP地址last_login_ip。
p3 b+ w6 l5 c: P' l d.将用户信息放入session。# w; M" \) b8 O2 ^
e.都正确进入/main/main.jsp2 r; @; M; s/ q, [8 U/ m
4.main.jsp页面的页眉部分,显示用户是否登录的状态
' ?, ^/ }% ~0 `+ Q 如果用户已登录,显示"欢迎XXX,【登出】"
; W, n1 T- U/ O+ e 如果用户未登录,显示"【登录】【注册】"
* O; S% @: Z* u* L
2 X' \) h* H' O( {数据库 模型 % A" m' `. G( T4 E
' a% l2 I1 ^6 J; }: b! R( F+ y, U6 y
效果演示图:5 X, K8 x2 s0 _6 }& e7 e9 `3 ?$ X$ j
首页演示图:
7 V, f( W [, b, K+ d
5 m1 a* b6 P' d% \2 P, y
/ c! ^, i( r3 n8 s( [+ T注册页面:; j- s. g4 l/ \. O1 A% l
. H/ h# [5 ~) q
邮箱验证页面:+ j- N) ]/ |! d
1 U' ^6 c# v/ [3 n0 ~- W验证成功:8 A1 c, {* I$ c
; `; j5 P( h' q: }6 t0 W5 t* ]0 k用户在线状态:
e" S! O* [0 k: H2 m J
: s3 I# [7 L" }) c$ j用户可以购物了:* m) @! N' g5 t( m/ ]& t) ]
5 F$ P9 v, H% s
8 o- g. ], Q7 c* j源码下载地址:点击下载
s; U& H$ }2 T6 h: T* c3 U0 F T; A1 k9 v* i& n5 C
8 G$ [- f" S- l% G+ O7 M
数据库下载地址:点击下载0 r/ d0 K* D4 ^: z% {
% H9 F5 l/ u3 ` |
|