Topic: Jive3.0 Webwork和 Jute1.0 Action Mapping 之间的比较 |
Print this page |
1.Jive3.0 Webwork和 Jute1.0 Action Mapping 之间的比较 | Copy to clipboard |
Posted by: rainman Posted on: 2002-11-30 10:42 今天下载了Jive 3.0来试用,准备研究一下Jive的新特性,为Jute下一步发展做一些参考。研究过程中的发现将会收集起来与大家一起分享。 标题:Jive3.0 Webwork和 Jute1.0 Action Mapping 之间的比较 作者:Rainmanzhu 时间:2002-11-29 来自:http://www.cjsdn.com 内容: Jive3.0中,包含了一个webwork的框架,看命名就能理解是用来处理网页链接以完成一系列相关的任务。因为http协议是无状态的,所以如果任务是分步执行的就必须定义协议把多个链接串(chain)起来,一般情况下任务处理会有出错或成功的分支,比如新添话题这样一个任务,如果文章标题过长,就需要把出错页面显示给用户;如果成功加入话题,又需要提示用户发贴成功,在jive中,这个action是定义在actions.xml的: <action name="PostAction" alias="post"> <view name="attach">attach!default.jspa</view> <view name="cancel">doRedirect.jspa?url={last}</view> <view name="error">postform.jsp</view> <view name="input">postform.jsp</view> <view name="login">loginform.jsp</view> <view name="preview">viewpreview.jsp</view> <view name="rejected">postform.jsp</view> <view name="spellcheck">spell!default.jspa</view> <view name="success">postform-success.jsp</view> </action> 可以看到这个动作有很多个分支,并且有些分支是链起来的(加粗的地方),如attach。当然actions.xml中也定义了attach动作: <action name="AttachAction" alias="attach"> <view name="input">attachform.jsp</view> <view name="error">attachform.jsp</view> <view name="success">postform-success.jsp</view> <view name="cancel">post!default.jspa</view> <view name="unauth">error.jsp</view> </action> cancel动作就使得能返回到发贴动作。action的name事实上是指向jive定义的一个类的,所以动作的逻辑均在该类中实现。action类的基类都是com.jivesoftware.webwork.action.Action,内有一抽象excute()方法。action的分发统一通过com.jivesoftware.webwork.dispatcher.ServletDispatcher来进行,ServletDispatcher通过url (*.jspa -jsp action?)来寻找相应的action,然后设置ActionContext(动作环境,所有参数都通过该类传递给action,传递是根据同一线程来进行的,方法非常之好!),最后执行action的excute()方法,方法返回值为view(如attach,cancel...),而view对应的jsp在actions.xml也定义好了!ServletDispatcher再通过RequestDispatcher转发给jsp页面,应用服务器再执行jsp生成html。 上面稍微分析了一下jive中的webwork是怎么回事,其实本文最重要的是分析jive为什么要引入webwork?从jive发展的历史来看,1.0的jive是用javabean+jsp的模式,两个jsp之间没有固定联系,而且都堆积在一个根目录下,这样维护是非常糟糕的,jive当时也支持skin,但可以看到每个skin都是写了一堆这样的jsp,几乎没有重用性!其实这种模式是2层的,缺乏了控制层,如判断用户登录状态等,每个需要的地方都需要调用api,jsp里出现了大量的java代码,所以每次jive升级,都可以看到先前的jsp几乎面目全非,这对一个快速发展的项目来说,是非常的一个阻碍因素,当时的jive重点在数据层的设计可能是一个原因。2.0以后的Jive我似乎看过,发现设计上没什么大改。但jive3.0带了一个make sense的三层结构,数据层仍然不变,中间层为action,表现层为使用标签的简化jsp。我认为这才是真正有意义的设计。顺便提一点,webwork定义了一组标签用于jsp: 如首页当中的: <%-- Print info messages if they exist --%> <ww:if test="infoMessages/hasNext == true"> <%@ include file="info-messages.jsp" %> <br><br> </ww:if> 通过标签的使用,jive界面的可控性变得良好起来。 稍后我会重点分析一下webwork的性能,希望能从中学到一些好方法。 Jute 1.0也是非常成熟的三层结构,中间层采用Servlet Mapping+Action Mapping,将不同功能组通过url前缀区分开来,同一功能组根据功能的复杂程度来选择定义新的Servlet或选择定义新的Action来分隔代码。采用继承和抽象方法来重用代码,Jute所有的Servlet都从JuteServlet继承。事实上其他Servlet都是定义Action组!每个Servlet都有perform(Context context, CGI cgi)方法,是缺省的action;然后可以定义其他action来完成不同的动作,Jute的CGI类类似Jive的ActionContext,Request,Cookie,Session都通过cgi对象获取,为了提高性能,CGI类是通过对象Pool创建的;Jive每次都创建新的ActionContext,并保存在ThreadLocal内!这点是偶以前没想到的,稍后研究一下。而Jute的Context类事实上是TemplateContext(hash结构),也可以用于保存控制层状态,但更多用于向界面层提供数据。 基类JuteServlet里有excuteAction方法,方法执行结束后返回界面模板,这点和jive非常类似!!!但区别也非常大!Jive是用静态映射action的,而Jute是运行时刻映射的,最终两者都通过cache来加快寻找action的,但Jive可以定义action chain,及action的各种view,并能保存上一个action,对于action执行过程中产生的错误也能保存在action中,并且通过修改配置扩展功能。而Jute的Action mapping,能通过cgi类来保存上一次状态,类似采用ASP.Net中的ViewState。创建action chain的时候比较麻烦,要注意保存每个过程的上一个状态,而这样url就变得非常长!Jive缺省可以嵌套10层。 Jive可以这样写: <a href="<%= path %>/<ww:property value="previousURL" />">Go Back</a>来获取上一个url。 我觉得日后可以修改Jute来改进Http状态的保存。 Jute的返回界面没有象jive一样采用mapping方法,而是直接写在相应action方法中,因为界面和action关系紧密,一般不能变换,但在界面模板里可以通过include方法来嵌入子模板。 综上所述,Jive 3.0体系更加成熟,采用的设计模式更加丰富了,非常值得采用Servlet技术的网络应用开发者学习。相当于cgi,mod-perl,php,asp,asp+等技术,servlet功能更强大,更灵活,也容易开发出好的framework,目前java世界里的framework不计其数!而现在仍采用cgi技术开发显得比较落后,缺乏安全性保证;php只适合小型网站的快速开发,一但代码到达一定量,维护和升级就是很大的问题,也不容易进行代码的性能调节;早期的ASP技术(VBScript)也显得比较落后,ASP+已经取而代之,但ASP+的缺点是底层代码不公开造成自己来开发Framework比较困难,市面上缺乏成熟可靠的应用框架,我看过微软推荐的ASP.Net开源项目,其中应用的设计模式偶觉得远不如Java。而从Jive的发展我们可以看到采用Java技术带来的灵活性,在Jive的数据库层(包括Cache层)成熟后,Jive的开发者又着手优化上层的设计,虽然这一阶段代码修改量很大,但这样做是非常值得的,将来Jive可以有更快发展的! Jute在系统架构上比较成熟是一个优势,但框架还比较简单,虽然已经满足了目前的开发需求,但仍需要完善整个框架。 |
2.Re:Jive3.0 Webwork和 Jute1.0 Action Mapping 之间的比较 [Re: rainman] | Copy to clipboard |
Posted by: SimonLei Posted on: 2002-11-30 16:27 最近正好有个朋友在研究WebWork,我也就顺道了解了一下。 个人感觉,WebWork简单而结构清晰,特别是那个“!”加的实在太合理了。其它的相应功能也很全面,特别是那个ValueStack和EL,使得JSP当中可以完全脱离开代码。加上opensymphony的其他紧密结合的项目,更加如虎添翼。我猜过不了多久,WebWork就会压倒Struts了。 |
3.Re:Jive3.0 Webwork和 Jute1.0 Action Mapping 之间的比较 [Re: rainman] | Copy to clipboard |
Posted by: scottding Posted on: 2002-11-30 16:48 非常值得以看哦,,偶也得好好研究。 |
4.写的很好 [Re: rainman] | Copy to clipboard |
Posted by: abc123 Posted on: 2002-11-30 19:17 还有就是webwork是开源的,matt本人应该也是作者之一 (一共才2个人) |
5.webworks [Re: rainman] | Copy to clipboard |
Posted by: javait Posted on: 2002-12-01 10:53 Anyone interested can find the doc at http://www.opensymphony.com/webwork/ javaIT |
6.偶正在下载 [Re: javait] | Copy to clipboard |
Posted by: rainman Posted on: 2002-12-01 11:16 晕,开始还以为是jive自己开发的呢,反编译看了一下代码,哼哼,jive都把包名改成自己的了,不知道有没有违反人家的协议。 |
7.jive都把包名改成自己的了,不知道有没有违反人家的协议 [Re: rainman] | Copy to clipboard |
Posted by: javait Posted on: 2002-12-01 11:51 应该是违反了,人家的协议是opensource,可没让修改包名! 我想使用WEBWORK 是可以的。但JIVE 的作法缺乏职业操守。 :(:( javaIT |
8.Re:偶正在下载 [Re: rainman] | Copy to clipboard |
Posted by: SimonLei Posted on: 2002-12-01 16:16 rainman wrote: 很遗憾,WebWork采用的是Apache的License,也就是说,它有权修改。虽然这种行为很无耻。 自从Jive不开源之后,我就认为这是个无耻的项目。 |
9.Re:jive都把包名改成自己的了,不知道有没有违反人家的协议 [Re: javait] | Copy to clipboard |
Posted by: SimonLei Posted on: 2002-12-01 16:18 javait wrote: Apache License允许修改源码。 虽然Jive这样做确实很无耻。合法的不一定合理。 |
10.呵呵 [Re: SimonLei] | Copy to clipboard |
Posted by: rainman Posted on: 2002-12-02 00:24 jive里有很多包都是这样的,如jdom,xml parser。不看不知道,一看吓一跳啊。 |
11.Re:呵呵 [Re: rainman] | Copy to clipboard |
Posted by: SimonLei Posted on: 2002-12-02 08:54 rainman wrote: 所以Jive这种项目,是Open Source界的耻辱。 类似的项目还有不少,先开源,等大家奉献得差不多, 开始搞商业化。这也许是Open Source存在的一个大漏洞, 会严重打击大家的积极性。前一段RedHat也修改了KDE3.0 的代码引起纠纷,sigh. |
12.呵呵,好像divx也是这样搞的。 [Re: SimonLei] | Copy to clipboard |
Posted by: rainman Posted on: 2002-12-02 09:17 别有用心哦! |
13.Re:呵呵,好像divx也是这样搞的。 [Re: rainman] | Copy to clipboard |
Posted by: SimonLei Posted on: 2002-12-02 11:08 rainman wrote: 没错,而且我听说,divx经历了不止一次这种把戏。 sigh,利字当头啊。长此以往,恐怕愿意做open source 的人越来越少了。 |
14.Open Source还是会有搞头的 [Re: SimonLei] | Copy to clipboard |
Posted by: rainman Posted on: 2002-12-02 12:08 偶觉得是个别现象吧! apache基金还是有保障的。 |
15.但愿如此吧,呵呵。 [Re: rainman] | Copy to clipboard |
Posted by: SimonLei Posted on: 2002-12-02 12:53 其实Open Source不反对商业化。而反对Close-source Jive这种做法,实在是让人心寒。 有件事情我觉得很奇怪,Jive做的也不算很好啊。 我访问过不少用Jive做的论坛,感觉也只一般而已。 为什么就这么跑火呢? |
16.Re:但愿如此吧,呵呵。 [Re: SimonLei] | Copy to clipboard |
Posted by: rainman Posted on: 2002-12-03 01:31 SimonLei wrote: 呵呵,这就是我做Jute的一个原因啊,我觉得Jive的设计并不是很好,所以就弄一个Jute出来,省得Java世界里就Jive一个人横行。 |
17.Re:但愿如此吧,呵呵。 [Re: rainman] | Copy to clipboard |
Posted by: SimonLei Posted on: 2002-12-03 08:17 rainman wrote: 这也是我支持Jute的原因之一。 |
18.拉出来遛遛! [Re: rainman] | Copy to clipboard |
Posted by: zoof Posted on: 2002-12-04 01:10 2位你来我往的说了半天,此刻终于说到戏肉上了! 很让人生嫌,2位扁JIVE是否此刻该抬JUTE了呢?戏肉终于初见端睨..... 说的那么热闹,把JUTE放出来给我们下载看看吧,是否阁下也大方的OPEN SOURCE以示与左冷禅(JIVE)的拓跋不群呢? 不过,我等最关心的是,JUTE能否持续开发/升级和维护, 你的算法怎么好,也只能是奇淫技巧! 阁下是否有可持续发展之良策,才是JUTE长青之缘水,我等放胆使用的安心丸! 衷心祝愿,JUTE不是今天你长我短,明日入土为安,放出1.0**版本就从此无下文为好! |
19.呵呵,大侠哦 [Re: zoof] | Copy to clipboard |
Posted by: rainman Posted on: 2002-12-04 01:37 已经有4个测试站点了,已经溜了好几遍了。 |
20.Re:拉出来遛遛! [Re: zoof] | Copy to clipboard |
Posted by: rainman Posted on: 2002-12-04 01:45 zoof wrote: 偶没有贬Jive啊!但Jive没有Jute功能强是肯定的,架构也不如Jute爽哦。 你放心好了,Jute持续发展不是问题啦。持续发展当然已经有妙计了啊! 界面开发已经启动了,看看 bbs.zuasoft.com 好了,plug-in和xml的标准也在指定当中,以后Jute用户可以自动升级。维护团队已经有两位选手了,多种环境下都安装过,其中一位更是模板高手!另有几位超级教练在后面指导,不用杞人忧天了。 |
21.干吗要比来比去啊,互相学习不好吗? [Re: rainman] | Copy to clipboard |
Posted by: rainbow Posted on: 2002-12-04 19:31 很久以前,我也想仿造jive找一个论坛的,不过后来找工作没空搞 现在看到jute比jive更好,我举双手支持他 |
22.都是这样的 [Re: rainman] | Copy to clipboard |
Posted by: magician Posted on: 2002-12-05 15:58 一旦成功了,马上转为商业项目 JIVE不是第一个了 |
23.re [Re: rainman] | Copy to clipboard |
Posted by: beeke Posted on: 2002-12-05 18:05 都说了WebWork有两个开发者,其中一个是matt 至于matt,就是jive的主要开发者 他把自己的程序打成jivesoft的包不过分吧 jive在3.0之前都是open source的,无数的java程序员从它那里得益菲浅 没有必要去贬低jive吧 |
24.Re:re [Re: beeke] | Copy to clipboard |
Posted by: rainman Posted on: 2002-12-06 02:36 也没有要贬低Jive的意思,呵呵。 |
25.Re:re [Re: beeke] | Copy to clipboard |
Posted by: SimonLei Posted on: 2002-12-06 08:50 beeke wrote: ?? 此Matt非彼Matt吧? From WebWork: Matt Baldree matt@smallleap.com ICQ: 146428819 smallleap.com From Jive: Matt Tucker CTO Matt Tucker was a software engineer at 4charity, a San Francisco based software and services company for the non-profit sector, before co-founding Jive Software. Prior to 4charity, Matt designed and developed a multi-tier bug tracking tool for Sun Microsystems's Swing Team. He has been an active contributor to Open Source server-side Javatm software, and in 1999, he co-founded CoolServlets.com, a leading Open Source server-side Javatm website. He also won First Place and Commended Prize in the '98 ACM/IBM Quest for Java contest, and the John Deere and Cargill computer science scholarships. Matt leads core product development at Jive Software. He holds a BS in Computer Science from the University of Iowa and lives with his wife and computer in New Jersey. |
26.Re:jive都把包名改成自己的了,不知道有没有违反人家的协议 [Re: SimonLei] | Copy to clipboard |
Posted by: snowbug Posted on: 2002-12-18 14:40 SimonLei wrote: 我记得 Apache License 要求如果更改 open source 的原码,更改的部分必须也是 open source 的。所以应该是违反了 license 的说。 (不过要回去查查看是不是这样,偶也有些不确定了) |
27.Re:jive都把包名改成自己的了,不知道有没有违反人家的协议 [Re: snowbug] | Copy to clipboard |
Posted by: SimonLei Posted on: 2002-12-18 15:44 snowbug wrote: 你说的是LGPL,而Apache License更宽松些。 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |