一、首先,一个新版本的程序是为了解决老版本的一些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");
- }
- }
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";
- }
- }
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可以提高开发效率,开发效率的提高必须使得公司总体收益增加.公司总体收益增加,老板就开心,老板开心,作为程序员的我们当然也就开心,说不定老板一开心,就会给你加薪.哈哈
分享到:
相关推荐
Struts1.x常用的开发包,需要学习struts1.x朋友可以下载
struts1.x和struts2.x区别
Struts 2.x权威指南(第3版)
在这里,通过一个小例子稍微总结了下struts1和struts2的区别,希望这个能帮助到初学struts的朋友
Struts1.x-Jdbc,学习Struts1.的曾删改查
freemarker与struts 1.x 结合,生成html 在http://blog.csdn.net/chen1255 的web中有详细描述关于freemarker与struts1.x的结合
java Struts 1.x 框架 Web 开发 java Struts 1.x 框架 Web 开发
struts1.x入门教程
Struts1.x的登录示例,Struts1.x相关详细教程参考我的Blog:http://blog.csdn.net/boyazuo
struts1.x 学习总结 struts1.x 学习总结 struts1.x 学习总结 struts1.x 学习总结
struts1.x多文件上传, 感觉不错.
struts1 国际化 源代码 struts1 国际化 工程
struts1.x apps 所有最新的Struts1.x项目应用 struts1.x apps 所有最新的Struts1.x项目应用 欢迎大家下载。。。
这是struts1.x标签! struts1.x是历经考验的成熟的框架! 此标签可以帮助你更好的学习struts1.x的标签!
适用于Struts1.x初学者(网摘共25节)
struts1.x入门.pdf ,感觉写得还不错
struts2.x jar 全部的lib jar 包
学习魔乐科技Struts2.x视频框架的学习笔记,在这里给各位参考一下,要mldn其他框架笔记的请关注我,后续会推出
Struts2.x 项目实战 Struts2.x 项目实战 Struts2.x 项目实战