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

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

 
阅读更多

一、首先,一个新版本的程序是为了解决老版本的一些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可以提高开发效率,开发效率的提高必须使得公司总体收益增加.公司总体收益增加,老板就开心,老板开心,作为程序员的我们当然也就开心,说不定老板一开心,就会给你加薪.哈哈

 

 

分享到:
评论
33 楼 w0ei2010 2010-01-04  
我只会Struts1看来还是要看看struts2才行啊。。。。
32 楼 半边云 2009-12-31  
软件行业之所以发展这么快,就不在不断的更新啊,苦的是学员们啊,还有学校,学的太慢,但行业发展的太宽,究其实就是一个教育问题了啊
31 楼 kuchaguangjie 2009-12-25  
无聊...
你买了 奔腾 为何要换 酷睿
30 楼 donglangjohn 2009-12-25  
name=donglangjohn&password=1111111&x=0&y=0


在Live HTTP headers 里截取的 Content 部分


现在servlet都是用于http的,getPara 不都是为了这些参数么?!

各种框架的action里都变相的用pojo来接受这些值,尽力的拼成pojo给action来用的吧

因此产生了一些特殊的pojo(Struts2的pojo就action,struts1有actionform)

都是变相的胁迫你按照他们的要求写action,struts2要好一点,易于测试。
29 楼 JArcher 2009-12-25  
工具而已,解决问题是关键。。。
ps..spring mvc(2.5版采用annotation配置的)..不错。。开发效率来说,比struts1好
28 楼 bluethink 2009-12-25  
很喜欢Struts2,比Struts1好多了
27 楼 KimHo 2009-12-24  
写得很好,看来作者对mvc理解比较透彻啊
26 楼 mysyche 2009-12-24  
协议归协议,框架归框架!

struts2 确实比struts1 好用,这是实事。如果不好,相信只会有struts 也不会有1和2 之分了。
25 楼 javagui 2009-12-24  
http读取参数都是靠键-值对?看来是web开发太久了... ...
24 楼 berlou 2009-12-24  
Spring MVC确实已经满足了很多需求。
现在国内很多公司还是拥抱Struts 1.x很大程度上是因为客户还在用JDK1.4吧?
尤其用IBM产品的客户。
还有, 建议关注Seam Framework, JSF + Seam在Java web这块我是非常看好的。

还有Struts线程安全问题, 拜托不要再拿来说事了, 因为即使是Struts 1.x, 与Spring结合后, 通过Spring托管也可以是prototype的, 而不是singleton。
23 楼 todn211 2009-12-24  
哥支持你的观点!
22 楼 alkj 2009-12-24  
晕倒!我在上一个公司和现在的公司都用了快三年Struts2了啊!这个好象不是新鲜的东西了吧?不过我个人倒是建议在使用Spring的项目中抛弃任何的第三方MVC框架,因为Spring MVC更加灵活,且与Spring浑然天成哦!哈!
21 楼 elvea 2009-12-24  
线程安全和非线程安全有那么大区别吗?我倒觉得没有。只是局部变量和成员变量的问题
20 楼 cs207 2009-12-24  
2.7、Struts2是线程安全的.当请求转入Struts 2框架处理时会先经过一系列的拦截器,然后再到Action。与Struts1不同的是,Struts2对用户的每一次请求都会创建一个Action,所以Struts2中的Action是线程安全的.也正因为如此,Struts2的Action可以有自己的成员变量。同时拥有了Struts1.x的Form Bean的功能.Form Bean的存在在业界里有一些争议,认为Form Bean是一个很多余的角色,跟java实体类有些重复.因此在Struts2里,已经废弃了.
------------------ 我最关心的问题----线程。。 得去研究研究
19 楼 mwmw 2009-12-24  
工具而已!
18 楼 76052186 2009-12-24  
tapestry 5.1更好用,谁用谁知道。
17 楼 donglangjohn 2009-12-24  
" 通过拦截器为每个action创建不同的生命周期 "

这个带来什么好处呢,目前本人还不太明确。

能联想到 cache 堆栈   但具体的呢?   疑惑中
16 楼 habzyhs 2009-12-24  
第三点说出了真理。。。

不过现在我这个企业还在用1.X的,因为以前一直做的是1.x的系统。然后现在想改为2.x的话比较麻烦,耗费比较大。。。

一直期待那天老总说,换struts2吧。。嘻嘻
15 楼 bigkai13 2009-12-23  
任何框架都只是个工具~~
14 楼 Angel_Night 2009-12-23  
struts优势很多

封装请求参数

OGNL

传值到试图的ValueStack

以及通过拦截器为每个action创建不同的生命周期

相关推荐

Global site tag (gtag.js) - Google Analytics