Struts2与Struts1.x的深度比较[Java编程]
本文“Struts2与Struts1.x的深度比较[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Struts作为MVC 2的Web框架,自推出以来不断遭到开辟者的追捧,得到遍及的利用.作为最成功的Web框架,Struts自然拥有众多的长处:MVC 2模子的利用、功效齐备的标签库(Tag Library)、开放源代码.
但是,正所谓“没有最好,只有更好”,Struts1.x自身也有不少的缺陷:需求编写的代码过量,简单惹起“类爆炸”、单元测试艰难.这些缺陷随着Web的发展越来越明显.这就促生了Struts 2,它的诞生能很好的办理上述问题.
在本文中,笔者将对Struts2和Struts1.x这两种框架举行具体的对比.对比将触及到这两种框架的Action、考证、范例转换及若何开辟等方面的内容.但愿通过这样的对比,让读者理解这两种框架各自的特点,以便于在自己的项目中,按照实际情形,尽快的过渡到Struts2的时代.本文的内容基于Struts2.0.6.
1、引言
Struts的第一个版本是在2001年5月份公布的.它的最初假想是通过结合JSP和Servlet,使Web利用的视图和业务/利用逻辑得以清楚地别脱离来.在Struts之前,最常见的做法是在JSP中加入业务和利用逻辑,大概在Servlet中通过println()来生成视图.
自从第一版公布以来,Struts实际上已成为业界公认的Web利用尺度.它的炙手可热也为自己带来了改良和变更,所以不但要跟上对Web利用框架不断改变的需求,并且要与日渐增添竞争激烈的众多框架的特点相交融.
到最后,产生了几个下一代Struts的办理筹划.此中两个最受注目的筹划是Shale和Struts Ti.Shale是一个基于构件的框架,并在近来成为Apache的顶级项目.而Struts Ti则是在Struts的成功经验底子上持续保持对前端掌握器(Front Controller)和MVC(model-view-controller)情势举行改良.
WebWork项目是在2002年3月公布的,它对Struts式框架举行了革命性改良,引进了不少新的思惟、概念和功效,但和原Struts代码并不兼容.WebWork是一个成熟的框架,经过了好几次庞大的改良与公布.
在2005年12月,WebWork与Struts Ti公布归并.与此同时,Struts Ti改名为Struts Action Framework 2.0,成为Struts真正的担当者.
最后要注意的是,并非说Struts或WebWork项目已经终止开辟了.由于人们对这两个项目的爱好仍旧很高,并且也有很多开辟者仍旧乐意利用它们,因此这两个项目还在持续开辟中,持续修复Bug,改良功效和持续增添新功效.
2、Action的辨别
关于有着丰富的Struts1.x开辟经验的朋友来说,都非常的清楚Action是整个Struts框架的核心内容,当然Struts2也不例外.不过,Struts1.x与Struts2的Action模子很大的辨别.
Struts2和Struts1.x的差别,最明显的就是Struts2是一个pull-MVC架构.这是什么意思呢?从开辟者角度看,就是说需求显示给用户的数据可以直接从Action中获得,而不像Struts1.x那样,必须把呼应的Bean存到Page、Request大概Session中才能获得.Struts1.x 必须担当org.apache.struts.action.Action大概其子类,表单数据封装在FormBean中.Struts 2无须担当任何范例或实现任何接口,表单数据包含在Action中,通过Getter和Setter获得(以下面的ActionForStruts2的代码示例).
固然,在理论上Struts2的Action无须实现任何接口大概是担当任何的类,但是,在实际编程历程中,为了越发便利的实现Action,大大都情形下城市担当com.opensymphony.xwork2.ActionSupport类,并且重载(Override)此类里的String execute()办法.以下所示:
package ActionDiffer;
import java.text.DateFormat;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class ActionForStruts2 extends ActionSupport ...{
private String message;
public String getMessage() ...{
return message;
}
@Override
public String execute() ...{
message = " This is hello from strtuts2. Now is: " + DateFormat.getInstance().format( new Date());
return SUCCESS;
}
}
首先,从ActionForStruts2可以看出,返回的对象不是ActionForward,而是String.假如你不喜好以字符串的情势呈目前你的代码中,有个Helper接口Action可以以常量方法供应常见后果,如“success”、“none”、“error”、“input”和“login”.
别的,按照惯例,在Struts1.x中只有“execute”办法能调用Action, 但在Struts2中并非必要,任何声明为public String methodName() 办法,都能通过配置来调用Action.
最后,和Struts1.x最大的革命性的差别是,Struts2处理Action历程中调用的办法(“execute”办法)是不带参数的.那若何获得所需求的对象呢?答案是利用IoC(反转掌握,Inversion of Control),也叫“依靠注入(Dependency Injection)”的情势(想更多地理解这方面信息请看Martin Fowler的文章http://www.martinfowler.com/articles/injection.html).Spring框架使得这个情势风行起来,但是Struts2的前身(WebWork)也同时利用上了这个情势.
以上是“Struts2与Struts1.x的深度比较[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |