浏览 3492 次
锁定老帖子 主题:推荐轻量级面向服务Web开发库Objot
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-27
Objot是我们公司Aragon Consulting Group的大牛crazybird发起的开源web开发库,基于JavaScript,Java,Python等,目前版本14,基于Java的Web封装框架已经可以使用了。
Objot核心库主要是做页面JavaScrit对象和后台Java等Model的序列化与反序列化工作,使用Objot不需要form提交,而是将页面post数据组装成一定格式的字符串,然后以Ajax请求的方式发送到后台service层,比较类似于Ajax与WebService的开发模式,适用于页面逻辑复杂的Web程序。 Objot和Json相比,优点是对象引用和对象循环引用的增强处理,Json遇到对象循环引用,如user.friend时就无法处理了,而Objot使用内部id引用来帮我们封装好对象图的序列化工作。 Objot的Java端Web开发框架使用基于JDK5 Annotation配置,如: @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_; } 使用@Get标记的属性表示可以序列化到页面客户端,使用@Set标记的属性表示可以反序列化到后台服务器,并在参数里列出需要用到的类,没有标记的则被屏蔽 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; } } 使用@Service标记的方法表示暴露给Web浏览器,相当于可以使用url访问的action 页面我们不需要再写HTML表单,直接使用JavaScript定义数据传输: 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); } 'DoSign-inUp'和'DoSing-out'表示调用的是DoSign类的inUp方法和out方法 Objot有一个基于Java的chat的demo,大家可以下载来看看。 Objot的Python端Web框架正在开发中。 对于页面逻辑复杂的程序,例如有时候页面input框、select框等特别多,name、id容易冲突,或者页面动态生成的内容特别多时,使用Objot会让您脱离传统HTML表单提交 繁杂错乱的痛苦、感受Web开发的乐趣。 Objot代码库正在不断更新中,敬请大家关注,欢迎与蔡倩彦联系。 菜菜的个人主页是http://qianyan.cai.name/,上面有一些他发起的开源项目的介绍。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-05-27
Not Found
The requested URL / was not found on this server. Apache/1.3.34 Server at www.aragonconsultinggroup.com Port 80 |
|
返回顶楼 | |
发表时间:2007-05-28
It can be visited last week.
Maybe today something goes wrong with the server. |
|
返回顶楼 | |
发表时间:2007-05-30
the server is ok now
|
|
返回顶楼 | |