论坛首页 入门技术论坛

已经会struts1.x了为何还要学习struts2呢

浏览 14792 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-12-22   最后修改:2010-01-11

一、首先,一个新版本的程序是为了解决老版本的一些bug而出世.一名话:没有最后的程序,只有更好的程序.这样的程序才会发展,而不会被淘汰出局. struts框架也是一样的. 我想,可能是struts1.x升级的过程中出现了瓶颈,有一些存在的问题很难得到解决,在这个时候,他们发现WebWork框架的总体设计思想非常好,并且他们发现,使用WebWork框架的思想正好可以很容易地解决struts1.x存在的问题.由于WebWork在推广方面做得不够好,于是两个社区决定把WebWork框架与struts1.x框架合并,简称为struts2.之所以struts2与struts1.x的区别比较大,就是因为struts2大部分的实现都是依靠WebWork框架里面的东西的.

 

 

二、struts2框架的优点及解决strus1.x存在的问题.

     2.1、在程序设计思想上看Struts2.

            Struts2并没有像struts1那样跟Servlet API和struts API有着紧密的耦合,在没有Struts2之前,基于struts1.x框架来解决这个问题几乎是不太可能的,我们都知道,在struts1.x里编写一个简单的Action类,是一定继承一个struts1.x 提供的类的(如继承Action类或DispatchAction类),这样就完全与struts API耦合在一起(可能在struts1.x当初开始设计的时候并没有考虑到这个问题,因此问题一直延续下去,问题存在得越久,发现得越晚,当要解决的时候就会越难.最后导致struts1.x出现瓶颈),如下就struts1.x定义的一个Action类:

public class UserLogonAction extends Action {
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		return mapping.findForward("success");
	}
}

    注意:可以看到UserLogonAction 同时跟Servlet API和struts API有着紧密的耦合关系.

 

        而Struts2的出现已经很好地解决了这个问题,一个简单的Action类如下:

public class UserLogonAction {
	public String execute(){
		return "success";
	}
}

    提示:可以看到,在struts2里定义一个Action类,其实就是一个简单POJO类,非常干净,没有半点Servlet API和struts API的影子.这是我们程序追求的一种思想:低耦合或松耦合设计模式.

 

   2.2、struts2很好地利用了AOP编程模式(即面向切面编程,在Spring框架也提供了这种编程模式),我们可以利用拦截器进行AOP编程,它不仅可以拦截指向的Action,还可以拦截指定Action内的某些方法(更加地细粒度)。其次,struts2里的很多功能都是通过struts2拦截器(Interceptor)来实现的.  Struts2的拦截器跟struts1.x的过滤的设计非常相似,但struts2拦截器要比其更为强大,它可以说是struts2的核心.(具体用法不在这里细说,想学struts2的程序员们可以参看我写的struts2两天快速入门教程)

 

   2.3、struts2也提供了类似struts1.x的类型转换器,但在struts1.x中,如果我们要实现同样的功能,就必须向struts1.x的底层实现BeanUtil注册类型转换器才行,实现起来较麻烦. struts2的类型转换器不仅编写简单,而且还提供节双向类型转换功能.

   

    2.4 、struts2提供支持多种表现层技术,如:JSP、freeMarker、Velocity、stream等.

   

    2.5 、struts2的输入校验可以对指定方法进行校验(更加的细粒度)。

   

    2.6、 提供了全局范围、包范围和Action范围的国际化资源文件的配置,这是一种模块化的思想. 

 

    2.7、Struts2是线程安全的.当请求转入Struts 2框架处理时会先经过一系列的拦截器,然后再到Action。与Struts1不同的是,Struts2对用户的每一次请求都会创建一个Action,所以Struts2中的Action是线程安全的.也正因为如此,Struts2的Action可以有自己的成员变量。同时拥有了Struts1.x的Form Bean的功能.Form Bean的存在在业界里有一些争议,认为Form Bean是一个很多余的角色,跟java实体类有些重复.因此在Struts2里,已经废弃了.

     其他细节上的区别,唯有大家使用过后才会有所体会.

 

三、总体来说,struts2可以提高开发效率,开发效率的提高必须使得公司总体收益增加.公司总体收益增加,老板就开心,老板开心,作为程序员的我们当然也就开心,说不定老板一开心,就会给你加薪.哈哈

 

 

   发表时间:2009-12-23  
说的很好,但是有时候并不是想用谁就用谁啊,得跟着项目走!
0 请登录后投票
   发表时间:2009-12-23  
帅哥,我等你好久了
0 请登录后投票
   发表时间:2009-12-23  
不过目前MVC的框架struts1.x还是占绝大部分.
0 请登录后投票
   发表时间:2009-12-23  
为了不失业
1 请登录后投票
   发表时间:2009-12-23  
为了拯救地球
0 请登录后投票
   发表时间:2009-12-23  
无论strut1或struts2等其他的mvc都有一个共同的瓶颈------http
从http获得的信息都是键值对,值的类型是无从得知的(除非多传参数,这样增大的网络负担)。
看看pojo是怎么获得的吧。

struts1是actionform  在action中得自己强制转换

struts2是pojo担当action与form,但还是少不了set get (用模型驱动的话就有侵入性了)

都是不过优雅!!!

以前robbin说是要写讨伐servlet的文章,期待中。
0 请登录后投票
   发表时间:2009-12-23  
还是JSF的MVC好一点.
0 请登录后投票
   发表时间:2009-12-23  
技术不断更新的一个好处就是可以让企业觉得他们的系统还需要一直做下去:)
0 请登录后投票
   发表时间:2009-12-23  
我觉得webwork和struts1差别并不算太大

webwork无疑更先进强大,如果学会struts1再学webwork难度不高的。

不过ognl的语法还是让人稍微挠头些
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics