Ajax下的java的MVC

 

  只要是java web技术人员,没有人不知道MVC。在java世界中,一直都是把最好思想、技术应用其中,然后再推广到其他的语言。比如:log4j、lence、sax2等。面对Ajax,很多开源都推出自己的框架。使用最广还是Ruby社区的prototype。在prototype之上,又出现许多的显示的widget。在.net上使用的有altas。当然还有着通用的:qooxdoo、dojo、rico等。

借助于Ajax,Google推出了GWT,Echo也推出Echo2,jsf、jsp都有着自己的ajax框架,把它们的标签转换出Ajax方式(ajax4jsf、AjaxFaces等)。在ajax的应用中,上面是都是和具体的jsp标签结合起来,另外还有一类实现就是把java转化出javascript。如DWR、json-rpc-java。甚至Eclipse推出了ATF工具。
 结合标题,我想能看出笔者的意思吧?MVC就是把M、V、C三者分离。为了这样,大量的java语句变成了标签如(Structs标签)之后又推出了JSTL。可以这样讲Taglib把web设计的标签化推到最高。在这同时,一些明智的人士看到这中间的问题。那就是Tapestry的发起人。说到Tapestry,不要被什么组件这样那样给蒙骗啦。他只不过是把jsp标签要实现的功能用HTML标签的属性来实现。这样好处就不用说。说到组件重用,难道jsp的标签不能重用?它的好处就是程序员和美工分离。在之后的日子Jsf组合了jsp、tapestry的思想、采用Backed bean,推出jsf1.0、1.1、1.2.。尽管老外硬说好,中国人还是不认。说实在,笔者在用过一段时间,总是发现它不伦不类。把tapestry的好处丢了。把structs的简单歇易用也给丢了。所以Structs在中国还是很火的。Tapestry也慢慢地火起来(就是中文文档太少,如果像Spring、structs文档一样,我想很多用Tapestry)。在Tapestry4.x中,采用了Hivemind,在4.1中采用了dojo来使用Ajax技术,让出了validation等页面的表现能力给Web客户端本身。相信它之后版本还会让出更多的页面控制给Dojo。如果把全部的页面控制都给让出来,还客户端页面本来的面目,那是什么样子?
   那样还要不要Tapestry,Tapstry就剩下一个和Web页面传递的作用,比如监听,然后render页面所要的内容。其实Tapestry是做不到,如果做到,就不要Tapestry,Tapestry那样的处理过程还是太繁啦。
   先不讲Tapesty的将来,如果那样真的发生啦。不要再用html模板、jsp等做MVC中的View,而是采用实实在在的html和Ajax来实现view的功能。采用一个框架实现客户端和服务器上的java语言交换数据。在这里这个框架当然包装了XMLHttpRequest的功能,而不是Corba、RMI、SOAP的实现。这个框架就充当Control层。对于Model层,在java中,可以用spring+hibernate等等什么技术实现都可以。
这样会有什么好处,web设计人员和程序人员完全分离开了。如果对于一些需要和服务器交互的数据的地方,在页面美工设计时,看不到效果。只像Tapestry中的那样加两个$move$、$content$的类似功能的javascipt实现做为Html标签的属性就可以。这样的话、美工和页面的javascript设计人员可以分离、javascript设计人员又可以和java程序员分开,各司其能。
而且页面也可以采用如Qooxdoo、Dojo、Rico这一些组件库。很快就能组成一个漂亮的、功能强的页面。Dojo尽管现在只有.3.0版本。它有着一统页面控件的野心,它把如button、富文本等功能都做到html的标签中的属性。我们可以看出:Jsp标签慢慢地就要退出市场。Tapestry的Html标签属性也要慢慢让位于Dojo等Ajax真正的页面控制者。
 那样现在有没有这样的框架呢?还是先从Apache中找起到。在首页你会很惊奇地发生页面左边多了一个你不知道的东西:Shale。它可以就是Structs下一代。也可以说不是。原因和Structs没有什么本质的联系。但是开发人员没有变。Shale,据说框架设计的评分比JSF还高4.5分。
 Shale现在还没有什么文档。不过它是想充当上面所需求的框架,它结合了Tapestry、Structs中的Tiles等、JSF、Spring等多种思想技术综合而成。它的Remoting能很好地和ajax接合起来。它的Clay能代替Tapestry。同时也为喜欢JSF的人还能继续用JSF。但是它的起点太高。使用的人还要去知道JSF等。同时不成熟。我在想如果在中国shale能火起来。Tapestry火不起那是不可能的。在shale最看好的还是它的Remoting和clay。这两者在Tapestry中都能实现。不然Tapestry4.1就简单地用Dojo实现一些功能,感觉不好,还不如也单独提出Remoting包,然后在这之上,随意地和Ajax结合。
  其实笔者最看好还是DWR。不要提json-rpc-java。这两者的比较上网找一下就是一太堆。Java-rpc-java还要用到jsp、servlet.这样是很烦的。在DWR2.0中,客户端的js能通过DWR访问java。而java也能通过DWR中的工厂访问客户端的js.也就是说js和java能相互交换数据。Reverse Ajax是2.0是最重要的特征。
 当然,不是说DWR没有缺点。要完全地取代Structs等独立做为一个框架。还有很长的路。比如:安全问题。这个问题,它能和accigi(?)结合。还有java Bean的缓存问题?这可以和oscache结合。当然还可以和Spring结合(它已经做了)。最好是有一个自己的缓存机制。可以采用oscache等。
在这种方式,如上传等。这一些都可能和cos等工具结合。变成自己的实用的java库。然后在dwrEngine下转换。提供和java结合的js。
我们上面说的都是异步的操作。还有一些同步的操作。比如登陆成功之后,假如用户分好几种,每一种用户的盖面都有一些不同。这个在Structs中是比较好实现。但是如果在表现层中仅仅用js中的if …. Else是可以的。但是这个要在服务器上运行。因为它对于每一种用户网页都是静态的。这个很简单。只要传入一个参数。这个参数是客户传来的。用一个servlet来处理。然后把这个参数写入页面。这些都是dwrEngine要做的。
这样,真的很好。希望有这么一天。当然,我们也可以自己去实现.仅仅个人观点。有错误请读者指出。
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值