阅读:36398次   评论:21条   更新时间:2011-06-01    
明晰了Struts2的学习途径,我们需要一些参考资料来进行学习。Struts2来源于Webwork2,所以绝大多数原本Webwork2的优秀学习资料,都非常值得我们去学习阅读。在这里,我来简单小节一下当前市面上的Struts2的学习资料。

Javaeye上对于moxie教程的补充和讨论 ———— 推荐指数: 4颗星 Top

在04年以后,Javaeye一度曾经热火朝天的进行Webwork/XWork的宣传,事实也证明了Robbin的眼光,Webwork2与Struts合并成为Struts2,以Webwork2为基础,并且逐渐发展为Web层最重要的开发框架之一。

在这个过程中,Javaeye上涌现出一批非常好的帖子,包括moxie, Quake Wang, Tin等同学都贡献了极佳的文章,我在这里简单推荐几篇值得一读的文章:

[moxie] WebWork2多模块解决方法:http://www.iteye.com/topic/6529

[moxie] 在WebWork2 Action中如何自动设置Array、List、Map:http://www.iteye.com/topic/8770

[Tin] webwork 2.2 中如何给Collection赋值:http://www.iteye.com/topic/17939

[zhuam] WebWork2.x源码分析:http://www.iteye.com/topic/10347

[moxie] 纠正WebWork2的Model-driven(模型驱动)Action:http://www.iteye.com/topic/12505

[Quake Wang] 对于moxie的《WebWork教程》补充 - [文件上传]:http://www.iteye.com/topic/10697

[Quake Wang] 对于moxie的"WebWork教程"补充 - [类型转化]: http://www.iteye.com/topic/10507

[曹晓钢] webwork2 action和Spring结合的两种方式:http://www.iteye.com/post/44853


针对这些文章,大家最好是带着问题去读,把这些文章当作是专题、最佳实践来读,而不是当作真正的文档来读,这样效果是最好的。当然,这里绝大多数文章是Webwork2的,大家完全可以忽略这个名词,把它当作Struts2来读,并吸取其中的精华部分。

Javaeye在Webwork2和Struts2方面的贡献远远不止我上述列出的这些文章。还有无数的革命先辈曾经贡献过非常好的文章,在这里就不一一列举了,大家可以根据需要,使用论坛的搜索功能。

moxie同学的作品:《最新的Webwork教程》 ———— 推荐指数:5颗星 Top

moxie同学是国内比较早研究Webwork的人,并且在当时Webwork资料缺乏的情况下,他贡献了这篇难能可贵的入门级教程。这份文档的错误很少,对于Webwork核心的概念的理解准确到位,是入门者学习Webwork或Strus2的极佳读物。

这个是他在Javaeye上的原帖地址:http://www.iteye.com/post/29205

可惜的是他所贴出的地址已经无法访问,我会尽快找出这份原始资料并上传成附件供大家参考的。

Struts2自带的reference和sample ———— 推荐指数:5颗星 Top

Struts2自带的reference和sample在Struts2的发行包中间都有包含,请大家各自参阅即可。

Struts2的reference基本上是wiki形式的,每个小专题的篇幅不长,但是讲解非常到位,也非常易读。而其中所举例的代码也比较贴近实际,应该能够说明绝大多数问题。

我这里另外想提一下的是Struts2官方网站上另外一个挺有价值的链接:http://cwiki.apache.org/S2PLUGINS/home.html

这个链接列出了目前Struts2的一些plugin。当然,如果你有兴趣,也可以自己写plugin,并到官网上去announce一把。Struts2的很多特性,有了plugin的支持,会变得更加优秀。大家可以顺着这个链接去扫一遍所有的plugin,看看他们到底是干嘛的,或许你会有非常意外的收获。

夏昕同学的开源文档:《Webwork2 开发指南》 ———— 推荐指数: 3颗星 Top

