一、源代码路径

https://github.com/weiganyi/dr-helper

二、界面

通过浏览器訪问Web服务,能够看到界面例如以下:

ADT-Bundle编译project生成dr-helper.apk。安装后能够看到应用界面例如以下:

三、背景

Java诞生后主要就是用于Web开发,随着Android的兴起,其在移动领域也应用广泛。我在学习了Java相关的一系列技术后,想找个项目来实际运用一下。因此我考虑能够基于Java相关的技术来构建一个包含移动端和Web端的餐厅管理系统,在这个项目里我会综合运用各种的技术,并尽量使它们贴合使用场景。

这个系统会服务于餐厅里的三类角色。首先是点餐服务员,他们採用手机Android APP来进行点餐操作。其次是厨房的厨师,他们将採用Web服务来获取点的菜品,菜品完毕后能够通过Web服务给点餐服务员发送上菜通知。最后是收银台的管理员,他们也是通过Web服务来进行相关的订单管理,比方付款操作。以及整套系统的其它管理工作。

在技术方案上包含了移动前后端和Web前后端,移动前端就是一个Android应用,移动后端採用Tomcat容器Servlet来提供服务。两者通过JSON消息交换数据,这样可以减少两者交互的数据量。Web后端也是採用的Tomcat容器Servlet来提供服务。然后通过JSP来生成前端Web页面。

在数据库选择上,对于传统关系性较强且数量有限的数据,我选择用Mysql来存储,而对于像订单这样的可能数量巨大的数据,我选择用Mongodb来存储,这样能充分利用各自的长处。

四、功能实现

1、Android端支持例如以下功能

基本功能:登录/注销、主页、查桌、开桌、查单、订单、菜单、点菜、转台、并台、更新、配置

通知功能:空桌通知、上菜通知

2、Web端支持例如以下功能

基础功能:登录/注销

厨房功能:下单菜品管理、完毕菜品管理

柜台功能:订单管理(含结帐。通过单号、桌号查询)、用户管理、餐桌管理、菜单类别管理、菜单管理、配置管理

五、整体设计思路

1、数据库设计

1)当中dr_user表存储用户帐号信息,dr_table表存储餐桌信息,dr_menu_type表存储菜品类型信息。dr_menu表存储菜品信息,dr_option表存储配置选项信息,这5个表为关系型表。使用Mysql数据库存储。

它们的详细字段例如以下:

create tabledr_user(

user_id int(4) not null primary keyauto_increment,

user_name char(255) not null,

user_passwd char(255) not null,

user_auth enum('waiter', 'chef', 'admin')not null);

create tabledr_table(

table_id int(4) not null primary keyauto_increment,

table_num int(4) not null,

table_seat_num int(4) not null,

table_empty int(1) not null);

create tabledr_menu_type(

menu_type_id int(4) not null primary keyauto_increment,

menu_type_name char(255) not null);

create tabledr_menu(

menu_id int(4) not null primary keyauto_increment,

menu_name char(255) not null,

menu_price int(16) not null,

menu_type_id int(4) not null);

create tabledr_option(

option_id int(4) not null primary keyauto_increment,

option_name char(255) not null,

option_value char(255) not null);

2)还剩下一个dr_order为非关系型集合,使用Mongodb数据库存储,包括订单信息,它的结构例如以下:

dr_order:{"id":"xxx", "order":1, "table":1,"waiter":"xxx", "time":"xxx","admin":"xxx", "pay":true,"detail":[{"menu":"xxx", "price":12,"amount":1, "chef":"xxx","finish":true, "remark":"xxx"}]}

3)Mysql和Mongodb数据库的连接參数等信息。存储在后台的properties配置文件。

4)部分数据库存储操作使用了存储过程。这些能够在项目文件夹下的drhelper_db数据库文件夹里的数据库备份文件里能够查看到。

2、Android前端应用设计

1)其每项基本功能都由一个Activity和一个AsyncTask构成,Activity载入布局xml来构造操作界面。

