前言
结合之前所用的ormlite和hessian,再加上SAE已经支持JAVA,把服务端切换到JAVA,也就有了本文。使用hessian来做数据传输,ormlite来实现客户端与服务端的数据存储,极大的减少了CRUD工作。本文为探索贴,未正式用于大型项目,欢迎大家讨论使用!
声明
欢迎转载,但请保留文章原始出处:)
ITEYE:http://www.iteye.com/
农民伯伯: http://www.cnblogs.com/over140/
正文
一、简介
1.1ormlite
Ormlite[Object Relational Mapping Lite (ORM Lite)]
对象关系映射精简版(精简版的ORM)提供了一些简单的,轻量级持久化Java对象到SQL数据库,同时也避免了复杂性和更多的标准的ORM包的开销的功能。
支持数据库的jdbc调用,当然,最重要的肯定是它支持android原生的数据库api调用sqlite。
——转载自这里。
1.2hessian
使用方法参照本博两篇文章:
[hessdroid]Android下使用Hessian与Java服务端通讯
[hessdroid]Android下使用Hessian与Java服务端通讯的传值测试
1.3Android快速开发框架说明
考虑如下几个特点:
a).客户端(Android)和服务端均使用Java语言
b).客户端(Android)和服务端均支持Hessian和ormlite框架
c).完整的支持面向对象开发:存储和交互传输
二、准备
2.1开发环境
为了便于同时开发Android和Java Web,这里下载的是Eclipse IDE for Java EE Developers版本,然后安装最新的ADT插件和TOMCAT插件。
2.2服务端
应用服务器使用Tomcat,采用Java(JSP/Servlet)来实现服务端的业务逻辑,数据库使用Mysql。快速框架搭建推荐大家使用XAMPP(集成Apache、MySQL、PHP等,支持绿色安装)。
2.3客户端
普通的Android环境
2.4通信与存储说明
服务端与客户端通过Hessian进行数据交换,通过Ormlite保存数据库(通过JDBC保存到服务端的MYSQL数据库,也可以直接保存到客户端的sqlite数据库);
三、代码
3.1项目工程截图(服务端)
HOLib共用于客户端和服务端,保证接口和数据对象一致性。
3.2重点代码分析
3.2.1服务端
web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>user</servlet-name>
<servlet-class>com.nmbb.ho.server.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>user</servlet-name>
<url-pattern>/user.do</url-pattern>
</servlet-mapping>
<listener>
<listener-class>com.nmbb.ho.server.StartupInit</listener-class>
</listener>
</web-app>
StartupInit.java
@Override
public void contextInitialized(ServletContextEvent arg0) {
try {
TableUtils.dropTable(OrmliteHelper.getConnection(), POUser.class,
true);
//创建数据库
TableUtils.createTable(OrmliteHelper.getConnection(), POUser.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
}
代码说明:
StartupInit可用于创建数据库表结构,这里用于测试,真实环境注意数据丢失问题。
POUser.java
public class POUser implements Serializable {
/** 用户编号,6位数字 */
@DatabaseField(generatedId = true)
public int suid;
/** 用户名 */
@DatabaseField(width = 30)
public String username;
/** 密码 */
@DatabaseField(width = 30)
public String password;
/** 昵称 */
@DatabaseField(width = 60)
public String nickname;
/** 200 正常 201 数据校验错误 202用户已经存在 */
public int status = 200;
/** 用于放错误信息 */
public String msg;
public POUser() {
}
}
代码说明:
注意需要一个空的构造函数,其他请参考ormlite资料。
UserServlet.java
* 用户Servlet
*
* @author 农民伯伯
* @see http://www.cnblogs.com/over140/archive/2013/02/19/2917231.html
*
*/
public class UserServlet extends HessianServlet implements IUserService {
@Override
public POUser register(String username, String password) {
POUser result = new POUser();
System.out.println("[UserServlet.register]...");
// 检测数据是否合法
if (isEmpty(username) || isEmpty(password)) {
result.status = 201;
result.msg = "用户名或密码不能为空";
} else {
// 检测用户是否存在
OrmliteHelper<POUser> db = new OrmliteHelper<POUser>();
if (db.exist(POUser.class, "username", username)) {
result.status = 202;
result.msg = "用户名已经存在";
} else {
result.username = username;
result.password = password;
db.create(result);// 入库
result.msg = "注册成功";
System.out.println("create user suid:" + result.suid);
}
}
return result;
}
@Override
public List<POUser> query(int suid, int startIndex, int pageSize) {
return new OrmliteHelper<POUser>().query(POUser.class, "suid", suid, startIndex, pageSize) ;
}
/**
* 判断字符串是否为空
*
* @param str
* @return
*/
public static boolean isEmpty(String str) {
return str == null || str.length() == 0;
}
}
3.2.2客户端(Android)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void OnClickRegiger(View view) {
new AsyncTask<Void, Void, POUser>() {
@Override
protected POUser doInBackground(Void... params) {
String url = "http://192.168.68.23:8081/HOServer/user.do";
HessianProxyFactory factory = new HessianProxyFactory();
try {
factory.setDebug(true);
factory.setReadTimeout(5000);
//不设置会报 expected hessian reply at 0x48
factory.setHessian2Reply(false);
IUserService basic = (IUserService) factory.create(IUserService.class, url, getClassLoader());
return basic.register("admin", "123456");
} catch (MalformedURLException e) {
Log.e("UserActivity", "OnClickRegiger", e);
} catch (Exception e) {
Log.e("UserActivity", "OnClickRegiger", e);
}
return null;
}
@Override
protected void onPostExecute(POUser result) {
if (result != null) {
if (result.status == 200) {
//保存入库
new DbHelper<POUser>().create(result);
}
Toast.makeText(UserActivity.this, "" + result.msg, Toast.LENGTH_LONG).show();
}
};
}.execute();
}
}
代码说明:
1、DbHelper在源码里给出。
2、如果项目无法编译通过,请注意设置项目的字符编码、JDK版本、Android的版本。
三、总结
5.1优点
a).完全面向对象开发
b).降低项目的复杂度,减少引入其他框架所带来的复杂性
c).非常适合一个开发服务端和客户端
充分的利用的框架的特点,提交开发效率,适合中小型项目快速开发。
5.2缺点
a).注意服务端与客户端共用id的问题
5.3其他
a).ormlite支持标准的JPA助记符,这里。这样服务端采用Hibernate应该也是可以的,有时间可以做一个整合例子看看。
b).测试发现整个框架也适用于SAE,如果一个人负责客户端和服务端,那就太幸福了!
四、下载
相关推荐
struts2+ibatis+spring+Hessian 整合项目 web项目整合,服务端用hessian协议远程调用服务端的方法,hessian是用spring代理整合,struts2+ibatis+spring的整合项目,用作学习和开发基础平台构建很有用处,工程导入...
总结来说,Android开发项目的快速开发框架主要依赖于高效的通信协议(如Hessian)和简化数据管理的ORM工具(如ORMLite)。正确地整合和使用这些工具,可以显著提升开发速度和代码质量,使开发者能够专注于核心业务...
Spring + Mybatis + Hessian 亲自手写,附带测试用例,有问题随时提问。操作流程,自己导入sql,并修改数据库配置,配置Tomcat后启动服务,然后启动Tomcat, 最后测试用例。 测试用例步骤:步骤1.Run HessianTest. ...
压缩包里有两个 springMVC+Ibatis 的项目:HessianServer(服务器端),HessianClient(客户端),解压导入到MyEclipse 更改配置文件中的数据源,建表(和实体类对应的表),执行客户端中的BasicClient.java文件即可...
- 在实际开发中,我们可能会需要编写一些辅助工具类来处理Hessian的相关操作,例如Hessian2Input和Hessian2Output,它们用于读写Hessian序列化的二进制流。 6. **安全性与优化**: - 虽然Hessian协议效率高,但其...
1.名称:Spring + Hessian + Spring MVC(包括Server和Client).zip 2.来源:自己实现 3.备注:项目有两个系统,包括Server端和Client端,项目已经跑通,可以实现。 4.注意:client中pom.xml里最后的一个jar包,需要...
互联网云快速开发框架,微服务分布式代码生成的敏捷开发系统架构。项目代码简洁,注释丰富,上手容易,还同时集中分布式、微服务,同时包含许多基础模块和监控、服务模块。模块包括:定时任务调度、服务器监控、平台监控...
在IT行业中,Web服务(Web Service)是一种标准的软件接口,允许不同系统之间进行通信,实现数据交换和服务的集成...在实际开发中,可以根据项目需求选择适合的Web Service实现方案,如SOAP、RESTful API或Hessian等。
标题 "OSGI+SpringDM+Hessian" 涉及到三个重要的技术概念,它们分别是OSGI(Open Services Gateway Initiative)、SpringDM(Spring Dynamic Modules)和Hessian。这些技术在Java开发领域中都有其独特的应用和价值。...
完美整合spingMVC+mybatis+hessian+activeMQ+redis,引入mybatis物理分页插件,模拟cookie登陆的工具类。
总结来说,Hessian android版是Android开发中实现轻量级、高效远程服务调用的一种技术,涉及网络通信、序列化、安全等多个方面,理解并熟练掌握这些知识点对于开发高质量的Android应用至关重要。
【标题】:“CXF+RMI+HESSIAN”整合详解 在IT行业中,CXF、RMI(Remote Method Invocation)和HESSIAN是三种不同的技术,它们在分布式系统和服务提供方面发挥着重要作用。这篇文章将深入探讨这三者如何协同工作以...
在IT行业中,构建高效、可扩展的Web应用是至关重要的,而Spring MVC、Hibernate和Hessian这三大技术框架的整合可以实现这一目标。本篇将详细介绍这三个组件以及它们如何协同工作,帮助开发者构建高质量的分布式应用...
在Android应用开发中,与Web服务器进行通讯是常见的需求,Hessian是一种二进制协议,它使得Java和Java、Java和其他语言(如Python、C++)之间的远程调用变得高效且简便。本教程将深入探讨如何在Android端利用Hessian...
在android与web端实现hessian通信,源码为android客户端源码,jar包来自http://hsrong.iteye.com/blog/1719996,google官网提供的hessdroid不可用,因为里面...hessian官网的jar包适用于web端,不适用于android端开发。
整合 Dubbo + SpringMvc 4.3.1 的服务器maven工程样例,使用注解方式定义服务及IOC装配,采用Hessian协议传输 三个工程,在 cnetAdmin 和 cnetBlu 中,要引用 cnetCommon 工程。