推荐轻量级面向服务Web开发库Objot

[url=http://objot.info/]Objot[/url]是我们公司[url=http://www.aragonconsultinggroup.com/]Aragon Consulting Group[/url]的大牛crazybird发起的开源web开发库,基于JavaScript,Java,Python等,目前版本14,基于Java的Web封装框架已经可以使用了。

Objot核心库主要是做页面JavaScrit对象和后台Java等Model的[b]序列化与反序列化[/b]工作,使用Objot[b]不需要form提交[/b],而是将页面post数据组装成一定格式的字符串,然后以Ajax请求的方式发送到后台service层,比较类似于Ajax与WebService的开发模式,适用于[b]页面逻辑复杂[/b]的Web程序。

Objot和[url=http://www.json.org/]Json[/url]相比,优点是对象引用和对象循环引用的增强处理,Json遇到对象循环引用,如user.friend时就无法处理了,而Objot使用内部id引用来帮我们封装好对象图的序列化工作。

Objot的Java端Web开发框架使用基于JDK5 Annotation配置,如:
[code]
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "name"))
public final class User extends IdAuto<User>
{
@BeSimple(max = 20)
@Get( { DoUser.class, DoChat.class })
@Set( { DoSign.class, DoUser.class })
public String name;

@BeSimple(max = 20)
@Set(DoSign.class)
public String password;

@ManyToMany
public java.util.Set<User> friends;

@GetSet(DoUser.class)
@NameGet("friends")
@Transient
public java.util.Set<User> friends_;
}
[/code]
使用@Get标记的属性表示可以序列化到页面客户端,使用@Set标记的属性表示可以反序列化到后台服务器,并在参数里列出需要用到的类,没有标记的则被屏蔽
[code]
public class DoUser extends Do
{
/** @return me with {@link User#friends_} */
@Service
public static User me(Do $) throws Exception
{
User me = $.load(User.class, $.me);
me.friends_ = me.friends;
return me;
}

/** update {@link User#friends} if SO' is not null */
@Service
public static Ok update(User u, Do $) throws Exception
{
if (u.friends_ == null) // || name
return Ok.OK;
User me = $.load(User.class, $.me);
if (u.friends_ != null)
me.friends = u.friends_;
return Ok.OK;
}

/**
* by {@link User#id} (if > 0) or {@link User#name} (if not null).
*
* @return array of User or null if not found
*/
@Service
public static User[] get(User[] us, Do $) throws Exception
{
for (int i = 0; i < us.length; i++)
us[i] = us[i].id != null && us[i].id > 0 ? $.get(User.class, us[i].id)
: us[i].name != null ? $.find1(User.class, "name", us[i].name) : null;
return us;
}
}
[/code]
使用@Service标记的方法表示暴露给Web浏览器,相当于可以使用url访问的action

页面我们不需要再写HTML表单,直接使用JavaScript定义数据传输:
[code]
DoSign = function () {
}

DoSign.inUp = function (name, pass, This, done) {
return $Do('DoSign-inUp', 'Signing', $get(new User(null, name, pass), this),
This, done, null, this.doneInUp);
}
DoSign.doneInUp = function (ok, err) {
ok && (_me = $.is(ok, User));
}

DoSign.out = function (This, done) {
return $Do('DoSign-out', 'Signing out', '', This, done);
}
[/code]
'DoSign-inUp'和'DoSing-out'表示调用的是DoSign类的inUp方法和out方法

Objot有一个基于Java的chat的demo,大家可以下载来看看。
Objot的Python端Web框架正在开发中。

对于页面逻辑复杂的程序,例如有时候页面input框、select框等特别多,name、id容易冲突,或者页面动态生成的内容特别多时,使用Objot会让您脱离传统HTML表单提交
繁杂错乱的痛苦、感受Web开发的乐趣。

Objot代码库正在不断更新中,敬请大家关注,欢迎与蔡倩彦联系。
菜菜的个人主页是[url]http://qianyan.cai.name/[/url],上面有一些他发起的开源项目的介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值