javaWeb实战教程
4.搭建项目框架
在正式开发商城前,需要先搭建一个项目框架。一个好的框架可以加速项目的开发。
serlvet+jsp+javaBean模式(MVC)适合开发复杂web应用,其中servlet负责处理用户请求(Control),jsp负责数据显示(View),javaBean负责数据封装(Model)。
javaWeb的项目除了要遵从MVC模式外,还应该符合三层架构模式,就是界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。
当一个用户请求发送过来时,首先进入servlet,servlet再调用业务逻辑层service,service向数据访问层dao请求数据,dao再将数据库的数据封装到javaBean里返回给service,service处理完数据返回给servlet,servlet将数据发送到jsp页面,jsp再展示给用户看。
这样做的好处是,servlet只负责页面跳转和数据转发,service处理真正的业务逻辑,dao完全负责数据库的读写操作;当项目的框架出现变更时,比如不再使用servlet开发,而是变成一个桌面客户端程序,那么service层和dao层是不用修改的,直接可以使用;比如数据库不再使用mysql,而是改成oracle,只需要修改dao里的代码就可以实现。另外使用了三层架构模式还可以将原本复杂的项目分成多个不同的部分,比如负责dao的程序员只需要专心负责sql语句就可以;负责service的程序员不用考虑sql语句而专心业务逻辑的开发。
有了框架就可以新建项目了。首先在eclipse里新建一个Dynamic Web Project,并新建package:
包名 | 含义 |
---|---|
fy.test.dao | 数据库操作 |
fy.test.filter | 过滤器 |
fy.test.model | javaBean |
fy.test.service | 业务逻辑 |
fy.test.servlet | 处理用户请求的control |
fy.test.test | 测试代码 |
fy.test.utils | 工具类 |
在WEB-INF目录下新建一个文件夹jsp用来存放jsp;WEB-INF目录下的文件用户是没办法直接访问到的,但通过request.getRequestDispatcher("/WEB-INF/jsp/cart.jsp").forward(request, response);
可以访问;因为项目里的jsp的目的是填充来自servlet的数据,如果用户直接访问jsp看得到的是没有数据的jsp,这样很不友好,对项目也会有安全隐患。
将之前教学时候使用到的jar包都复制到lib文件夹下:
- commons-dbutils-1.6.jar
- jstl.jar
- junit-4.7.jar
- mysql-connector-java-5.1.42-bin.jar
- standard.jar
再把CookieUtil.java、DBUtil.java复制到fy.test.utils包下,EncodeFilter.java复制到fy.test.filter里。
从现在开始正式开始开发在线商城。
商城的主要需求是:
- 用户可以登录、注册,
- 可以浏览商品、将商品加入购物车,
- 用户可以结算购物车并生成订单,
- 商品带有分类。
根据需求我们可以找到实体:
- 用户
- 商品分类
- 商品
- 购物车
- 订单
其中用户和购物车是一对多,用户对订单是一对多,商品对商品分类是一对多,商品对购物车是多对多,商品对订单是多对多:
根据实体将商城分成几个模块:
- 用户模块
- 商品分类模块
- 商品模块
- 购物车模块
- 订单模块
建表语句:
CREATE TABLE `clasz` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`type` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`des` varchar(255) DEFAULT NULL,
`price` double DEFAULT NULL,
`oldprice` double DEFAULT NULL,
`stock` int(11) DEFAULT NULL,
`pic1` varchar(255) DEFAULT NULL,
`pic2` varchar(255) DEFAULT NULL,
`pic3` varchar(255) DEFAULT NULL,
`pic4` varchar(255) DEFAULT NULL,
`txt` longtext,
`claszId` int(11) DEFAULT NULL,
`click` int(11) DEFAULT '0',
`rank` int(11) DEFAULT '0',
PRIMARY KEY (`id`),
KEY `type_id` (`claszId`),
CONSTRAINT `type_id` FOREIGN KEY (`claszId`) REFERENCES `clasz` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`pwd` varchar(255) DEFAULT NULL,
`cookie` varchar(255) DEFAULT NULL,
`address` varchar(255) DEFAULT NULL,
`tel` varchar(255) DEFAULT NULL,
`zip` varchar(255) DEFAULT NULL,
`realname` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `cart` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`productId` int(11) DEFAULT NULL,
`userId` int(11) DEFAULT NULL,
`count` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `p` (`productId`),
KEY `user_id` (`userId`),
CONSTRAINT `cart_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `user` (`id`),
CONSTRAINT `p` FOREIGN KEY (`productId`) REFERENCES `product` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `order_` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`time` datetime(6) DEFAULT NULL,
`state` int(11) DEFAULT NULL,
`userId` int(11) DEFAULT NULL,
`money` double DEFAULT NULL,
`realname` varchar(255) DEFAULT NULL,
`address` varchar(255) DEFAULT NULL,
`tel` varchar(255) DEFAULT NULL,
`zip` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`userId`),
CONSTRAINT `user_id` FOREIGN KEY (`userId`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `order_product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`productId` int(11) DEFAULT NULL,
`orderId` int(11) DEFAULT NULL,
`count` int(11) DEFAULT NULL,
`price` double DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `product_id` (`productId`),
KEY `order_id` (`orderId`),
CONSTRAINT `order_id` FOREIGN KEY (`orderId`) REFERENCES `order_` (`id`),
CONSTRAINT `product_id` FOREIGN KEY (`productId`) REFERENCES `product` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;