第1章 概要设计
1.1 系统设计模式
在程序设计中,我们把采用模型(Model)、视图(View)、视图(Controller)三层分离的设计方式称为MVC设计模式。
MVC设计模式由以下三部分组成:
模型(Model):对应的组件是JavaBean(Java类)。
模型可以分为业务逻辑和数据模型,它们代表应用程序的业务逻辑和状态。
视图(View):对应的组件是JSP文件。
视图提供了可交互的客户界面,向客户显示模型数据。
控制器(Controller):对应的组件是Servlet。
控制器响应客户的请求,根据客户的请求来操作模型,并且把模型的响应结果由视图展示给客户。
MVC设计模型的优点和好处:
各司其职、互不干涉
如果某一层的需求发生了变化,就只需要更改相应层中的代码,而不会影响到其他层。
有利于在开发中的分工。
由于按层把系统分开,那么就能更好地实现开发中的分工。
网页设计人员可以开发JSP页面,对于业务熟悉的开发人员可以开发模型中相关业务处理的方法,而其他开发人员可开发控制器,以进行程序控制。
有利于组件的重用
如控制层可独立成一个通用的组件,视图层也可做成通用的操作界面。把显示与数据分离,这样就增加了各个模块的可重用性。
Servlet的MVC编程模式:
由Servlet接收客户端请求,调用相应的模型处理业务逻辑和数据,再由Servlet根据处理的结果,选择相应的JSP或HTML文件响应客户端。
以订单界面为例
核心控制器 selectDD.java
JSP视图 Dan.jsp
模型类 EASYBUY_Ddan.java
1.2 系统总体结构
1.2.1 系统总体结构图
如图2.3-1所示:
图3.2-1
1.2.2 系统基本用例图
如图3.2-2所示:
图3.2-2
1.2.3 蔬菜管理模块用例图
如图3.2-3所示:
图3.2-3
1.2.4 系统框架
如图3.2-4所示:
图3.2-4
1.3 持久层设计
持久层采用dao设计模式:
第2章 详细设计与系统实现
2.1 业务逻辑设计与实现
业务逻辑层,顾名思议,就是实现实际业务需求的逻辑数据处理层,它和MVC框架的Controller一起,承担着承前启后的桥接作用。其实也可以说,它是MVC框架中Controller的业务逻辑处理部分,为了代码清晰度及松散度,将这部分内容独立出来,成为一个单独的处理层。
这里以管理员添加商品为例进行描述
使用Servlet处理业务逻辑(ProductAddServlet.java):
用户提交的表单product-add.jsp:
2.2 表现层设计与实现
它主要由两部分组成:
(1)界面UI
(2)表现层逻辑
界面UI在.NET中包括的几种形式:WEB(ASP.NET)、WPF、WinForm、Mobile
而表现层逻辑通常需要用后台代码做一些事情。理论上我们应该尽量解除两者之间的依赖,以便于UI更容易切换。
我们主要采用jsp框架来实现表现层
登陆界面:
订单界面:
商品界面
还有其他界面这里就不一一展示了。
2.3 项目难点及解决方案
项目开发中由于对javaweb开发流程不熟悉,导致进展缓慢,最后经过查阅资料、观看相关视频等,弥补自己的薄弱点,是项目开发能够顺利进行。
项目部署是由于数据库出现一些问题,导致商品信息无法正常上传,经过仔细修改数据库文件及配置顺利解决了商品信息无法上传的问题。
由于是第一次使用虚拟服务器,对于服务器的配置部署都不太熟悉,最开时使用Linux系统时对命令行操作生疏,导致环境变量无法配置。后来我更改了服务器的系统采用windows系统,由于对windows系统很熟悉,之前的问题就很容易解决了。
最开始在本地运行时能正常购买商品,但是部署到服务器上时无法正常购买商品,弹出购买失败,经百度查询找到解决方法:打开购物车数据表修改其中EO_USER_ID的数据类型由int更改为longtest,问题成功解决。
2.4 典型代码片段与设计过程
登陆界面:
用户选择商品:
添加商品:
信息修改:
数据库文件:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `easybuy_comment`
-- ----------------------------
DROP TABLE IF EXISTS `easybuy_comment`;
CREATE TABLE `easybuy_comment` (
`EC_ID` int(10) NOT NULL AUTO_INCREMENT,
`EC_CONTENT` varchar(200) NOT NULL,
`EC_CREATE_TIME` datetime NOT NULL,
`EC_REPLY` varchar(200) DEFAULT NULL,
`EC_REPLY_TIME` datetime DEFAULT NULL,
`EC_NICK_NAME` varchar(10) NOT NULL,
PRIMARY KEY (`EC_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of easybuy_comment
-- ----------------------------
-- ----------------------------
-- Table structure for `easybuy_news`
-- ----------------------------
DROP TABLE IF EXISTS `easybuy_news`;
CREATE TABLE `easybuy_news` (
`EN_ID` int(10) NOT NULL AUTO_INCREMENT,
`EN_TITLE` varchar(40) NOT NULL,
`EN_CONTENT` varchar(1000) NOT NULL,
`EN_CREATE_TIME` datetime NOT NULL,
PRIMARY KEY (`EN_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of easybuy_news
-- ----------------------------
-- ----------------------------
-- Table structure for `easybuy_order`
-- ----------------------------
DROP TABLE IF EXISTS `easybuy_order`;
CREATE TABLE `easybuy_order` (
`EO_ID` int(10) NOT NULL AUTO_INCREMENT,
`EO_USER_ID` varchar(10) NOT NULL,
`EO_USER_NAME` varchar(20) DEFAULT NULL,
`EO_USER_ADDRESS` varchar(200) DEFAULT NULL,
`EO_CREATE_TIME` datetime NOT NULL,
`EO_COST` decimal(10,2) NOT NULL,
`EO_STATUS` decimal(6,0) NOT NULL,
`EO_TYPE` decimal(6,0) NOT NULL,
PRIMARY KEY (`EO_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of easybuy_order
-- ----------------------------
-- ----------------------------
-- Table structure for `easybuy_order_detail`
-- ----------------------------
DROP TABLE IF EXISTS `easybuy_order_detail`;
CREATE TABLE `easybuy_order_detail` (
`EOD_ID` int(10) NOT NULL AUTO_INCREMENT,
`EO_ID` decimal(10,0) NOT NULL,
`EP_ID` decimal(10,0) NOT NULL,
`EOD_QUANTITY` decimal(6,0) NOT NULL,
`EOD_COST` decimal(10,2) NOT NULL,
PRIMARY KEY (`EOD_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of easybuy_order_detail
-- ----------------------------
-- ----------------------------
-- Table structure for `easybuy_product`
-- ----------------------------
DROP TABLE IF EXISTS `easybuy_product`;
CREATE TABLE `easybuy_product` (
`EP_ID` int(10) NOT NULL AUTO_INCREMENT,
`EP_NAME` varchar(128) NOT NULL,
`EP_DESCRIPTION` varchar(512) DEFAULT NULL,
`EP_PRICE` decimal(10,2) NOT NULL,
`EP_STOCK` decimal(10,0) NOT NULL,
`EPC_ID` decimal(10,0) DEFAULT NULL,
`EPC_CHILD_ID` decimal(10,0) DEFAULT NULL,
`EP_FILE_NAME` varchar(200) DEFAULT NULL,
PRIMARY KEY (`EP_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of easybuy_product
-- ----------------------------
-- ----------------------------
-- Table structure for `easybuy_product_category`
-- ----------------------------
DROP TABLE IF EXISTS `easybuy_product_category`;
CREATE TABLE `easybuy_product_category` (
`EPC_ID` int(10) NOT NULL AUTO_INCREMENT,
`EPC_NAME` varchar(20) NOT NULL,
`EPC_PARENT_ID` decimal(10,0) NOT NULL,
PRIMARY KEY (`EPC_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of easybuy_product_category
-- ----------------------------
-- ----------------------------
-- Table structure for `easybuy_shop`
-- ----------------------------
DROP TABLE IF EXISTS `easybuy_shop`;
CREATE TABLE `easybuy_shop` (
`es_id` int(11) NOT NULL AUTO_INCREMENT,
`es_ep_file_name` varchar(128) DEFAULT NULL,
`es_ep_name` varchar(64) DEFAULT NULL,
`es_ep_price` decimal(10,0) DEFAULT NULL,
`es_eod_quantity` int(11) DEFAULT NULL,
`es_ep_stock` int(11) DEFAULT NULL,
`es_ep_id` int(11) DEFAULT NULL,
`es_eu_user_id` varchar(64) DEFAULT NULL,
`es_valid` int(11) DEFAULT NULL,
PRIMARY KEY (`es_id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of easybuy_shop
-- ----------------------------
-- ----------------------------
-- Table structure for `easybuy_user`
-- ----------------------------
DROP TABLE IF EXISTS `easybuy_user`;
CREATE TABLE `easybuy_user` (
`EU_USER_ID` varchar(32) NOT NULL,
`EU_USER_NAME` varchar(20) NOT NULL,
`EU_PASSWORD` varchar(20) NOT NULL,
`EU_SEX` varchar(1) NOT NULL,
`EU_BIRTHDAY` datetime DEFAULT NULL,
`EU_IDENTITY_CODE` varchar(60) DEFAULT NULL,
`EU_EMAIL` varchar(80) DEFAULT NULL,
`EU_MOBILE` varchar(11) DEFAULT NULL,
`EU_ADDRESS` varchar(200) DEFAULT NULL,
`EU_STATUS` decimal(6,0) NOT NULL,
PRIMARY KEY (`EU_USER_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of easybuy_user
-- ----------------------------
INSERT INTO `easybuy_user` VALUES ('admin', '管理员', 'admin', 'T', '2018-04-11 00:00:00', null, 'llqqxf@163.com', '13666666666', '上海', '2');
还有其他的这里就不一一展示了。