当用户运行某个操作后,须要运行通信对象的JSON序列化,向后台发生HTTP请求。等待HTTP响应,响应消息运行JSON反序列化,依据结果进行反馈处理。这一系列的处理因为有网络通信在当中。实际运行时间可长可短。所以Activity要启动一个AsyncTask线程来运行这些后台操作,以避免Activity运行超过5秒报异常的问题,也吻合界面与逻辑处理要线程分离的通用思想。

2)对于两个通知功能,空桌通知和上菜通知,我须要实现一个消息推送机制,Androidclient须要创建和维持与后台的TCP长连接消息推送通道。

实现方案是这样,用户启用通知订阅后,先创建一个Service,然后在Service里再创建一个线程,这是由于Android的Service可能和Activity处于同一个线程运行,这样的TCP长连接任务须要有独立线程来运行,所以要再启动一个线程。

在这个线程里创建一个与后台推送服务的TCP Socket,发起登录请求消息,并定期发送心跳消息来维持TCP长连接,还要依据Androidclient的通知预定配置发起通知预定请求消息。

当通过这个Socket收到后台的通知推送消息后。再发起HTTP请求去获取详细的通知内容,收到响应后依据通知类型发出对应的Android通知消息。

这里有一些异常情况须要处理,比方当服务端退出时须要检測出来并直接退出Service。这时没有再进行重登录尝试是由于。当服务端退出后除了这个通知服务的登录信息没有外,整个应用的登录信息也没有了,所以这时须要退出整个应用并重登录,当应用重登录后也会再发起通知服务的登录。

另外,当用户依据通知订阅操作界面关闭通知功能时。要能中断通知Service自身。还有由于Android手机可能会杀死后台的服务线程,所以须要在这样的情况下须要发送一个广播消息给Service,由Service又一次拉起服务线程。

3)对于Activity的退出,採用注冊广播接收程序的方式实现。

当用户退出登录时。会发出退出广播,Activity堆栈的各个Activity收到后,就各自退出并销毁自身。Service的退出实现也类似。

4)应用须要频繁读取的两个表是dr_menu_type和dr_menu,而且这两个表不会发生频繁的变化,所以把它们存储一份在Android的SQLite里,这样可以显著的节省与后台的数据交换量,然后通过专门的更新功能。来与后台同步这两个表的数据。在实现上通过ContentProvider机制来封装对底层SQLite的訪问,以实现对业务层接口的友好。

5)对于已经登录的帐号信息,server地址、通知订阅等配置信息,都存储在首选项里,并依据选项菜单进行配置。

3、Web前端设计

1)採用单页式站点风格,点击页面的button或者链接,通过Ajax请求来向后端提交数据。并获取新生成局部页面。最后把局部页面更新到相应的位置。相关的JS操作採用Jquery库来进行。以取得较好的浏览器兼容性。

2)在HTML页面的构造上,採用JSP脚本来完毕。依据后台Servlet逻辑处理完后生成的Java Bean对象,在JSP文件内。通过Java脚本或者JSTL等JSP技术。获取Java Bean对象拼装成所须要的HTML页面。

4、Java后台服务设计

1)通过Tomcat容器的Servlet来进行后台处理。为实现MVC。Servlet里仅仅进行消息内容提取、服务调用和消息转发等控制逻辑,详细的业务逻辑在相应的Service里进行。包含对数据库的操作。

2)对数据库的操作通过一个代理进行,这样可以屏蔽两种数据的差异。给上层以统一的数据操作接口。

3)在消息推送服务后台实现上。採用创建一个servlet的上下文监听器,这样这个监听器就能够在Tomcat容器启动时调用,容器退出时才退出。

再在这个监听器里创建一个线程。这个线程监听一个TCP Socket。当有来自Androidclient的连接时。创建处理连接并管理起来。当业务逻辑触发到有空桌事件或上菜事件时,通过Androidclient的预定通知列表。找到对于的处理连接,发送通知推送消息来通知Androidclient获取详细的通知内容。在与Androidclient的连接维护上,除了须要回应Androidclient的心跳消息外,还须要启动定时器来检測心跳消息的存在,当检測到无心跳消息时表明对应的Androidclient已经异常退出,这时就须要清除这个失效的连接。