《Webwork2 开发指南》的下载地址为:http://wiki.redsaga.com/confluence/display/RSTEAM/Home

夏昕同学的开源文档系列曾经一度伴随早期的开源框架学习者读过枯燥的学习生涯。不过相比其他两本开发指南,这本书的质量我认为着实一般。所以大家可以有选择性的阅读。针对其中的某些作者的观点,也不必奉若神灵。

网友Max贡献的系列教程 ———— 推荐指数: 3颗星 Top

系列教程的地址:http://www.blogjava.net/max/category/16130.html

我看论坛上有不少人是看着这个教程入门的:

ray_linn 写道
我觉得你也不用全写了, Max的那几篇struts 2.0真的写得相当不错,做点适当的补充就成了。

http://www.blogjava.net/max/category/16130.html


这个教程我事先没有读过,见到网友列出了链接,我也就顺便去看了一下整个系列的文章。应该说Max同学非常认真努力的在试图完成这整个系列的文章,并且也针对Struts2的方方面面做了一些分类讲解。不过我对这个系列文章的看法是:可以通过扫读的方式阅读,针对里面的示例代码,就不用去尝试了,而某些观点,也不要深究了。因为其中的某些代码是存在问题的,也不是很贴近实际,其中的讲解也存在着不小的问题。

在这里我简单列举几处非常明显而不该犯的错误:

我们首先来看看其第一篇文章:http://www.blogjava.net/max/archive/2006/10/10/74353.html。其中写到有关Struts2的Action的测试的代码:

package tutorial;

import static org.junit.Assert.assertTrue;

import org.junit.Test;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldTest {

    @Test
    public void testExecute() {
        HelloWorld hello = new HelloWorld();
        hello.setName("World");
        String result = hello.execute();
        
        assertTrue("Expected a success result!", ActionSupport.SUCCESS.equals(result));
        
        final String msg = "Hello, World!";
        assertTrue("Expected the default message!", msg.equals(hello.getName()));
    }

}


对此,我深表遗憾。也请广大读者不要被这样的代码所误导。Struts2的Action的正确的测试方式,请参考:

http://struts.apache.org/2.0.14/docs/guides.html <---  官网文档首页中对测试Action的链接

http://fassisrosa.blogspot.com/2006/11/unit-testing-struts-20.html   <---  官网文档中讲述测试Action所引用的链接

我们再来看看Max同学对Struts2中非常核心的功能Interceptor的讲解:http://www.blogjava.net/max/archive/2006/12/06/85925.html

抛开示例不谈,从他给出的这幅图来看,至少还缺少了拦截器中的重要定义:PreResultListener。同时,由于没有结合源码进行讲解,事实上他也无法表示出它时序图中Interceptor的真正实现机制,至少无法准确指出before,after,以及preResultListener这样的程序插入点在拦截器中的调用顺序。有一定Struts2拦截器知识的人都知道,Struts2中的拦截器的核心是沿着拦截器链的一串拦截器的递归调用。正因为有着这一串的递归调用,才使得before,after,以及preResultListener这样的程序插入点能够按照规则有序执行。

如果我们同样参考一下Struts2官方的reference对拦截器的讲述呢:http://struts.apache.org/2.0.14/docs/interceptors.html

大家可以看到,在官方讲解的最后,用了一个简单的示例清晰地说明Action与拦截器的调用顺序和执行关系。大家完全可以进行一下比较,到底是那边的讲解更能让你明白一些。


再来看看Max同学在国际化章节上的答疑:http://www.blogjava.net/max/archive/2006/11/01/78536.html

max 写道
可能大家会问为什么一定要通过Action来访问页面呢?
你可以试一下不用Action而直接用JSP的地址来访问页面,结果会是无论你在下拉列表中选择什么,语言都不会改变。这表示不能正常运行的。其原因为如果直接使用JSP访问页面,Struts 2.0在web.xml的配置的过滤器(Filter)就不会工作,所以拦截器链也不会工作。


这就更加让人有点摸不着头脑了,"直接使用JSP访问页面,Struts 2.0在web.xml的配置的过滤器(Filter)就不会工作",你的web.xml不是配置的匹配/*作为你的Filter的响应URL规则嘛?为什么Filter会不工作?这里不免有点答非所问了。


可能文章中还有一些其他的问题,我就不一一指出了。对于这样的网络教程,我的态度是你可以读,但是需要精读,并且需要足够的思考来辨别真伪,否则,可能会被之忽悠。

以《Struts2权威指南》为首的有价书籍 ———— 推荐指数: 负 Top

这类书籍我的推荐指数为负数的最重要的理由在于,这些书籍都很贵。我首先不去评论这些书写得好坏,单就这价钱,我认为大家还是省下这些钱捐助希望工程吧。因为事实上,网络上已经有足够的教学资料和教学文章,我们不必舍近求远,还搭上人民币。

这类书籍的其他问题,我在《Struts2的学习途径》中已经阐述,在这里我就不再一一列举了。
评论 共 21 条 请登录后发表评论
21 楼 东风不来 2014-05-22 14:40
今天刚看到这样的文章,很受用!
20 楼 429537044 2012-10-09 17:31
你好,能不能推荐一下struts2中文版的书籍  ,如果有请把书籍或者书籍名称发我邮箱429527044@qq.com 多谢!
19 楼 xw_gongchengshi 2011-07-07 15:58
写得好,3Q.
18 楼 wenjinglian 2011-05-14 21:08
学习

我们首先来看看其第一篇文章:http://www.blogjava.net/max/archive/2006/10/10/74353.html。其中写到有关Struts2的Action的测试的代码:
这个测试是没有问题的,和官方的helloword差不多:
http://struts.apache.org/2.0.14/docs/hello-world.html
17 楼 ottoliu 2011-04-14 11:44
我一般都不留言 但是你的见解 我觉得确实对现在的我有帮助 3Q
16 楼 ouyangcamel 2011-01-03 23:36
拜读了,3Q
15 楼 yutianc 2010-09-27 15:32
14 楼 maxiaoboyu 2010-09-26 17:38
支持 写的很好
13 楼 zhaoxin1943 2010-09-15 17:41
严重支持,写的太精辟了
12 楼 heyue516 2010-08-04 15:25
这不支持,支持谁咧。。。。。。。。。。。???
11 楼 TenAclock 2010-07-26 09:22
  
10 楼 yangwuming 2010-05-22 11:55
9 楼 libinsoft 2010-01-05 21:07
8 楼 金家寶 2010-01-04 15:31
官方的文档是一手的资料这个我比较赞同。
7 楼 horseroad 2009-12-12 14:43
                 
我真是没的说
6 楼 86asm 2009-10-10 17:46
不错啊 强力支持啊
5 楼 aegoose 2009-07-25 15:27
  
4 楼 Wasangel 2009-04-20 16:59
  
3 楼 hoohbood 2009-03-09 09:24
作者不容易的,我来支持作者来了
2 楼 downpour 2008-12-19 14:33
kyo100900 写道

downpour会对struts2的单元测试也写一篇文章吗?


应该会涉及,不过应该是和reference上的差不多。

struts2的单元测试按照我的理解,会包括对action和interceptor的测试。针对action的测试reference上已经有讲到,针对interceptor的测试我也没有经验,不过我会找一些struts2的资深使用人事探讨一下interceptor的单元测试怎么做。
1 楼 kyo100900 2008-12-19 13:06
downpour会对struts2的单元测试也写一篇文章吗?

发表评论

您还没有登录,请您登录后再发表评论

文章信息

  • downpour在2008-12-18创建
  • downpour在2011-06-01更新
  • 标签: struts2 文档 学习资料
Global site tag (gtag.js) - Google Analytics