关于struts2

表现层框架我最熟悉的是struts1,而且是和jdon结合使用的,最近在看struts2,不明白为什么它要引入package,extends,namespace,这三个元素真的很有用吗?很有用为什么其他的表现层框架没有类似的做法。

BTW:向大家推荐一个表现层框架 :vraptor,个人非常喜欢,使用picocontainer自动装配,使用起来有seam的感觉.

struts2我没有去学,因为以前学过webwork,也看了xwork的代码,我说下我基于webwork的理解。
那个package主要就是为了让我们可以模块化配置action,package可以基础父package,这样在子package里就有可以使用父package的配置,至于那个namespace,主要是在访问的url上作用。要想访问指定命名空间里的action,在url上要加上相应的namespace.

对于模块化,strut1的做法就已经够用了,比如jivejdon的模块化Action:
struts-config-admin.xml
struts-config-forum.xml
struts-config-message.xml
struts-config-security.xml

总觉得extends,nmaespace是额外增加了复杂性,真的很有必要吗?
不过表现层框架也引入拦截器我个人非常喜欢!!
[该贴被oojdon于2008-12-20 09:23修改过]

呵呵,拦截器确实我也喜欢,还有表达式语言ONGL的引入,使得表单和模型之间赋值绑定以及类型转换都比较好。有点不好的地方就是每次请求都产生一个Action对象,不过目前JVM优化了GC算法,这样还减轻性能损失,不过每次请求一个Action的好处就是Action可以不考虑线程安全性,struts1的Action是单例的,所以还要考虑线程安全性呵呵,总之有得必有失吧。

>>struts1的Action是单例的,所以还要考虑线程安全性
听说struts1的action还是池化了的,注意把它搞成无状态就行了,线程这个东西我不太敢碰,需要时间,现在我确定我玩不转!

[该贴被oojdon于2008-12-20 13:13修改过]

线程 是一个成熟的应用系统中无法避免的概念,所以在这一点上一定需要理解,不然只能将能力局限在很小的范围内了。

structs我不熟悉,仅发表一些个人的理解。package,extends,namespace这样的概念基本上是成熟的开发语言所必需具备的特性,具有了这些才能够建立比较大型的模型结构,如果structs在此方面进行了扩展那么说明他不再只是期望用于简单的UI开发了,他希望成为一套更高级、可以建成更大规模系统的开发平台。

>>package,extends,namespace这样的概念基本上是成熟的开发语言所必需具备的特性
很关键,但是这是程序设计语言的特性,和框架无关,框架为什么要额外引入?难道struts2的定位就是代码巨量的大型项目?呵呵。
不知道banq大大的意见是什么,J2EE开发代码很多的时候是否需要框架支持package,extends,namespace?

其实我现在不知道package,extends,namespace在struts2中怎么用,看过别人的代码,头大!
[该贴被oojdon于2008-12-20 13:09修改过]


<package name="xxx" extends="simple" namespace="/xyx/abc">
<action name=
"xxxList"
class=
"com.xxx.yyy.XXXListAction">
<result name=
"input">/xxxList.jsp</result>
<result name=
"page">/xxxList.jsp</result>
</action>
</package>

这个已经包含了您需要了解的package、namespace、extends等元素。
这里面我惟一觉得不必要或者说是做得不太好的是package元素,我为什么不能让action直接继承并加上命名空间呢?好吧,package可以实现模块管理,但是一套良性命名方案比这个更好,也方便零配置(或接近零配置)。
namespace是给url访问的,/App/xyx/abc/xxxList就能访问XXXListAction的默认execute方法。
用/App/xyx/abc/xxxList!methodName.action可访问methodName方法,这些方法要有返回值,类型是String,对应了result 中的name属性。可用正则表达式减少配置,因为我们以前改造了struts2生成了适合自己的框架,结果是现在不能升级struts2版本,我们做的改动太大了,包括json之类的都有,google好像也有一个,当时我们没发现那个,也可能我们的比那个更早期。
其实struts2从出来到现在我们感觉没有什么太大变化,我们没有用过新版本的新功能(当然是我们的改造使这成为不可能,不知别人用没用过新功能),既然只有原先的那部分基本功能就能满足我的要求了,我为什么要拿出来那么多不必要的东西呢?有人喜欢拦截器,我们不需要(指自定义),ONGL是挺好的,但是el也很不错,加上json更能满足我们的需要了。
我们现在在用的是jsp+el+js,因为有良好的外观,我们只要include一个公用jsp就行了,省去了配置和action,简直轻松极了,用了框架怎么省呢?不是省配置就是省action类,能两个都省了吗?尤其是这些个action的功能还有点小差异的时候。

可以参考一下这篇文章 http://www.javaeye.com/topic/6529