4)为了可以在响应消息中传送中文字符。须要设置响应消息的编解码方式为UTF-8,这对于每一个Servlet都须要进行。所以就创建一个过滤器来统一做这个设置。

5)不论是移动端还是Web端,前台用户信息的保存,因为其都是基于HTTP协议进行前后台通信的。所以採用cookie来完毕。在后台处理上。Servlet有封装的session对cookie的处理提供了支持。直接使用即可了。

6)在服务部署上,使用nginx做反向代理,把请求转发到后端的tomcatserver上进行处理。这也是经常使用的部署方式,由于眼下系统文件比較少,所以没有把图片等静态资源放到nginx下这样的动静分离的做法。

六、文件及文件夹介绍

Android\:移动端文件夹

Android\libs\:支持包文件夹

Android\res\drawable-hdpi\:应用的图片文件夹

Android\res\layout\:布局xml文件文件夹

Android\res\menu\:系统菜单布局xml文件文件夹

Android\res\values\:字符串定义文件文件夹

Android\src\com\drhelper\activity\:Activity文件文件夹

Android\src\com\drhelper\activity\AfterLoginActivity.java:登录前Activity通用功能,其它Activity继承这个Activity

Android\src\com\drhelper\activity\BeforeLoginActivity.java:登录后Activity通用功能。继承于AfterLoginActivity,其它Activity继承这个Activity

Android\src\com\drhelper\activity\ChangeTableActivity.java:换台页面的Activity

Android\src\com\drhelper\activity\CheckOrderActivity.java:查单页面的Activity

Android\src\com\drhelper\activity\CheckTableActivity.java:查桌页面的Activity

Android\src\com\drhelper\activity\CreateTableActivity.java:开桌页面的Activity

Android\src\com\drhelper\activity\LoginActivity.java:登录页面的Activity

Android\src\com\drhelper\activity\MainActivity.java:主页面的Activity

Android\src\com\drhelper\activity\MenuActivity.java:菜单显示页面的Activity

Android\src\com\drhelper\activity\OrderActivity.java:订单显示页面的Activity

Android\src\com\drhelper\activity\OrderMenuActivity.java:菜单操作页面的Activity

Android\src\com\drhelper\activity\PrefsActivity.java:偏好配置页面的Activity

Android\src\com\drhelper\activity\UnionTableActivity.java:并台页面的Activity

Android\src\com\drhelper\activity\UpdateActivity.java:更新页面的Activity

Android\src\com\drhelper\bean\:Java Bean对象文件夹

Android\src\com\drhelper\bean\MenuItem.java:菜单显示页面的菜单项Bean

Android\src\com\drhelper\bean\MenuList.java:菜单显示页面的菜单列表Bean

Android\src\com\drhelper\bean\com\:前后台通信的Java Bean对象文件夹

Android\src\com\drhelper\bean\com\EmptyTable.java:查桌页面的通信对象

Android\src\com\drhelper\bean\com\EmptyTableList.java:查桌页面的通信对象

Android\src\com\drhelper\bean\com\Login.java:登录页面的通信对象

Android\src\com\drhelper\bean\com\MenuList.java:更新页面的通信对象

Android\src\com\drhelper\bean\com\MenuTypeList.java:更新页面的通信对象

Android\src\com\drhelper\bean\com\NoticeDetail.java:获取通知的通信对象

Android\src\com\drhelper\bean\com\NoticeHeartBeat.java:通知心跳的通信对象

Android\src\com\drhelper\bean\com\NoticeLogin.java:通知登录的通信对象

Android\src\com\drhelper\bean\com\NoticeLogout.java:通知注销的通信对象

Android\src\com\drhelper\bean\com\NoticePush.java:通知消息的通信对象

Android\src\com\drhelper\bean\com\NoticeSubscribe.java:通知预定的通信对象

Android\src\com\drhelper\bean\com\OneTableOneOrder.java:包括一个桌号和一个订单号的通信对象。可用于多处

Android\src\com\drhelper\bean\com\OrderInfo.java:订单信息的通信对象

Android\src\com\drhelper\bean\com\TwoTableOneOrder.java:包括两个桌号和一个订单号的通信对象,可用于多处

Android\src\com\drhelper\entity\:数据库对象文件夹

Android\src\com\drhelper\entity\Detail.java:订单集合中detail字段相应的对象

Android\src\com\drhelper\entity\Menu.java:菜单表相应的对象

Android\src\com\drhelper\entity\MenuType.java:菜单类型表相应的对象

Android\src\com\drhelper\entity\Order.java:订单集合相应的对象

Android\src\com\drhelper\provider\MenuProvider.java:菜单和菜单类型表的ContentProvider封装实现

Android\src\com\drhelper\service\NoticeService.java:通知服务client实现

Android\src\com\drhelper\task\:AsyncTask实现文件夹

Android\src\com\drhelper\task\ChangeTableTask.java:换台功能的任务

Android\src\com\drhelper\task\CheckOrderTask.java:查单功能的任务

Android\src\com\drhelper\task\CheckTableTask.java:查桌功能的任务

Android\src\com\drhelper\task\CreateTableTask.java:开桌功能的任务

Android\src\com\drhelper\task\DeleteOrderTask.java:删除订单功能的任务

Android\src\com\drhelper\task\LoadOrderTask.java:订单载入功能的任务

Android\src\com\drhelper\task\LoginTask.java:登录功能的任务

Android\src\com\drhelper\task\SubmitOrderTask.java:提交订单功能的任务

Android\src\com\drhelper\task\UnionTableTask.java:并台功能的任务

Android\src\com\drhelper\task\UpdateTask.java:更新功能的任务

Android\src\com\drhelper\util\CookieManager.java:Cookie功能实现

Android\src\com\drhelper\util\DialogBox.java:提示框功能实现

Android\src\com\drhelper\util\HttpEngine.java:HTTP通信机制实现

Android\src\com\drhelper\util\PrefsManager.java:偏好管理对象

Server\:服务端文件夹

Server\drhelper_db\drhelper_mysql_db.sql:Mysql数据库备份文件

Server\drhelper_db\drhelper_mongodb\drhelper\:Mongodb数据库备份文件文件夹

Server\tomcat\jsp\:JSP文件文件夹

Server\tomcat\res\drhelper.css:项目的CSS文件

Server\tomcat\res\drhelper.js:项目的JS文件

Server\tomcat\res\jquery-1.10.1.js:Jquery库的JS文件

Server\tomcat\WEB-INF\lib\:支持包文件夹

Server\tomcat\WEB-INF\src\DBConfig.properties:数据库配置信息文件

Server\tomcat\WEB-INF\src\com\drhelper\android\:Android后台服务实现文件夹

Server\tomcat\WEB-INF\src\com\drhelper\android\bean\NoticeEvent.java:通知服务内部使用的通知事件对象

Server\tomcat\WEB-INF\src\com\drhelper\android\bean\UserSocketChannel.java:通知服务内部使用的username和连接映射对象

Server\tomcat\WEB-INF\src\com\drhelper\android\bean\com\:前后台通信的Java Bean对象文件夹。与Android文件夹中相应文件夹同样

Server\tomcat\WEB-INF\src\com\drhelper\android\listener\NoticeServerListener.java:通知服务上下文监听器实现

Server\tomcat\WEB-INF\src\com\drhelper\android\server\NoticeServer.java:通知服务后台实现

Server\tomcat\WEB-INF\src\com\drhelper\android\service\:Android后台业务逻辑实现文件夹

Server\tomcat\WEB-INF\src\com\drhelper\android\service\ChangeTableService.java:换台功能业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\android\service\CheckOrderService.java:查单功能业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\android\service\CheckTableService.java:查桌功能业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\android\service\CreateTableService.java:开桌功能业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\android\service\DeleteOrderService.java:删除订单功能业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\android\service\GetNoticeService.java:获取通知功能业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\android\service\LoadOrderService.java:载入订单功能业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\android\service\LoginService.java:登录功能业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\android\service\LogoutService.java:注销功能业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\android\service\Service.java:后台业务逻辑抽象类

Server\tomcat\WEB-INF\src\com\drhelper\android\service\SubmitOrderService.java:提交订单功能业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\android\service\UnionTableService.java:并台功能业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\android\service\UpdateMenuService.java:更新功能业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\android\service\UpdateMenuTypeService.java:更新功能业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\android\servlet\:Android后台控制逻辑Servlet实现文件夹

Server\tomcat\WEB-INF\src\com\drhelper\android\servlet\ChangeTableServlet.java:换台功能Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\android\servlet\CheckOrderServlet.java:查单功能Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\android\servlet\CheckTableServlet.java:查桌功能Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\android\servlet\CreateTableServlet.java:开桌功能Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\android\servlet\DeleteOrderServlet.java:删除订单功能Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\android\servlet\GetNoticeServlet.java:获取通知功能Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\android\servlet\LoadOrderServlet.java:载入订单功能Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\android\servlet\LoginServlet.java:登录功能Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\android\servlet\LogoutServlet.java:注销功能Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\android\servlet\SubmitOrderServlet.java:提交订单功能Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\android\servlet\UnionTableServlet.java:并台功能Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\android\servlet\UpdateMenuServlet.java:更新功能Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\android\servlet\UpdateMenuTypeServlet.java:更新功能Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\android\util\LogicException.java:程序逻辑异常对象

Server\tomcat\WEB-INF\src\com\drhelper\android\util\TypeConvert.java:String和ByteBuffer对象转换辅助类

Server\tomcat\WEB-INF\src\com\drhelper\common\:后台通用功能实现文件夹

Server\tomcat\WEB-INF\src\com\drhelper\common\db\DataBase.java:数据库基类

Server\tomcat\WEB-INF\src\com\drhelper\common\db\DBManager.java:数据库操作代理对象

Server\tomcat\WEB-INF\src\com\drhelper\common\db\MongoDB.java:Mongodb数据库操作对象

Server\tomcat\WEB-INF\src\com\drhelper\common\db\MysqlDB.java:Mysql数据库操作对象

Server\tomcat\WEB-INF\src\com\drhelper\common\entity\:数据库对象文件夹,与Android文件夹中相应文件夹同样

Server\tomcat\WEB-INF\src\com\drhelper\common\filter\ServletFilter.java:Servlet过滤器实现

Server\tomcat\WEB-INF\src\com\drhelper\web\:Web后台服务实现文件夹

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\:用于给JSP页面提供数据的Java Bean对象文件夹

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\AdminMenu.java:菜单管理页面菜单对象

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\AdminMenuObject.java:菜单管理页面对象

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\AdminMenuTypeObject.java:菜单类型管理页面对象

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\AdminOptionObject.java:配置管理页面对象

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\AdminOrder.java:订单管理页面订单对象

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\AdminOrderObject.java:订单管理页面对象

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\AdminTableObject.java:餐桌管理页面对象

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\AdminUserObject.java:用户管理页面对象

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\FinishMenu.java:完毕菜品管理页面菜品对象

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\FinishMenuObject.java:完毕菜品管理页面对象

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\IndexObject.java:首页对象

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\LoginObject.java:登录对象

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\LogoutObject.java:注销对象

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\OrderMenu.java:下单菜品管理页面菜品对象

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\OrderMenuObject.java:下单菜品管理页面对象

Server\tomcat\WEB-INF\src\com\drhelper\web\bean\PageInfo.java:页号对象

Server\tomcat\WEB-INF\src\com\drhelper\web\service\:Ajax后台业务逻辑实现文件夹

Server\tomcat\WEB-INF\src\com\drhelper\web\service\AjaxAdminMenuService.java:菜单管理业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\web\service\AjaxAdminMenuTypeService.java:菜单类型管理业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\web\service\AjaxAdminOptionService.java:配置项管理业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\web\service\AjaxAdminOrderService.java:订单管理业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\web\service\AjaxAdminTableService.java:餐桌管理业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\web\service\AjaxAdminUserService.java:用户管理业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\web\service\AjaxFinishMenuService.java:完毕菜品管理业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\web\service\AjaxLoginService.java:登录功能业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\web\service\AjaxLogoutService.java:注销功能业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\web\service\AjaxOrderMenuService.java:下单菜品管理业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\web\service\IndexService.java:首页业务逻辑实现

Server\tomcat\WEB-INF\src\com\drhelper\web\service\Service.java:业务逻辑抽象接口

Server\tomcat\WEB-INF\src\com\drhelper\web\servlet\:Ajax后台控制逻辑Servlet实现文件夹

Server\tomcat\WEB-INF\src\com\drhelper\web\servlet\AjaxAdminMenuServlet.java:菜单管理控制逻辑Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\web\servlet\AjaxAdminMenuTypeServlet.java:菜单类型管理控制逻辑Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\web\servlet\AjaxAdminOptionServlet.java:配置项管理控制逻辑Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\web\servlet\AjaxAdminOrderServlet.java:订单管理控制逻辑Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\web\servlet\AjaxAdminTableServlet.java:餐桌管理控制逻辑Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\web\servlet\AjaxAdminUserServlet.java:用户管理控制逻辑Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\web\servlet\AjaxFinishMenuServlet.java:完毕菜品管理控制逻辑Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\web\servlet\AjaxLoginServlet.java:登录功能控制逻辑Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\web\servlet\AjaxLogoutServlet.java:注销功能控制逻辑Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\web\servlet\AjaxOrderMenuServlet.java:下单菜品管理控制逻辑Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\web\servlet\IndexServlet.java:首页控制逻辑Servlet实现

Server\tomcat\WEB-INF\src\com\drhelper\web\util\ServiceUtil.java:业务逻辑辅助功能类

Server\tomcat\WEB-INF\src\com\drhelper\web\util\ServletUtil.java:Servlet控制逻辑辅助功能类

七、部署方法

1、源代码下载后。用Eclipse编译Server文件夹下的服务端源代码,用adt-bundle编译Android文件夹下的移动端源代码。

2、在server上安装部署Nginx和Tomcat,配置Nginx把全部请求转发到Tomcat。同一时候安装部署好Mysql和Mongodb。

3、在tomcat/webapps下建立项目文件夹drhelper。然后把Server/tomcat文件夹编译生成的文件复制到drhelper下。

4、把Server/ drhelper_db文件夹下的数据库备份文件分别导入Mysql和Mongodb。

5、把Android文件夹下编译生成的apk文件安装到手机上。

6、通过手机上的应用能够正常訪问系统的移动部分,使用服务员角色相关功能,同一时候通过浏览器也能够訪问系统的Web部分,使用厨师和管理员角色相关功能。

(完)

