`
ahuaxuan
  • 浏览: 633336 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

让webwork零配置 第二章(实现)(实例已放出,大家可以下载运行)

阅读更多
/**
*作者:张荣华(ahuaxuan)
*2007-06-25
*转载请注明出处及作者
*/

让webwork零配置 第二章(实例已放出,大家可以下载运行)

又到周末了,平时没有时间,所以我的主要学习时间是放在周末,让大家久等了,上个周末说到webwork2零配置的第一章,很多人积极参与讨论,给出了很多有用的参考意见,在这里先谢谢大家,当然也有其他意见的也能理解,我想原因可能有以下几点:

1毕竟在公司里选择一个web层框架是一个重要重大的决定,很多人都是身不由己,这种经历我想大家都有过。

2正如抛出异常的爱所说,这是一个快餐型社会,很多人都比较喜欢吃快餐(现实生活中也是如此,从肯德鸡和麦当劳的红火的生意就可以看出来了),大家都比较喜欢立刻能看到效果的那种,而不是大篇赋的讲解。

3很多人对web框架没有兴趣,现在有那么多web框架,为什么要选easywebwork呢。

   其实扩展webwork2只不过是闲暇之余的一个消遣,或者说是一个兴趣(每个人都有自己的兴趣),并不是让观者去把它用在项目中(当然如果你乐意那么也可以),而是一种学习的过程,不是学习使用webwork2这个框架,而是学习框架背后所隐藏的思想,不是为了框架而框架,是为了学习而框架,webwork2中包含了很多设计模式,其代码风格等等都是可以学习的,当然我说的学习并不是单纯的模仿,我说的学习是:择其善者而从之,其不善者改之。因为我相信,webwork2的思想绝对在webwork2被实现之前就产生了。在这里我还要举个例子,之前我经常看到有人说struts(1.x系列)的代码如何烂如和糟糕,是这样的吗,绝对不是,我不是替struts辩护什么的,struts的代码没有什么糟糕不糟糕之说,不被大家称道的其实是struts框架背后的思想,正是这种思想导致了struts的不优雅,这才是正真的原因。

在重新考虑之后,我决定主要讲解原理,代码就不讲解了,因为吃大餐比较花时间,所以就改请大家吃快餐了。

附件是扩展后的webwork2的一个例子,在这个例子中,action中的方法都使用了annotation,而xwork.xml中的配置只有那些common的配置,明显改变了很少,而在action中,我们也能够一眼就看出来这个方法将要返回的页面,不需要再去xwork.xml中找了,呵呵。

     首先讲一下这个例子是作什么的,这是一个登陆的简单例子,登陆正确后就到一个编辑页面,登陆失败后回登陆页面并且显示失败信息。

让我们来看看改造后的webwork的配置是如何简单吧,以下是xwork.xml的配置

<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN"
    "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
<xwork>
      <include file="webwork-default.xml"/>
      <package name="default" extends="webwork-default">
        <action name="userAction" class="org.easy.test.action.UserAction"/>
      </package>
</xwork>


是的,一个action只有这么多配置,那么其他的配置去什么地方了呢,其他配置都搬到了action中了,让我们来看一下action中的片断:
@ResultListAnnotation(results = {
			@ResultAnnotation(name="SUCCESS", template="/editUser.htm"),
		    @ResultAnnotation(name="ERROR", template="/editUser.htm")})
	public String editUser(){
		System.out.println(name);
		return SUCCESS;
	}
	
	@ResultListAnnotation(results = {
			@ResultAnnotation(name="SUCCESS", template="/editUser.htm"),
			@ResultAnnotation(name="ERROR", template="/login.htm")})
		public String login(){
		if ("test".equalsIgnoreCase(name) && "test".equalsIgnoreCase(password)) {
			return SUCCESS;
		} else {
			errorMsg = "the name and password are not right!!";
			return ERROR;
		}
	}

就这么简单,和原来的使用基本没有什么区别,不同的就是把result的配置搬到类中,使用了annotation来实现(如果不理解请看第一篇文章),公共的配置放到xwork.xml中,而都有的配置,比如说result的配置就使用annotation来实现,这样有以下几个优点:

1, xwork.xml简化了非常之多,改造后,每个action只需要配置一行代码,假设你的项目中有50个action,那么只需要在xwork.xml加50行这样的配置就可以了,而没有改造之前的话,有多少代码就难以估计了。

2, 每一个action中的方法执行的返回结果都能一幕了然,根本无需再到xwork.xml中找result的定义了,维护起来也更方便了。试想有50个action的项目,然后又分了模块,有不同的xwork.xml,那么你要找到某个action的某个方法所返回的result那是多费力的一件事啊。

环境:

我在开发这个实例的时候使用的tomcat6.0和jdk6.0,而webwork使用的2.2.2的版本。
如果没有看过第一章的话最好也看一下

第一章的地址为:http://ahuaxuan.iteye.com/admin/show/91614

附件中附带扩展webwork2的源代码和可以执行的一个例子程序。

作者:张荣华,未经作者同意不得随意转载!
分享到:
评论
11 楼 lonelyblue 2007-11-01  
ahuaxuan 写道
jindw 写道

不过,感觉annotation也有一个不好的地方,修改一下配置必须从源代码开始。必须从新编译。

这个问题如果是在开发的时候就不是问题了,反而是一个优点,不需要重新加载配置文件,就能修改result。但是在部署之后如果要改动就是一个缺点了,因为必须要重新编译了
jindw 写道

我更倾向于通过他生成xml配置,部署的时候可以适当修改而不必改动源代码。

这个想法不错,开发的时候用annotation,清晰,直观,部署的时候用生成的xml。修改方便

想法确实很棒,开发的时候不用去配置XML,部署的时候生成XML,这样维护也方便。
10 楼 samy_3 2007-11-01  
干脆直接返回哪个模版文件好了:
return "login.ftl";
9 楼 gkm422 2007-09-27  
研究中,谢谢搂猪了,呵呵·~~
8 楼 fireflyc 2007-08-14  
我最近一直在开发一个新的web框架~最初的想法是以正则表示匹配URL,采用annotation做配置。但是现在我放弃了annotation~~因为采用这种方式就失去了配置文件的作用,你更改配置必须重新编译程序,更要命的是你在反射annotation的时候效率执行的效率非常的低~~。你可以试一下~。

还看到有朋友想设计REST风格的框架,和我的想法一样~~我以前也是想采用xwork,但是我后来也是放弃了~~原因也很简单~我如果采用正则表达式匹配URL,那么action里面最好的情况下是有参数的~而不是无参数的。这个我还在摸索中~~~
希望和更多的朋友交流一下~firefireflyc@126.com
7 楼 guocy 2007-07-20  
从礼貌上支持一下楼主,因为是新手,就不在关公面前耍大刀了,希望LZ多听听大家的意见,永远支持你!
6 楼 ahuaxuan 2007-07-03  
jindw 写道

不过,感觉annotation也有一个不好的地方,修改一下配置必须从源代码开始。必须从新编译。

这个问题如果是在开发的时候就不是问题了,反而是一个优点,不需要重新加载配置文件,就能修改result。但是在部署之后如果要改动就是一个缺点了,因为必须要重新编译了
jindw 写道

我更倾向于通过他生成xml配置,部署的时候可以适当修改而不必改动源代码。

这个想法不错,开发的时候用annotation,清晰,直观,部署的时候用生成的xml。修改方便
5 楼 jindw 2007-07-03  
atianchen 写道
不太赞成将转向的页面名称直接通过annotation标识在代码里面,这样做的弊病很多,如果项目很大,action类很多,直接把result标记在代码里维护量也一样少不了
特别是用如果页面部分采用了portal或则工作流驱动的页面生成,
不过各人有各人的用法,
同楼上,支持楼主一把


annotation我没用过,不过以前一直用xdoclet做代码和配置文件的生成,和你的观点相反。
我觉得更具相关性集中定义最大的好处就是维护体来方便,东西查找起来比较方便。同步修改比较方便。

不过,感觉annotation也有一个不好的地方,修改一下配置必须从源代码开始。必须从新编译。
我更倾向于通过他生成xml配置,部署的时候可以适当修改而不必改动源代码。
4 楼 atianchen 2007-07-02  
不太赞成将转向的页面名称直接通过annotation标识在代码里面,这样做的弊病很多,如果项目很大,action类很多,直接把result标记在代码里维护量也一样少不了
特别是用如果页面部分采用了portal或则工作流驱动的页面生成,
不过各人有各人的用法,
同楼上,支持楼主一把
3 楼 jindw 2007-07-02  
ahuaxuan 写道
。。。。
因为下一步我要做的就是基于xwork2.0做一个貌似于rest风格的mvc框架(如果我有时间的话)。另外我很不喜欢struts2.0,这个挂羊头卖狗肉的家伙,它包括了太多东西,很多人都反应它的慢,所以我根本就没有兴趣去学习它了


对于ww转向struts2这件事情,心里真有点不是滋味。
以前也有类似的想法,只是被JSI缠身,所有的事情都被迫放下了,楼主好好干吧,口头上支持一把。
2 楼 ahuaxuan 2007-06-25  
yingqing 写道
http://struts.apache.org/2.x/docs/result-annotation.html
struts2的标准用法

这个是struts2的标准用法吗,之前人们给出的例子都是没有这样用的,所以我才去扩展,不过看来思想都是一样的,只是手段不一样,我之所以去扩展是为了学习和研究xwork,因为下一步我要做的就是基于xwork2.0做一个貌似于rest风格的mvc框架(如果我有时间的话)。另外我很不喜欢struts2.0,这个挂羊头卖狗肉的家伙,它包括了太多东西,很多人都反应它的慢,所以我根本就没有兴趣去学习它了
很多问题第一章已经有过讨论了。
http://ahuaxuan.iteye.com/admin/show/91614

再次声明:本文的主要目的在于学习和研究,关键是你能否提出你的想法
1,提出想法
2,实现想法

1 楼 yingqing 2007-06-25  
http://struts.apache.org/2.x/docs/result-annotation.html
struts2的标准用法

相关推荐

Global site tag (gtag.js) - Google Analytics