有了struts1为何还要学struts2
来源:互联网 发布:数据库概论第四版答案 编辑:程序博客网 时间:2024/05/03 16:28
一、 首先,一个新版本的程序是为了解决老版本的一些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可以提高开发效率,开发效率的提高必须使得公司总体收益增加.公司总体收益增加,老板就开心,老板开心,作为程序员的我们当然也就开心,说不定老板一开心,就会给你加薪.哈哈
- 有了struts1为何还要学struts2
- 已经会struts1.x了为何还要学习struts2呢
- Google 有了Android,为何还要Chrome OS
- 为何有了组件, 还要有微服务?
- 既然有了malloc/free为何还要new/delete?
- 有了selenium,为何还要框架(Junit和TestNG)
- 既然有了malloc/free为何还要new/delete?
- 有了“她”还要Rapidshare干啥
- 有了进程为什么还要线程?
- 有了gpio_request为什么还要gpio_request_one
- 有了百度为什么还要读书
- 有简历,为何还要自我介绍?
- Struts1、Struts2
- Struts1 Struts2
- 有了malloc/free为什么还要new/delete
- 有了malloc/free为什么还要new/delete ?
- 有了malloc/free为什么还要new/delete
- 有了malloc/free为什么还要new/delete?
- 零拷贝的同步问题
- 电脑无故失去焦点,罪魁祸首是谁?终极解决办法
- java 遍历文件夹 递归
- 前后端分离的思考与实践(四)
- FastDFS的配置、部署与API使用解读(2)以字节方式上传文件的客户端代码
- 有了struts1为何还要学struts2
- 【Github教程】史上最全github使用方法:github入门到精通
- javascript中JSON对象使用
- me21n增强BADI:ME_PROCESS_PO_CUST之process_account
- FIDO-UAF相关调研
- VC透掉背景色
- pandas官方网站上《10 Minutes to pandas》的简单翻译
- quick-3.5打包apk for release版本(DOS命令行)
- 前后端分离的思考与实践(五)