侯金彪
(德州学院计算机与信息学院,山东 德州253023)
当今世界是数据信息随处可见的时代,时至今日信息依靠于现代先进科技的计算机网络信息技术早就被看作是人们工作、学习中非常重要的一部分。现在在互联网上进行信息的管理和分配已经成为极其普遍的事情,利用互联网技术来构建一个外卖系统也是有一定必要的,通过对传统订餐方式的改变,能够使得用户就餐得到较大的便利;通过这个系统,可以对菜品、订单、配送的各项情况进行电脑化和系统化的管理,能够持续不断地加快系统管理的进程,也使得饭菜食物管理所需要的各项数据信息能便捷迅速地完成记录、查询、删除和更新等操作,并对相应关键数据也能够方便快速地得到统计[1]。本文采用比较流行的Jsp技术,实现了一个功能强大的外卖系统。
Jsp具备面向服务器的特点,正因为如此它支持在在各类浏览器软件上运行。当客户端发送数据请求的时候,该数据将通过Jsp服务器将数据传输到客户端,而且Jsp可以利用JavaBean或Servlet等不同的组件做出一些适当正确的反馈,这个对管理系统设计的反馈过程可能有对表中内容资料的查询、删除、更新等多个不一样的操纵工作,再将所得到的结果返还回到前台页面,并加以显示,该过程实现了服务器客户端的B/S模式。[2]
Jsp第一次接到对其传递出来的申请请求时候,与之对应的Jsp文件就会借助Jsp引擎转变替换成Servlet。Jsp文件可能会由Jsp引擎转化成Java文件的过程中产生语法错误,若语法有误,转换将会失败。错误信息也会被服务器和客户端搜集起来。如果转化完成没有错误的话,这个Java文件将会被Jsp引擎编译成相应的class文件,并且逐渐生产成为Servlet实例,然后借助Servlet实例中的Jsp Service把HTML文件精准确切地送回到与之相对应的客户端。
MySQL是一个关系数据库控制系统,适用于中小型企业开发。MySQL会把数据信息存储在一个个不同名字的表中,而不是将所有数据信息都堆放在一个大型的仓库内,表与表之间可以独立也可以相互关联,这样就加快了程序运行速率并且提高了管理工作的灵便性。一般习惯用的标准化SQL语言就是数据库能够采用的语言[3]。
MySQL凭借它所占用的体积小、运行速率快、各方面性能优越等多个特点优点被很多人使用[4]。其基本组成部分流程图如图1所示。
图1 MySQL基本组成部分流程图
Struts2是一个关于MVC设计样式的Web框架,站在MVC的角度上来看,包含了这几个部分,分别是模型层、视图层、控制层。简单来说大致为:模型层的任务是承担完成事务功能,包括两个组成成分:业务数据跟业务操作逻辑。 目标对象类、DAO、Service全部存在在模型层中。视图层的主要任务就是承担显示页面跟使用者互相交流并且获取使用者的资料。存在视图中的类是没有涵盖业务逻辑和控制逻辑的Jsp。控制器是建模层M和视图层V之间的纽带,目的是操作管理运行过程[5]。
Struts 2是Struts的更新一代Web开发框架。Struts 2基于MVC模式在操作申请转发方面非常方便,通常而言是依据拦截器的机制来解决使用者的申请,这样的设计也让业务逻辑控制器可以跟Servlet API彻底分开,这样框架愈来愈方便使用。当Jsp经由表单递交数据的过程中,Struts 2架包中的过滤器就会拦住[6]。
Internet计算机技术逐渐发展使得外卖系统软件也得到了更好更快地发展,外卖市场的潜力巨大,由此也可以确立了以下几点需求:菜品类别管理、菜品管理、订单管理、菜品评价、在线下单、菜品浏览。
(1)系统需求
依据JavaEE技术把B/S系统作为基础,计算机程序跟数据一起存于后台中。全部系统管理操作都是在浏览器的基础上进行的,下载、安装、运行、维修保护、更新都非常便利。
(2)功能需求
根据目前的调研看,软件应该实现菜品类别管理、菜品管理、订单管理、菜品评价、在线下单、菜品浏览等功能。
(3)性能需求
为了保证系统能够长期高效、安全稳定地运行,系统对菜品和数据的管理以及程序开发语言的编写很重要,所以这个系统就采用Struts2框架来进行开发。性能上总体要求如下:
a.需要网站提供一定的并发量,保证用户可以正常访问。
b.网站能够自发处理一些异常的问题,比如路径访问出错就会出现友好的404错误界面等。
c.由于这个软件设计到了很多表格与信息的载入,能够以较快的形式完成数据显示与执行。
(4)运行需求
系统要求较低,商场主流配置即可。
(5)其他需求
这个系统可维护性比较好,安全性比较高,可靠性也比较强。界面很容易让用户来操作,同时在后台方面也要对用户订单的管理有好处。并且在开发时间,经费上要严格控制,以最大的限度,合理地利用有限资源,来完成所需要的功能,满足外卖系统和用户们的需求。
本系统的设计及开发利用Jsp来进行前台展示,采用MVC框架(利用Struts2作为框架)来实现对网站的整体设计,来达到对业务功能的实现,在对系统角色进行细分后对不同的菜品信息进行展示和管理等。
数据库设计是极为重要的,在这个流程中充分考虑到所有表结构之间的数据关联,同时还应该琢磨数据表之间的对应联系。下图2即为数据库中表的关系图。
图2 数据库关系图
从外卖系统的设计角度看,对应的功能列表下面需要有对应的数据库表,依据上节数据库关系图能够知道,由于网站设计的数据表有些多,因此接下来罗列一些关键数据表的设计,如下面表1-表9所示:
表1 admin表
表2 dd表
表3 fl表
表4 member表
表5 news表
表6 pl表
表7 prep表
表8 sale表
表9 system表
3.4.1 系统结构设计 MVC就是按照职责不同将程序划分为3个组成部分,可以改善程序结构,便于日后维护和扩展,其中,Model层实现系统中的业务逻辑,用JavaBean(实体类)来实现;View层一般被用来和系统使用者进行交流互动,借助Jsp达到目的;Controller层是Model与View交流的纽带。
1)M-Model 模型
Model的职责为承担业务逻辑工作。
2)V-View 视图 V View的职责为承担展现页面与使用者交流互动(获取使用者资料)。
3)C-Controller 控制器
在Struts2的架构中,Struts2的框架部分主要负责MVC设计中的主要用来实现整个系统的流程跳转过程。图3即为系统执行流程图。
图3 系统执行流程图
3.4.2 系统功能模块设计
外卖系统在开发中应该通过软件管理功能来分解软件功能模块,而且开展完成相应模块。系统功能模块图如下图4所示。
图4 系统功能模块图
在诸多Web中应该有导入数据源的模块。一般而言,存在两种数据库的连接情况,一种是通过于Java类写明数据库驱动与数据库连接名等信息开展适当的连接与释放操作,另一种是通过数据库连接池,这种方式的优点在于可以合理的管控数据库的连接。设计结合以上两种的特点,将连接和释放的操作通过一个统一的类来管理,这个数据库连接类即为Conn.java,在该类中将数据库连接和关闭写成静态方法,方便适时的关闭和打开。
通过下面的代码段来声明变量,并在该类中的方法内做说明。
// 定义MySQL数据库的连接地址
private String url = "jdbc:mysql://localhost:3306/takeaway";
// MySQL数据库的连接用户名
private String user = "root";
// MySQL数据库的连接密码 private String password = "123";
借助这几个变量来实现与之相符的数据库连接,得到手段的代码。
public Connection getCon() throws Exception {
Class.forName(jdbcName);
Connection con = DriverManager.getConnection(url, user, password);
return con;
}
得到连接之后,也应该为数据库展开及时地停止关掉工作,停止关掉的工作能够参考下面方式:
public void closeCon(Connection con) throws Exception {
if(con!=null) {
con.close();
}
}
在外卖系统中,普通用户需要登录系统之后才能够下单,管理员对系统进行数据维护和处理也需要进行登录操作,因此在平台的登录系统需要提供对应的接口。
由于系统采用了Struts2的架构,因此,系统的所有请求都会经过一个称为struts.xml的文件,通过该文件可以知道最后的请求地址,即根据login的请求做一定的分发操作,具体的代码部分如下所示。
从上面的程序片段中可以看出,系统识别到了login对象会通过Action中名为LoginAction的类,该类中做进一步的处理,比如用户在登录的过程中会触发下面的函数入口。
public String login() throws Exception{
}
在该函数的入口中,可以看到首先通过下面的方式来判断用户名和密码是否完整,并且是否符合匹配要求。
if(StringUtil.isEmpty(user.getUserName()) || StringUtil.isEmpty(user.getPassword())) {
error = "用户名或密码为空!";
return ERROR;
}
if(StringUtil.isEmpty(imageCode)) {
error = "验证码为空!";
return ERROR;
}
if(!imageCode.equals(session.getAttribute("sRand"))){
error = "验证码错误!";
return ERROR;
}
倘若数据符合系统条件之后,经过数据库练级,接下来继续进行,如果数据库连接成功之后,到了最终检索申请传达到数据库中实现检索,辨别有没有该使用者,同时密码有没有和这个使用者的相对应,倘若完全对应就会调转到Main,即进入到软件的服务器界面,关键代码在下面展现。
con=dbUtil.getCon();
User currentUser=userDao.login(con, user);
if(currentUser!=null){
session.setAttribute("currentUser", currentUser);
return "main";
}else{
request.setAttribute("error", "用户名或密码错误!");
return "login";
}
使用者单击系统运行后所实现界面的注册链接便跳转到注册界面,在注册界面上填写上必填的使用者名字、密码、确认密码、联系人住处的使用者资料。当使用者上交时,先由网页脚本辨别有没有合乎上交的基础条件,合乎条件则给后台上交表单数据。倘若输入不对,就会弹出不对警告框,让顾客再次输入。
购物车模块的实现方式主要有三种,一种是将商品信息加入数据库,这样用户重新登录系统后可以查看到用户的购物车中的商品;另一种是将顾客购物车内容放到session中存放在服务器端,就能够达到多个页面的资源共享。
在设计的模块中,菜品类别的管理也是一重要的模块,因为在该模块中,管理员可以设置菜品品类,有利于后面对菜品信息管理;菜品信息更改或删除完成后,也能够用另一个页面进行添加菜品。
以菜品类别为例,重点介绍关于列表数据展示的模块和实现过程,菜品类别信息展开查询时会一开始借助Struts2的配置文件,并且依据配置文件完成一个跳转,一些主要代码参考如下。
利用该配置的过程可以实现一次数据的跳转,即点击了菜品类别后会进入到GoodsTypeAction该类中。
运行代码的时候,一开始应该对数据库构成连接,在完成数据库连接后再对数据展开处理,重点代码如下所示。
Connection con = null;
PageBean pageBean = new PageBean(Integer.parseInt(page),Integer.parseInt(rows));
try {
if(goodsType==null){
goodsType = new GoodsType();
}
goodsType.setTypeName(s_typeName);
con = dbUtil.getCon();
JSONObject result = new JSONObject();
JSONArray jsonArray = JsonUtil.formatRsToJsonArray(goodsTypeDao.goodsTypeList(con, pageBean, goodsType));
int total = goodsTypeDao.goodsTypeCount(con, goodsType);
result.put("rows", jsonArray);
result.put("total", total);
ResponseUtil.write(ServletActionContext.getResponse(), result);
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
系统开发的时候,常常遇到开发不对的问题。最大限度地找到系统中的不足,而不是证明系统的优点,这是经典的一句对测试的解释。及时察觉错误,就可以避免一些不必要的损失。系统测试不仅能确保软件的正常实现,还能证明需求和功能相符合,系统测试包括两部分:一部分是验证产品质量,它包括检查软件的实现在需求分析的一致性、软件实现速度的快慢跟计算机系统的扩展性等等;另一部分查找软件中的不对并修改,确保软件功能的实现。
系统测试对形式上的不同而言可以包括静态测试与动态测试两个关键部分。
1)静态测试方法
静态测试法根据系统功能需求、源代码跟脚本的察看和考虑,找出系统存在的缺点。
2)动态分析方法
动态测试方法根据查看当前代码与想要达到的要求之间的直接差距,从性能、用处、可靠性等角度考评软件。
对测试的内部结构与操作的算法上来说,其动态测试方法又涵盖白盒测试法和黑盒测试法这两种方法。
其中黑盒测试法(Black-Box Test)基本上将程序代码当成黑色盒子,不看程序内部结构跟算法,而仅着眼于程序代码的外部特性来测试软件有没有达到要求。
在这个部分测试过程中,往往使用以黑盒测试法的手段来完成计算机系统查看,这样能够有效找出错误,检验系统能否满足用户需要,达到最佳测试效果。
功能测试是计算机软件用处的检验,凭借功能测试用例,一个一个察看,查看程序有没有完成了使用者想要的结果,各个测试如下:
1)登录功能的测试
目标:确保使用者可以根据对的使用者名字跟密码进入服务器。
测试方法:
(1)不做输入直接回车。
(2)输入空字符串然后回车。
(3)输入合理的字符数据然后回车登录。
2)菜品类别管理功能的测试
目的:确保用户可以对菜品类别进行管理。
测试方法:
(1)单击菜的类别,核对是否能够显示正确的功能表。
(2)选中对应的餐品信息,核对是否可以完成修改与删除工作。
(3)修改跟删除信息,核对可不可以实现和得到反馈。
本模块各个功能的测试结果如下:
1)进入功能不发生异常,使用者可以进入系统。
2)餐品使用正常,用户对于餐品资料实现合理的增删改查此操作。
本次测试结果与预计基本一致。通过测试,可得出以下结论:该模块满足外卖系统的功能需求,运行稳定,具备实用价值。
随着社会生活的迅速发展,互联网给予人们的公共服务也慢慢地变多了,为了满足广大的用户就餐方面的需求,本设计采用编程语言Jsp,开发了一个基于B/S架构的外卖系统,这个外卖系统牵涉到了对多个不同的应用领域的相关认知,有效帮助整合相关知识框架,满足了社会的需要,有一定的现实意义和社会价值。