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/

SmileSmile

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:
晕,开始还以为是jive自己开发的呢,反编译看了一下代码,哼哼,jive都把包名改成自己的了,不知道有没有违反人家的协议。


很遗憾,WebWork采用的是Apache的License,也就是说,它有权修改。虽然这种行为很无耻。
自从Jive不开源之后,我就认为这是个无耻的项目。
AngryAngryAngry

9.Re:jive都把包名改成自己的了,不知道有没有违反人家的协议 [Re: javait] Copy to clipboard
Posted by: SimonLei
Posted on: 2002-12-01 16:18

javait wrote:
应该是违反了,人家的协议是opensource,可没让修改包名!

我想使用WEBWORK 是可以的。但JIVE 的作法缺乏职业操守。

:(:(

javaIT


Apache License允许修改源码。Sad
虽然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里有很多包都是这样的,如jdom,xml parser。不看不知道,一看吓一跳啊。


所以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
的人越来越少了。 Sad

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:
其实Open Source不反对商业化。而反对Close-source
Jive这种做法,实在是让人心寒。

有件事情我觉得很奇怪,Jive做的也不算很好啊。
我访问过不少用Jive做的论坛,感觉也只一般而已。
为什么就这么跑火呢?


呵呵,这就是我做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的一个原因啊,我觉得Jive的设计并不是很好,所以就弄一个Jute出来,省得Java世界里就Jive一个人横行。


Thumbs up
这也是我支持Jute的原因之一。Big Smile

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:
2位你来我往的说了半天,此刻终于说到戏肉上了!

很让人生嫌,2位扁JIVE是否此刻该抬JUTE了呢?戏肉终于初见端睨.....

说的那么热闹,把JUTE放出来给我们下载看看吧,是否阁下也大方的OPEN SOURCE以示与左冷禅(JIVE)的拓跋不群呢?

不过,我等最关心的是,JUTE能否持续开发/升级和维护, 你的算法怎么好,也只能是奇淫技巧!

阁下是否有可持续发展之良策,才是JUTE长青之缘水,我等放胆使用的安心丸!

衷心祝愿,JUTE不是今天你长我短,明日入土为安,放出1.0**版本就从此无下文为好!


偶没有贬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:
都说了WebWork有两个开发者,其中一个是matt
至于matt,就是jive的主要开发者
他把自己的程序打成jivesoft的包不过分吧


?? 此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允许修改源码。Sad
虽然Jive这样做确实很无耻。合法的不一定合理。


我记得 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:
我记得 Apache License 要求如果更改 open source 的原码,更改的部分必须也是 open source 的。所以应该是违反了 license 的说。 (不过要回去查查看是不是这样,偶也有些不确定了)


你说的是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