Burn Net--烧网

玩的是电脑,别被电脑玩了。

统计

留言簿(2)

积分与排名

Dojo

阅读排行榜

评论排行榜

2006年6月22日 #

SwingWeb 1.0.0发布

Swingweb是一个web程序开发框架,它把AWT/Swing程序装入一个web容器,然后转换为纯净HTML/CSS/javascript。在开发过程中,swing包是没有任何改变的,开发者完全可以使用原来写swing的知识和习惯来编写网页程序。
以下是Swingweb项目的主要目的:
  1. 创建真正的基于组件(component)web应用程序平台 
    Swingweb允许开发者利用 UI components的概念来开发web应用程序。大大简化了以前繁复的页面管理,seesion创建等等。一旦创建了一个组件(component), 无论是一个简单的textbox,还是一个复杂的calender,都是可以重复使用的(reusable),这减轻了开发负担。
  2. 在web应用程序开发中使用swing UI model
    Swing component model在java平台中应用得非常广泛,所以那些java程序员如果选用swingweb作为开发框架,将不会花费多少时间来学习。
  3. 允许使用各种GUI开发工具来简化开发
    当今已经有很多优秀的JAVA IDE支持GUI开发,例如eclipse和netbeans,开发者可以随意使用就像在开发一个java桌面应用程序一样。

这里有2个swingweb的演示flash:
Swingweb官方网站:
http://swingweb.sourceforge.net/swingweb/

posted @ 2006-08-10 20:50 Burn Net 阅读(895) | 评论 (0)编辑 收藏

将来12个月内java技术前瞻--来自16位德国java专家

昨天,16位德国JAVA专家在一起讨论“在下面12个月中,我们应该学习什么?”,如果你想知道讨论的详细内容,请看这里http://www.firstpartners.net/red-piranha/knowledgebase/VirtualJavaMeetup.

如果你没有耐心看下去,那么请看我列出的总结:
  • 网络服务将会膨胀,但是前提条件是必须保持整洁的情况下。
  • EJB 3 和 Netbeans 是非常值得我们在上面花费时间的, 它们都比以前的版本要完善得多,虽然之前它们的名声并不是那么好。
  • Middleware (例如 workflow and Rules Engines) 关注的是团队开发,但是想进入这样一个团体的障碍是很高的。
  • Struts会继续称霸JAVA WEB frameworks, 尽管它已经不是最优秀的技术了。
  • 非常多的公司将继续使用 Java 1.4, 同时关注着Java 1.6。
  • Service Orientated Architecuture (SOA)是一个非常不错的想法,但是目前为止并没有太多的project在使用它。
  • IDE’s (Netbeans / Eclipse / JDeveloper) 会给我们带来很多好处, 前提条件是它们必须被low level工具支持 (例如 Ant 和 Maven).

posted @ 2006-08-10 20:49 Burn Net 阅读(989) | 评论 (1)编辑 收藏

踏上国土。

经过11个半小时的长途飞行,还有在韩国的一夜煎熬,终于踏上了祖国的国土。回家的感觉真好。
不得不提一下在韩国的待遇,因为要过夜,机场提供宾馆住宿,飞机于韩国当地时间晚上9点半到达,结果凌晨2点多我才躺在宾馆的床上。
条件还是不错,是个5星的宾馆,于是按计划给没有同行的老婆打个电话,聊了大概20分钟,可是第二天退房的时候竟然要了我1万多korean wan,合人民币100左右。我算是张记性了,以后还是买张卡再打电话吧。

回国稍微休息了一天,把Dojo book第一章补充翻译了出来。

posted @ 2006-06-27 17:10 Burn Net 阅读(305) | 评论 (2)编辑 收藏

Dojo book第一章补充 I/O

译者序:
Dojo book目前还在不断更新和补充中,我会尽量跟上原著的脚步,给大家最新的信息。
更新我会用随笔写出来,同时也会更新原文章。

I/O

dojo.io.blind介绍


在我们制作dojo的时候,目的是让用户和开发者都能享受到DHTML程序。在很多朋友的支持下,特别是Aaron Boodman和Mark Anderson,我们已经找到了解决可用性的方法。我们提供了一个单独的易用的API和一个包装类,这个类只需要两个文件。dojo.io包提供了对XMLHTTP和一些其他更复杂的传输结构的支持。

在dojo.io包中我们一般最常使用的是dojo.io.bind()方法。dojo.io.blind()是一个标准的异步的请求API,它包含了各种传输层(transport layers),包括queues of iFrames,XMLHTTP,mod_pubsub,LivePage等等。Dojo会试图为当前的请求选择最合适的传输方法,因为在做网站时一般不会使用到其他传输,所以我们只用到XMLHTTP。dojo接受一个匿名的类,但是在知道这个类的属性的情况下,把它作为方法参数(function argument)。下面的代码是创建一个请求(request),这个请求会从URL返回原始的字符串。
dojo.io.bind({
    url: 
"http://foo.bar.com/sampleData.txt",
    load: 
function(type, data, evt){ /*do something w/ the data */ },
    mimetype: 
"text/plain"
});

这就是全部,你提供了一个数据地址,还有一个当你得到返回值时要执行的function。但是如果在请求过程中出错了怎么办呢?我们再来创建一个register来解决:

dojo.io.bind({
    url: 
"http://foo.bar.com/sampleData.txt",
    load: 
function(type, data, evt){ /*do something w/ the data */ },
    error: 
function(type, error){ /*do something w/ the error*/ },
    mimetype: 
"text/plain"
});

同样也可以只创建一个单独的handler来解决:
dojo.io.bind({
    url: 
"http://foo.bar.com/sampleData.txt",
    handle: 
function(type, data, evt){
        
if(type == "load"){
            
// do something with the data object
        }else if(type == "error"){
            
// here, "data" is our error object
            // respond to the error here
        }else{
            
// other types of events might get passed, handle them here
        }
    },
    mimetype: 
"text/plain"
});

下面的代码提交一段javascript程序段,然后让服务器运行它,一般我们这么做是为了加速程序运行,注意mimetype:
dojo.io.bind({
    url: 
"http://foo.bar.com/sampleData.js",
    load: 
function(type, evaldObj){ /* do something */ },
    mimetype: 
"text/javascript"
});

