首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

让Struts 一焕发青春-小议对Struts的改造

2012-11-20 
让Struts 1焕发青春----小议对Struts的改造.目前流行的新型的MVC框架 几乎都在增强单元测试能力上做了很

让Struts 1焕发青春----小议对Struts的改造.
目前流行的新型的MVC框架 几乎都在"增强单元测试能力"上做了很多文章.
目的就是让 Controller 可以脱离web容器单独进行单元测试.

大多数采用的方法都是使 Controller 中的方法的参数 和 返回值 与 j2ee特有的类(如HttpXXXX)无关.

例如 传入的 是若干个 HashMap ,返回的是纯的字符串.
这样在单元测试的时候,只要new一个Controller,准备一些装有测试数据的Map,
然后执行相关的Controller方法,再然后看看返回值,就可以了.

显然,流行的Struts 1.X (>=1.2) 是不具备这样的特性的.
如果您现在有一个遗留的使用Struts 1.X(>=1.2) 的系统,或者因为人力资源的原因,不能立即引入ww或Struts2.x,
那么如何让您的Action类似的可测性了呢(其实除了可测试性,这样的改进往往也会大大的减少代码的开发量).

下面我就把我的一些心得写出来,和大家一起分享,欢迎大家拍砖.
注意:以下讨论均以改造 DispatchAction 为例(不使用DispatchAction的情况应该比较少吧 呵呵).

先说明一下改造的目的:
简化开发,减少代码量
增强单元测试能力
全面兼容现有DispatchAction(这点很重要)

一个传统的 DispatchAction 代码结构

public static void testAddUser() throws Exception {// 创建一个action对象TestAction test=new TestAction();//准备一些测试数据 放入map里,模仿request的ParametersMap requestParameters=new HashMap();requestParameters.put("userName", "asdqe");requestParameters.put("password", "mghjghj");requestParameters.put("userRole", "1");requestParameters.put("email", "ut_email");requestParameters.put("gender", "1");requestParameters.put("age", "22");// TDServletWrapperFactory.getTestInstance 方法用来取得一个脱离web容器的 TDServletWrapper对象 )Assert.isTrue("Sucess".equals(test.testSubmit1(TDServletWrapperFactory.getTestInstance(requestParameters))) );}


至此全部改造完毕.
这样的改造对于大家来说也许没什么意义,不过多少也是一种尝试.
由于Struts1.X(>=1.2)的 局限性,以及我个人能力的局限性,很多改造还不够彻底 不够合理,
对于前者我无能为力,对于后者,还恳请大家多多指正我的不足 谢谢了先.

上次发了一篇对 spring jdbctemplate的改造,这次又发了一篇对 struts 1 的改造,
(其实我那个ecside 也是对老版extremecomponents的改造)
也许很多人会觉得我太落伍了,这些老掉牙的东西还改造个什么劲儿啊 呵呵
其实,很多时候,对于我来说,改造就是一个智力游戏,在一些现有的东西实现一些自己的新的想法,这样的感觉总是快乐的.

而且,我们的项目就是用的老技术 老东西,在不能换新东西的情况下,努力的挖掘现有东西的剩余价值,也许更具有实际意义.

:D


1 楼 insky 2007-06-25   弱弱问一句,这样做的目的是为了什么?仅仅为了单独进行单元测试?Struts是可以单元测试的啊  引入strutsTest包就可以,功能也都能满足需求啊 2 楼 fins 2007-06-25   减少代码量 其实这个只是一部分
这个是根据我们框架的需求弄的
其实我们框架的dispatch里还做了好多事情呢
3 楼 realreal2000 2007-06-25   这样做对于新入门的人好处是容易上手,但是对于他的成长就不是很好,毕竟这样的参考书,就只有改写的人才有 4 楼 fins 2007-06-25   恩 这也是在这样的公司的一个坏处

我们公司的框架就是 基于 struts spring的
但是使用的开发人员 几乎感觉不到他们的存在
自己写的代码里 很少能引入 struts spring的类

这样做有好处 也有坏处 5 楼 fins 2007-06-25   其实大家也可以把这个看作一个 小实验
没必要去深究它的实际意义 因为也许他只对我们公司 我们部门有意义

这篇帖子写成这样,主要目的也是帮助新手明白了一下struts的dispatchaction的简单原理 呵呵 可以看作struts源码的一种解读

当然 仅限于初学者.
:D 6 楼 i_love_sc 2007-06-26   很不错。感谢楼主。 7 楼 王牌海盗 2007-07-06   不错,学习了。能让初学者深入理解struts的原理。 8 楼 sam1982 2007-08-22   呵呵.我这阵子在帮公司改造一个项目,struts层的设计跟你类似.呵呵.我一直就觉得action的参数太分散了,就应该当做一个对象来对待. 9 楼 downpour 2007-08-22   意义不如在Struts1中引入OGNL设值来的大。 10 楼 williamy 2007-09-04   粗看题目,很感兴趣,因为在下的框架就是struts1.2.4上修改的,不过本来就可以测试阿,能说明一下你的出发点不? 11 楼 bluemeteor 2007-09-04   Fins为啥不直接用ww2或者struts2?
12 楼 flash 2007-09-05   bluemeteor 写道Fins为啥不直接用ww2或者struts2?

看贴不认真,口头批评一下。 13 楼 yyjn12 2007-09-05   bluemeteor 写道Fins为啥不直接用ww2或者struts2?


为什么要用struts2?
struts2还真的很好吗?它还会像struts1一样,火热流行起来吗?

说什么,都是假的,拭目以待吧~

现在java真的是缺少一个足够优秀的web mvc框架.

曾经最辉煌过的struts1.x,只不过是机遇好,以至于长期以来压过了相对更优秀的webwork.

不管怎么说struts1.x还辉煌过.

看不出struts2有什么前景. 14 楼 ruderal 2007-09-26   传说中的Struts2不就是另一个版本的WebWork么?

既然你觉得WebWork相对更优秀,那前景就相对更光明咯..哈... 15 楼 williamy 2007-09-26   MVC能怎么样?搞不出什么花样的!
自己随便写个都比它好用,
要不是因为它名气大,我还不用它呢 16 楼 anxingyu_1984 2007-09-26   有必要借鉴struts2 17 楼 leeking 2007-09-27   挺麻烦啊看起来. 18 楼 supttkl 2008-04-14   如Struts不是用form验证,和validate验证。那么form就是冗余的!
form.getUser();=request.getParemeter("user");
那么可以封装一个DynaForm来简单的封装下request
public class DynaForm{
private HttpServletRequest request;
  public DynaForm(HttpServletRequest request){
this.request=request;
}
public getString(String name){
return request.getParemeter(name);
}
getInt
getDate
.......

} 19 楼 spiritfrog 2008-06-08   现在看起来fins的这篇struts1的改造还是颇有意义的:
丢弃了requset和response,form, action变得能够摆脱web容器被单元测试

谢谢了,对我的启发和帮助都很大。 20 楼 heimu 2008-06-08   两年前还没2的时候做过相似的事情,直接重写处理分发请求的TilesRequestProcessor

热点排行