dr-helper项目设计介绍(一个包括移动端和Web端的点餐管理系统)的更多相关文章

  1. JS判断当前使用设备是pc端还是web端(转MirageFireFox)

    js判断当前设备 最近用bootstrap做自适应,发现仍然很难很好的兼容web端和PC端的现实. 仔细观察百度,淘宝,京东等大型网站,发现这些网站都有对应不同客户端的子站. 站点 PC端url we ...

  2. 移动端与Web端疫情数据展示

    1.题目要求 2.整体思想 首先是在前两阶段已经完成的echarts可视化.利用Jsoup爬取疫情数据基础上来进行调用与完善.大致思想是在Android Studio上完成交互去调用ecplise中的 ...

  3. 1、移动端 2、后台 3、 移动端,Web 端 4、 PC端

    移动端: 1.公众号:停开心 住总物业 2.app:  iso Android 停开心,住总停开心 后台:停开心智慧停车管理平台(所有的停车场) 移动端,Web端: 海投OA,公司OA PC端:收费软 ...

  4. 关于emoji表情,支持在app端发送web端显示,web端发送给app端显示,web与wap端互相显示。

    要用到emoji.js和emoji.jquery.js两个插件配合实现三端互通. 1.app端发送的emoji表情----到服务器---服务器存储的是‘问号’,无法显示如图所示: 后台的同学也试验了网 ...

  5. 接口自动化、移动端、web端自动化如何做?

    1.<Python+Appium移动端自动化项目实战>-带您进入APP自动化测试的世界https://yuedu.baidu.com/ebook/765b38a5690203d8ce2f0 ...

  6. 移动端和web端的性能指标

    移动端的性能指标: 1.内存:80% 2.CPU 3.流量 4.电量 5.启动速度 6.滑动速度.界面切换速度 7.与服务器交互的网络速度 web端的性能指标: 1.CPU 2.内存 3.网络 4.I ...

  7. Socket.IO介绍:支持WebSocket、用于WEB端的即时通讯的框架

    一.基本介绍 WebSocket是HTML5的一种新通信协议,它实现了浏览器与服务器之间的双向通讯.而Socket.IO是一个完全由JavaScript实现.基于Node.js.支持WebSocket ...

  8. 介绍一个python的新的web framework——karloop框架

    karloop是一款轻型的web framework,和tornado.webpy类似.mvc分层设计,眼下已经公布早期版本号了,使用方便, 下载地址例如以下:https://github.com/k ...

  9. 如何利用cURL和python对服务端和web端进行接口测试

    工具描述 cURL是利用URL语法在命令行方式下工作的文件传输工具,是开源爱好者编写维护的免费工具,支持包括Windows.Linux.Mac等数十个操作系统,最新版本为7.27.0,但是我推荐大家使 ...

随机推荐

  1. CSS控制图片显示区域

    优化页面响应速度,减少页面向服务端请求图片次数,有时候可能会将多个小图合并到一张图中,用的时候通过css控制显示的区域,比如:上传一张人物图片到服务器检测人脸,最后在页面上列出所有识别出来的人脸,实现 ...

  2. DB2—alter追加/删除/重置column操作

    DB2—alter追加/删除/重置column操作   1.添加字段   alter table 表名称 add 字段名称 类型   Demo: 1 alter table table_name  a ...

  3. HDU 4920.Matrix multiplication-矩阵乘法

    Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/ ...

  4. Gym - 101194F(后缀数组)

    Mr. Panda and Fantastic Beasts 题意 给出若干个字符串,找到一个最短的字典序最小的字符串且仅是第一个字符串的子串. 分析 对于这种多个字符串.重复的子串问题一般都要连接字 ...

  5. NMAP输出结果中CPE的含义

    NMAP输出结果中CPE的含义   CPE全称是Common Platform Enumeration,意思是通用平台枚举项.它是NMAP对识别出来的软件.操作系统和硬件的一种命名方式.它的格式如下: ...

  6. Reverse Words in a String II -- LeetCode

    Given an input string, reverse the string word by word. A word is defined as a sequence of non-space ...

  7. SQL RANK、DENSE_RANK、NTILE

    现有数据如下: SELECT *, ROW_NUMBER() OVER (ORDER BY 科目) AS 'Row Number', RANK() OVER (ORDER BY 科目) AS 'Ran ...

  8. Ubuntu 16.04下ssh启用root登录

    debian里root账户默认没有密码,但账户锁定. 当需要root权限时, 直接执行 sudo su 即可切换为root用户. 重新开启root账号,在命令行下执行 sudo passwd root ...

  9. PowerPoint在线浏览的几个方案

    思路:将ppt转换成pdf.image后实现在线浏览功能 下面的解决方案均不用在服务器端安装office 一.找到一个收费的restful接口,测试可用 http://www.convertapi.c ...

  10. hdoj 1159最长公共子序列

     /*Common Subsequence A subsequence of a given sequence is the given sequence with some elements ( ...