如果你想确保程序使用XMLHTTP,可以这样写:
dojo.io.bind({
    url: 
"http://foo.bar.com/sampleData.js",
    load: 
function(type, evaldObj){ /* do something */ },
    mimetype: 
"text/plain"// get plain text, don't eval()
    transport: "XMLHTTPTransport"
});
Being a jack-of-all-trades, bind() also supports the submission of forms via a request (with the single caveat that it won't do file upload over XMLHTTP):
作为一个jack-of-all-trades(万事通),bind()同样支持来自于表单提交的数据。
dojo.io.bind({
    url: 
"http://foo.bar.com/processForm.cgi",
    load: 
function(type, evaldObj){ /* do something */ },
    formNode: document.getElementById(
"formToSubmit")
});
以上只是一些最基本的,其实这些可以不用全部由开发者自定义。

RPC
你可以看到,Dojo通过dojo.io.bind提供了简单,强大的方法使用多种多样的I/O functions。但是在开发过程中,程序员会调用很多很多I/O,这同时会给服务器和客户端加重负担。Dojo的RPC服务就是为了减少负担,易用,精简代码而生的。

RPC的全名是Remote Procedre Calls,或者Remote Method Invocation,(译者:远程method调用)。最基本的,RPC允许开发者调用在远程服务器上的方法(method)。Dojo不仅提供了基本的RPC client包,而且还扩展了它,使它支持JSON-RPC服务和YAHOO服务。同时你也可以自己写出相对于其他服务的类。

我们假定有一个需要调用服务器端程序的小程序,假设要调用add(x,y)和subtract(x,y)。在没有特殊情况的条件下,我们的客户端会这样写:
add = function(x,y) {

    request 
= {x: x, y: y};

    dojo.io.bind({
            url: 
"add.php",
            load: onAddResults,
            mimetype: 
"text/plain",
        content: request
    });
}

subtract 
= function(x,y) {

    request 
= {x: x, y: y};
    
    dojo.io.bind({
            url: 
"subract",
            load: onSubtractResults,
            mimetype: 
"text/plain"
        content: request
    });
}


你看,这不是很难。但是无论是我们让服务器运行add和subtract还是让客户端自己计算,这只是一个非常简单的程序。如果我们要调用在服务器上30个不同method会怎么样呢?我猜我们可能要重复的写几乎一样的代码一遍又一遍,每次都要创建一个请求类(request object),设定URL,设定变量等等。这不仅容易出错,而且还很枯燥。
Dojo的RPC客户端简化了这个过程:

{
    
"serviceType""JSON-RPC"
    
"serviceURL""rpcProcessor.php"
    
"methods":[ 
        {
            
"name""add"
            
"parameters":[
                {
"name""x"},
                {
"name""y"}    
            ]
        },
        {
            
"name""subtract"
            
"parameters":[
                {
"name""x"},
                {
"name""y"}    
            ]
        }

    ]
}

以上就是对于服务器的定义。一旦定义创建完毕,其他的事情就简单了,我们还可以创建一个类:
var myObject = new dojo.rpc.JsonService?(defintion);
要使用服务器的方法:
myObject.add(3,5);

我敢打赌你会在想“我不是只调用方法就够了,我还有得到计算的结果。”你是对的,但这也是非常容易的。服务器端的myObject.add()会返回一个延缓类(deferred object)。Twisted Python用户可能对延缓类(deferred object)很熟悉,延缓类(deferred object)允许开发者根据返回数据的类型附加一个或更多的回叫(callbacks)和错误处理(errbacks)。这里有一个简单的例子:
var myDeferred = myObject.add(3,5);
myDeferred.addCallback(myCallbackMethod);

我们把mycallbackmethod作为回叫添加到我们的延缓类mydeferred。这时,8会被传递进mycallbackmethod。另一方面,我们也可以添加一个errback method来处理服务器返回的出错信息。我们随意添加回叫方法(callback),多少都可以,它们会按照我们定义的顺序被调用。

以上的例子都是围绕dojo.rpc.JsonService展开的。我们还可以使用dojo.rpc.YahooService,规范和结构都是一样的。这两个类都是继承了dojo.rpc.RpcService。要创建自己的类会在第二章中详细介绍。(译者:第二章原著还没有完成)

posted @ 2006-06-27 16:56 Burn Net 阅读(2463) | 评论 (7)编辑 收藏

旅途

明天中午12点我将坐上飞往祖国的航班。
想想11个半小时的飞行就烦。计划在飞机上完成Dojo.Book第二章的翻译。
幻想10年后的飞机会有多么舒适,有床,可以上网我就满足了。
现在我都快有恐飞症了。

posted @ 2006-06-23 20:55 Burn Net 阅读(260) | 评论 (0)编辑 收藏

一个“笑话”引发的思考

抱歉引用了“馒头”的经典格式
技术是枯燥的,如果我们玩技术的再不自娱自乐一下,那可真没救儿了。
言归正传,“笑话”是这样的:

当美国人第一次成功发射载人卫星后,美国宇航员发现因为太空缺少地球引力,原来方便的圆珠笔不能用了。于是美国花巨资组成了一个研发小组,经过半年后终于研制出了一种可以不受引力限制的圆珠笔,美国宇航局(NASA)非常满意。
与此同时,俄罗斯宇航员也遇到了同样难题,圆珠笔不好用了!
结果俄罗斯宇航员决定使用铅笔。


我突然想起了我在不久之前研究ajax的时候,为了使用Net Beans+GWT来开发ajax,查阅了很多文档,找了很多资料,就是没想起来其实可以用textpad写class的。

这也是我为什么喜欢上dojo的原因,本来简洁的东西就让它简洁下去,何必让它那么复杂?

当然,如果能熟练的用Net Beans+GWT或者DWR开发ajax也不乏是件美事。

但是也许有的时候我们没有象“美国”那样的实力或者精力,在想简单的作一个小项目的时候不妨试试“俄罗斯”的办事方法,该简单的事情别搞复杂了。

posted @ 2006-06-22 19:11 Burn Net 阅读(227) | 评论 (0)编辑 收藏

最近爱上Dojo

也许是因为Dojo的简洁,强大,或者是我真的没有耐心自己一点一点写javascript。

以前研究过gwt,dwr,最后还是感觉dojo用得最舒服,dojo不会象dwr限制我的server side。

以后我会写很多关于dojo的文章,当然还包括如何自由使用dojo链接到servlet/jsp/php/sql。

posted @ 2006-06-22 19:10 Burn Net 阅读(615) | 评论 (1)编辑 收藏