TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
1.项目介绍4 Y' [) S( ?6 x8 ~
典型电子商务系统(在线购物平台)。模拟了当当系统部分功能。
+ J2 M1 j4 K% `+ @6 B7 ~2.功能需求
# e7 B4 r; L5 y) h 1)用户管理模块(3天)user2 c+ ~- g/ r3 W) F: {* F. v9 ]+ y
实现登录、注册功能4 Z3 m7 x4 ]- e$ {
2)产品浏览模块(2天)main2 K! M* O9 {. c; V
实现主界面和类别浏览功能
3 E# L3 ~3 ~; o- e- j: \9 t9 `1 @ 3)购物车模块(1.5天)cart
6 l# J: I" {7 a) O 实现购买、变更数量、删除等功能7 l- k: r( I1 s5 G3 K" i
4)生成订单模块(1.5天)order
P- i$ `- L3 c! ~. ^ 订单确认、填写送货地址、生成订单功能: R4 [: C; \2 D) b: H
3.技术应用
4 C8 @9 i9 S6 p% ^4 N5 u2 e 1)技术架构
/ i0 B" R: \6 T) s+ r struts2,JDBC(连接池),jQuery,Ajax
9 b0 A$ J7 J* X; _8 Q/ u1 y4 E 2)设计思想
, [5 z$ ^! B, {, G- I H- E$ l MVC和分层设计思想
, ^& u/ f1 w$ k# q$ U a.显示层:JSP组件(jQuery,Ajax)
8 S f$ u0 e, q0 v7 y* N( A( W- m6 q b.控制层:Struts2控制器组件、Action组件
/ x8 s+ c( x7 d. i# \2 e" h) }" ? c.业务层:Bean组件
v, Q+ z% R* o; u, Z) x d.数据访问层:DAO组件(JDBC)
7 r1 I2 U8 U* }& q: ^% U
$ g* r$ G8 g1 W/ d. I4.数据库设计
3 \7 C8 D) J0 S P 1)数据库导入& r3 o m5 r: A% L4 D9 N% M
create database dangdang; //创建库
5 S/ O6 t( r0 l use dangdang; //进入dangdang库
8 {$ l- H6 ]* H3 g& N4 Y3 q$ B" ` set names utf8; //设置连接和发送SQL编码
' e; s3 M# x# P: \1 h$ L" y source 路径/dangdang.sql; //导入sql文件
4 Q* p- Q0 o8 j: x; n2 \# x9 o 2)数据表功能8 b, O9 Y' }, l# j: e2 E+ Y, R1 J
a.d_user(用户信息表) M0 o9 u% _4 {' ^+ @5 [; [
存储了用户信息,涉及登录和注册功能
. o- [6 ^, q9 I2 W$ w" c b.d_receive_address(收货地址信息表)$ b' P5 Z. p: i# S$ A8 u4 U
存储了收货地址信息,涉及填写送货地址功能
% i) V2 ?' }$ L& h c.d_category(类别信息表)
' R9 {% S; Y' n( C3 D. {( {- B 存储了图书的类别信息,涉及主界面左侧类别菜单功能9 s& E( j' N' b, I) d
d.d_book(图书信息表)
7 g% f& t4 F8 g9 C: ?* e 存储了图书的特有信息,涉及产品浏览等功能2 M* S3 P0 ~: K5 t( E' P
e.d_product(产品信息表)$ N$ F$ X/ _" q# H. |) o
存储了各类型产品的共通信息字段。) R- _+ N' j% g' R; T
f.d_category_product(类别和产品对应关系表)
3 V+ _/ z9 m8 T3 B b0 y 存储了类别和产品之间包含关系,涉及产品浏览功能- [3 Y: u/ I' T7 ?6 B
g. d_order(订单信息表)
9 X; M0 x: v1 `' z; \7 ?0 X4 X 存储了订单信息,涉及创建订单功能1 D- S# [/ f' v/ G) B
h. d_item(订单明细表)4 F; Y+ q4 f; O2 Z- O8 V8 y
存储了订单中所购买的商品信息,涉及创建订单功能。
% j# w- U. p# P
( V! X% z2 X/ b4 ~, F, _5. 搭建工程结构
\/ M4 ]- {+ n 1)引入需要的开发包
" z% a; s1 \- t' A* a struts2开发包* [4 I6 x4 H% w% B
jdbc开发包
! u! Q) h7 Z/ G0 Q+ E. M- a" h3 F dbcp连接池开发包
/ R, V( H" A* ]' ^ 2)src文件结构. l& O% K) R) }" E: j2 G9 C5 J5 v
org.tarena.dang.action :控制层
9 g, }3 B; l* C/ N: j2 h! k org.tarena.dang.action.user :用户模块的action- I0 d+ X( V3 V% k; w
org.tarena.dang.action.main :产品浏览的action/ K! C( ?. j7 f. i @( |. k
org.tarena.dang.action.order :订单的action8 l" C; S) D: c. S
org.tarena.dang.action.cart :购物车的action
: A8 s6 j5 |& C2 n' s org.tarena.dang.service :业务层0 W+ _0 d& ?9 ^- G
org.tarena.dang.dao :数据访问层# N7 l1 ^9 U' Q. x
org.tarena.dang.entity :实体类
% L* d0 K0 q1 d' W9 _/ Q org.tarena.dang.util :工具类- f' g6 ?, v- r& n9 ?
org.tarena.dang.interceptor :拦截器* U, L. L3 w) N4 l
3)struts配置文件结构
2 a, e5 r! e! K& E, J. E web.xml(配置Filter控制器)
$ I; _! l2 v! A9 ]3 H) g* j struts.xml (struts主配置文件)
3 H! s% }; G* u8 D0 q6 z1 V struts-user.xml(用户模块配置文件)
, V! r, _% A9 @3 A1 }: H3 P1 N struts-main.xml(浏览模块配置文件). Y% U. X; t& P6 B" F$ `
struts-order.xml(订单模块配置文件)- o& ~- o1 q2 u. F
struts-cart.xml(购物车模块配置文件)
: L- I- m. H! F; }
4 j! t% Q7 t! H) m 4)WebRoot文件结构
3 j8 h5 T$ h- g& a- E# k /user/* :用户管理的JSP" \% a: \8 ^4 b9 v8 J# [$ E
/cart/* :购物车的JSP
3 u& X. G! m( e T4 Z6 h ]7 Z /order/* :订单的JSP6 O9 n( T ] ^/ c0 ]6 \* w
/main/* :产品浏览的JSP
5 u& {. @0 P2 G4 c /common/* :页眉、页脚等共同JSP+ V2 y6 ], k5 o& V: m9 B. v
/js/* : 放置js脚本文件4 n/ m2 s) v0 g; f' T2 |
/css/* :放置css样式文件
8 T; Y* Z/ v3 x8 r* x3 G3 G /images/* :放置页面图片文件% U i& O& `' c$ @) `
/productImages/* :放置产品图片5 @& [; t/ s$ h) `4 R3 `$ }* y
. E. H: O: {3 w n, O+ k7 l-----------------连接池的优点-----------------7 X' W/ @& G# _* [: a2 T8 a1 S
a.可以管理Connection对象,并且将Connection数量控制在一个安全范围内。提高数据库的访问安全性。
, P: Q& L1 m N4 Db.连接池中的Connection对象与数据库保持连接状态,避免频繁的建立和销毁连接。
! e+ n# A6 W8 H6 ~& K! H( {0 n/ x8 U& C3 L& o! k: Z' ?! r
============用户管理模块==============' J; N" x; @$ P3 T
1.注册需求4 F( u% X3 }+ \) b
1)表单验证(采用js+Ajax). E5 w) t Q( H* p& o: `
邮箱:非空、格式、唯一性(ajax)
0 z, |( U* \5 p' d' u$ J2 z2 O 昵称:非空、格式
9 V6 x& M; L: Z' J' D: D" G 密码:非空、格式0 m. h s) @, F+ | x2 z: v
确认密码:非空、与密码一致
# i4 _6 @. ^ O% F, C# b 验证码:非空、正确性(ajax): ^) s x2 H8 R# d
2 s8 k/ D {( z 2)将表单信息写入数据表d_user
3 G3 G0 [5 {/ e2 V \" z. N- i 编写实体类、DAO、Action( u' _2 |4 k) T3 A$ T7 Z; T) i
3)给用户邮箱发送验证码# ^/ p( G0 A7 w5 J7 z( }
引入commons-email.jar,email.jar. {' I" Q! M1 q7 d# R
参考EmailUtil工具类代码
5 b' ?2 ]4 l" I/ H# h1 t 4)进入邮箱验证页面verify_form.jsp
9 o7 K' [" S' D8 _+ |5 c! E5 u
# j G+ K* S; `6 p2.邮箱验证8 k+ ^' d: M( F- _8 R, ~4 d# q
1)表单验证* d2 l0 F) M( j' |5 F2 p
验证码:非空、正确性(ajax)
! ]! h0 m" d7 r9 M 正确后跳转到成功提示界面:window.location = "register_ok.jsp";
. q. Q0 c0 o2 @6 u/ L) A 2)Action逻辑
. e z, v- J+ p/ {- E4 E+ V a.利用验证码去d_user检查) a. K Z F/ w9 M( z! x
b.如果正确,将d_user的is_email_verify字段更新成Y;不正确在verify_form.jsp提示“验证失败”/ U! F8 b5 Q# b3 r
c.跳转到register_ok.jsp6 x* `3 s. O5 Z/ l5 G G4 n y
3.用户登录
$ E3 u0 J7 e1 V4 V- [ 1)表单验证
- U0 a3 g4 o- v( G& n3 S: L 邮箱:非空、格式- x. o1 |7 }; }( ^6 M1 I
密码:非空* S- D# v+ V, Z
2)Action逻辑! O N0 w6 Z6 x( p; p+ _
a.检测Email和密码是否正确,失败回到login_form.jsp提示6 ~0 c6 y1 j7 n$ w& k
b.检测is_email_verify邮箱是否通过验证,未通过进入verify_form.jsp
7 g2 M, B7 G/ ]- p2 s c.更新最后一次登录时间last_login_time和IP地址last_login_ip。
$ z$ [. _* r( P! }9 s d.将用户信息放入session。/ W/ F4 c& z! o8 W8 b7 J9 Y/ g
e.都正确进入/main/main.jsp$ J5 s% T( C# I/ ~; O
4.main.jsp页面的页眉部分,显示用户是否登录的状态
; l8 K. Y$ r, d 如果用户已登录,显示"欢迎XXX,【登出】"- l; k7 r7 N# j) P# E ?) z# L' v
如果用户未登录,显示"【登录】【注册】"* m, R! d& W7 B% Y/ ^1 y( V. E' ~
9 d. G7 s2 s5 {8 s6 |
数据库 模型 9 x/ G0 y1 u4 ^& Q, v
: @# b; I: x3 ^0 B( L8 K
! p: |% @& l2 f- R9 R
效果演示图:
& p: {" o- u" s/ Y7 e首页演示图:+ p* F1 N" V4 h$ y$ T
9 _) F. \" `2 i) Y5 Q9 U& G
: T( F- m: e9 M; x) d& b3 B
注册页面:
2 Z* w8 g6 s8 B- Q/ O; q
7 c( {1 @' T! c S* A& G邮箱验证页面:9 ]& v0 k9 I7 Q6 V/ E" ], k
, Q; O- _( n- v, T验证成功:4 E% i% S: T. G5 D, N( M
" H3 k7 G) R: W2 u6 n" ?& K用户在线状态:
' K1 A! ?' ^4 t% O) d
& F7 }- \6 ?, B7 F4 v$ Q+ X$ w* q
用户可以购物了:8 [; u5 ?; R9 {( c
1 H& ^5 ?! w5 ], ?
) d; ]+ o3 @& h/ w8 N; n+ n# N# K源码下载地址:点击下载" w, ~, Y9 W; a U9 [( V
" ^- o* y8 h5 p+ X1 ?
% [/ @7 M G/ P& x数据库下载地址:点击下载& i! w8 C0 O: o
3 }5 {4 K: g( `0 Y" s2 @2 h, k1 ]# T
|
|