目录
前言
本文档主要介绍了如何基于轻量MAserver快速构建移动应用,以及MAServer开发中的一些特点,最后列举了一些典型应用。目的是尽可能地让大家在使用MAServer的时候更加方便。
基于MAServer创建应用
iuap mobile
在基于MAServer创建应用之前,我们先来认识一下应用设计器。
iuap mobile主要用来设计APP(包括android和ios的应用)和服务器端代码,并进行调试运行。
创建移动应用
新建一个移动项目,并进行设计,具体可见移动应用的相关文档
一个移动项目对应的就是一个app,编译后直接可在移动设备上运行,当然本文档的重点并不是在应用的设计,而是后台服务端业务的处理上。
该应用编译运行后,可启动MAServer,可以进行后台代码的调试。此处的Ma Server为集成到UAP Mobile的轻量级Server,可以通过这种方式启动,较为方便快捷。
MA Server使用
本地服务
在public文件夹下,用户可以通过继承com.yonyou.um.webmvc.controller.UMController来实现自己的逻辑控制类,UMController为统一的MA调用服务的转接类,而用户开发的类需要在设备端传入的数据中指定。
在UMController中可以获得request、response、Session信息, 设备传入的数据以及相关的结果处理方式。
/***获得设备端设置的参数*/public Object getParaFromClient(Stringname);/***getthevalueofthename,fromtheuserdatawhichisajson*/public Object getClientData(Stringname);/***获得HttpServletRequest*/public HttpServletRequest getRequest();/***获得HttpServletResponse*/public HttpServletResponse getResponse();/***渲染json数据,将object的数据转化为json并返回到设备端*/public voidrenderJson(Objectobject);/***ReturnHttpSession.*/public HttpSession getSession();/***getalltheparametersfromtheclient*/public JSONObject getClientParas();/***putvaluetothecurrentthread*/public static voidsetUserData(JSONObjectuserdata);
日志服务
MA提供了相关的日志服务,使用的是log4j技术来实现,配置文件的位置为iuap mobile的安装目录下MOBump_serverconfiglog4j.properties文件,配置文件的内容与普通的log4j配置信息相同。调整日志级别的同Log4j的一般配置文件相同——log4j.logger.umserver= DEBUG, umserver
目前提供了umserver.log,使用方式为:
ILogger logger = UMLogger.getLogger(“umserver”);
支持的有debug、all、info、error、warn级别,日志文件为UAP Mobile 的安装目录下的MOBump_serverlogumsever.log。ILogger主要的方法如下:
public void debug(String message);public void debug(String message, Throwable t);public void info(String message);public void info(String message, Throwable t);public void warn(String message);public void warn(String message, Throwable t);public void error(String message);public void error(String message, Throwable t);public void fatal(String message);public void fatal(String message, Throwable t);public boolean isDebugEnabled();public boolean isInfoEnabled();public boolean isWarnEnabled();public boolean isErrorEnabled();public boolean isFatalEnabled();
异常处理机制
目前提供了以下几个异常类:
com.yonyou.um.common.exception.UMPHanderException(抽象类)com.yonyou.um.webmvc.exception.GatewayException(网关异常)com.yonyou.um.web.exception.UMPDispatcherException(服务分发异常)com.yonyou.um.plugin.exception.PluginException(插件异常)
当然用户可以增加自己的异常类来处理相关的业务操作,对于异常类的处理,我们使用com.yonyou.um.web.exception.DefaultExceptionResolver
过滤器处理机制
这里所说的过滤器Filter机制,是指允许用户增加filter类来对数据进行过滤。目前主要分为执行前过滤和执行后过滤,具体的配置文件如下:
<?xml version="1.0" encoding="UTF-8"?><mafilter><request-filter><filter id="filter1" class="com.yonyou.uap.um.filter.ServiceFirst Filter" /><filter id="filter2" class="com.yonyou.uap.um.filter.ServiceSecon dFilter" /></request-filter><response-filter><filter id="filter3"class="com.yonyou.uap.um.filter.ServiceFirstFil ter" /><filter id="filter4"class="com.yonyou.uap.um.filter.ServiceSecondFi lter" /></response-filter></mafilter>
1、request-filter表示的是在执行之前进行校验,参数为HttpServletRequest和传入的请求数据JSONObject。
使用request_filter需要继承类com.yonyou.um.webmvc.filter.MARequestFilter,并实现其中doFilter(HttpServletRequest request,JSONObject data)方法,request则为发送的请求,data为用户出入的数据。
2、response-filter表示的是在结果返回之后进行过滤处理,参数为HttpServletResponse和返回的结果值Object。
使用request_filter需要继承类com.yonyou.um.webmvc.filter. MAResponseFilter,并实现其中doFilter(HttpServletResponse response,Object retObject)方法,response则为返回的相应,retObject为用户过滤后的数据。
持久化操作
目前持久化操作分为两种,一种是使用纯java的小型数据库HSql,另一种是使用普通的数据库,下面一一介绍
HSql
1、通过脚本启动hsql
MAserver内置了一个HSQL,其数据库为test。路径为WEB-INF/hsqldb,其中的data文件夹存储的就是数据,而bin目录下可以通过runServer.bat来打开HSql,你运行项目的时候会自动打开该服务,所以基本无需使用这个bat文件。
打开数据源管理器,必须先打开HSql服务(手动点击bat文件或者运行MAServer,端口号都为9001),打开的界面如下
Type选择Enginee Server
URL为jdbc:hsqldb:hsql://localhost:9001/test
User 为SA,密码为空,管理界面如下:
2、在代码中控制HSql
这个比较简单,直接启动MAServer即启动了HSql,切记(不要同时执行bat文件和项目,会有端口号冲突的问题)。在代码中可以使用类似的方式来进行数据库查询操作,Hsql为默认的数据源,无需进行安装配置等,具体的使用方式为:
Connection con = null;Statement stmt = null;try {con = DBFactroy.getConnection();stmt = con.createStatement();//使用jdbc执行相应的sql脚本及结果处理} catch (SQLException e1) {e1.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();} finally{if(stmt != null){try {stmt.close();} catch (SQLException e) {}}if(con != null){try {con.close();} catch (SQLException e) {}}}
只需要从DBFacotory.getConnection()方法来获得connection就可以进行相应的处理,但记得要关闭流。
MAServer持久化
MAServer提供持久化操作,可将数据保存到本地的数据库。持久化操作大量参考了开源框架JFinal,具体操作如下
1、配置数据源,在MOBump_serverconfigdbConfig.properties中进行配置。
jdbcUrl=jdbc:postgresql://localhost:5432/uapdbuser=postgrespassword=1driverClass=org.postgresql.DrivermaxPoolSize=100minPoolSize=10initialPoolSize=10maxIdleTime=1800acquireIncrement=3
主要配置的内容为jdbcUrl,user和password以及driverClass
2、创建一个数据表
CREATE TABLE umserver_demo1(username character varying(200),password character varying(200),pk_demo1 character varying(200) NOT NULL,CONSTRAINT umserver_demo1_pkey PRIMARY KEY (pk_demo1))
3、在代码中进行保存数据
新建一个vo,需要继承类SuperVO
@TableName(tableName = "umserver_demo1", primaryKey = "pk_demo1")public class DemoVO extends SuperVO<DemoVO> {private static final long serialVersionUID = 3070908062018266184L;private String userName;private String password;private String pk_demo1;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getPk_demo1() {return pk_demo1;}public void setPk_demo1(String pk_demo1) {this.pk_demo1 = pk_demo1;}}
@TableName的注解表明了数据表和主键值,tablename表示表名,primarykey表示主键,目前仅支持单主键的操作。使用为,
DemoVOvo=newDemoVO();vo.set("username","wangxmn");vo.set("password","123456");vo.set("pk_demo1","111111");vo.save();//保存vo//删除pk值为111111的voDemoVO.dao.deleteById(111111);//查询id值为25的User将其name属性改为James并更新到数据库DemoVO.dao.findById(111111).set("username","test").update();//查询id值为25的user,且仅仅取name与age两个字段的值Useruser=User.dao.findById(111111,"username,password");//执行sql语句List<DemoVO>vos=DemoVO.dao.find("select*fromumserver_demo1");
父类SuperVO中还包含其它的一些持久化以及查询方法,如delete(),deleteById()等等
Tomcat
当然,MAServer不仅可以在UAP Mobile中运行,也可以配置在tomcat等server中运行,只要将自己的代码类打成jar包,放在tomcatwebapps umserverWEB-INFlib下即可,其中umserver为我们的MAServer。可在附件中看到已经配置好的MAserver的Tomcat。