论坛首页 Java企业应用论坛

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

浏览 3479 次
精华帖 (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/,上面有一些他发起的开源项目的介绍。
   发表时间: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

0 请登录后投票
   发表时间:2007-05-28  
It can be visited last week.
Maybe today something goes wrong with the server.
0 请登录后投票
   发表时间:2007-05-30  
the server is ok now
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics