今天无意中翻看了一下Struts2.0,结果发现它与Struts1.1有很大的变化,可以说已经变的面目全非了。作为程序员,又必须掌握***的技术,因此,它一升级,我们就得跟着学习,真可谓不亦苦乎!但水来土掩兵来将挡,你有降龙十八掌,我有乾坤大挪移,咱们见招拆招,以不变应万变;管你山大王还是蜘蛛精,在我眼里,都是一堆白骨而已!
首先需要说明的是:在web开发中***不要滥用Struts标签——能用html标签的就尽量使用html标签,比如一些最基本的页面对象如button,radio,label,text,textarea,table,form,select,submit等等;除非一些html标签做不了的事情,例如进行逻辑判断、 遍历、比较等等,才需要使用Struts标签。另外,向视图中填充数据,也必须要使用Struts标签,例如:
这样,如果需要由Struts1.x版本迁移至Struts2.x版本时,页面中就无需进行大幅度修改了。而事实上,我开发这么多网站,还没有发现html标签干不了的事情(当然除去一些需要后台进行逻辑处理的事情,但只要是单纯用于显示,html标签皆足以胜任!) 。
这样的观点对于Struts的学习也有一定的指导意义:Struts更新换代的速度也挺快的,如果我们什么都要学,那岂不是整天要关注它?因此,对于Struts的学习,只需关注如下5个方面即可:
(1)标签库的学习:如上所言,Struts标签库中的标签也有好几十个,我们没必要去一个一个的学,只需要学习一下需要服务器(或所谓的后台)进行逻辑处理的Struts标签即可,而对于那些由浏览器(即所谓的前台)便可以直接解释的标签,例如button,text,font,table,radio,form,select……,能不用Struts标签代替,就***别用它。这样,Struts标签的学习就可以少去4/5的学习量!
(2)Action类的学习:Action一直是Struts框架的核心,它负责页面呈现,因此需要与中间件打交道,也因此,它是连接Struts框架与其他各层的枢纽。有了Struts1.x的基础,学习Struts2.x的Action,会很容易掌握。因此,对于有Struts基础的programer而言,这一部分的学习相当容易,稍微一看就明白。
需要注意的是:如果直接学习Struts2.x,也许不知道Struts1.x中的formbean组件。建议还是尽量了解一下这些,这样有助于更深入地理解Struts框架的工作原理。
(3)Struts-config.xml配置文件:这是Struts核心之核心——控制器。页面跳转、视图数据传递都靠它来控制和指挥。Struts1.x中,需要重点理解
(4)Struts与spring的协作:似乎Struts2.x中内置了Ioc,但就如同其发布者所言一样:能用spring实现Ioc的,就尽量使用spring。因此,无论Struts怎样更新换代,spring必须要掌握。
(5)Struts与hibernate的协作:作为经典的SSH组合,使用了Struts和spring,怎能丢下hibernate呢?只要以前配置过hibernate的programer们,无论Struts怎样升级怎样变相,hibernate的配置几乎都大同小异的,不会因为Struts的变化就会变难。
综上,实际上在学习新版本的Struts时,我们只需了解一下其标签库、Action和配置,而标签库中需要了解的也仅仅是寥寥几个带有逻辑功能的标签便已足够了。当然,如果你彻底放弃HTML,非要使用Struts标签,那就多花点时间去看一下。
Struts2.0与Struts1.x的区别
不过,除了上面三个最核心最基本的需要掌握,对于新版本的Struts,还需要了解一些别的改进,以下的内容是我从网上找来的,它对Struts2.0于Struts1.x作了一些比较,看一看,便会了解Struts为什么要升级了(无非就是使它更完善):
一.Struts2 的简介
◆ 虽然 Struts2 号称是一个全新的框架,但是这仅仅是相对于 Struts1 而言的.
◆ Struts2 和 Struts1 相比,确实有很多革命性的改进,但是并不是新发布的新框架.二是另一个框架 WebWork 基础上发展起来的.
◆ Struts2 没有继承 Struts1 的血统,而是继承 webWork 的血统.
◆ Struts2是 WebWork 的升级,而不是一个全新的框架,稳定性和性能等各方面都有很好的保证
◆ 而且吸收了 Struts1 和 WebWork 两者的优势,因此是一个非常值得期待的框架
二. Apache Struts2 是一个可扩展的 Java EE WEB框架:框架设计的目标贯穿整个开发的周期
三. Struts2 和 Struts1 的不同
◆ Action类:
- Struts1 要求 Action 类继承一个抽象基类. Struts1 的一个普遍的问题是使用抽象类编程而不是接口
- Struts2 Action 类可以实现一个 Action 接口,也可实现其他的接口,使可选和定制的服务称为可能.
- Struts2 提供了一个 ActionSupport 基类去实现常用的接口; Action接口不是必须的,任何有 execute 标识的POJO
对象都可以用作 Struts2 的 Action 对象
◆ 线程模式:
- Struts1 Action 是单例的模式并且必须是线程安全的,因为仅有 Action 的一个实例来处理所有的请求.单例的策略限制了Struts1 Action 能做的事情,并且要在开发的时候特别的小心. Action 资源必须是线程安全或者同步的
- Struts2 Action 对象为每一个请求产生一个实例,因此没有线程安全的问题
◆ Servlet依赖:
- Struts1 Action 依赖于 Servlet API,因为当一个Action被调用 HttpServletRequest 和 HttpServletResponse 被传递给 execute() 方法
- Struts2 Action 不依赖于容器,允许 Action 脱离容器单独的被测试.如果需要的话 Struts2 Action 仍然可以访问初始的 request 和 response但是,其他的元素减少或者消除了直接访问 HttpServletRequest 和 HttpServletResponse 的必要性
◆ 可测性:
- Struts1 Action 测试的一个主要的问题是 execute 方法暴露了 Servlet API (使得测试要依赖容器).一个第三方的扩展
Struts TestCase -- 提供了一套 Struts1 的模拟对象 (来进行测试)
- Struts2 Action 可以通过初始化, 设置属性,调用方法来测试 "依赖注入" 支持也使得测试更加的容易
◆ 捕获输入:
- Struts1 Action 使用ActionForm对象来捕获输入.所有的 ActionForm 必须继承一个基类.因为其他的JavaBean 不能用作
ActionForm ,开发者经常创建多余的类捕获输入.动态的 Bean (DynaBeans) 可以作为创建传统的ActionForm选择,但是,开发者可能是在重新描述(创建)已经存在的 JavaBean 会导致冗余的 JavaBean)
- Struts2 Action 直接使用 Action 属性作为输入的属性,消除了对第二个输入对象的需求. Action 属性能够通过web页面上的taglibs 访问. Struts2 也支持 ActionForm 模式
◆ 表达式语言:
- Struts1 整合了 JSTL ,因此使用 JSTL EL .这种EL 的基本的对象图遍历,但是对集合和索引属性的支持很弱
- Struts2 可以使用 JSTL ,但是也支持一个更强大的和灵活的表达式语言 -- "Object Graph Notation Language" (OGNL)
◆ 绑定值到页面 (view) :
- Struts1 使用标准 JSP 机制把对象绑定到页面来访问
- Struts2 使用 "ValueStack" 技术,使 taglib 能够访问值而不需要把你的页面 (view) 和对象绑定起来ValueStack 策略允许通过一些列的名称相同但是类型不同的属性重用页面 (view)
◆ 类型的转换 :
- Struts1 ActionForm 属性通常都是 String 类型的. Struts1使用 Commons-Beanutils 进行类型的转换每个类一个转换器,对每一个实例来说是不可配置的。
- Struts2 使用OGNL 进行类型的转换. 提供基本的和常用的对象的转换器
◆ 校验 :
- Struts1 支持在 ActioNForm 的 validate 方法中手动的校验,或者通过 Commons Validator 的扩展来校验. 同一个类可以有不同的校验内容,但不能校验子对象
- Struts2 支持通过 validate 方法和 XWork 校验框架来进行校验. XWork 校验框架使用为属性类类型定义的校验和内容校验来支持 chain 校验子属性
◆ Action 执行的控制 :
- Struts1 支持每一个模块有单独的 Request Processors (生命周期);但是模块中的所有的 Action 必须功效那个相同的生命周期
- Struts2 支持通过拦截器堆栈 (Interceptor Stacks) 为每一个 Action 创建不同的生命周期.
堆栈能够根据需要和不同的 Action 一起使用
在项目中导入Struts框架:
接下来,还需要知道在eclipse(myeclipse)中怎样导入Struts包,以下的内容也是我从网上拷下来的导入Struts2.0的方法:
◆ commons-logging-1.0.4.jar :Struts2框架的日志包
◆ freemarker-2.3.8.jar : Struts2的 UI 标签的模板
◆ ognl-2.6.11.jar : 对象导航语言包
◆ Struts2-core.2.0.11.jar : Struts框架的核心包
◆ xwork-2.0.4.jar : XWork类库,Struts2 基于此构建
通过做一个简单的项目来学会使用新版本的Struts
学习了上面这些,都已经理解了,但是***通过一个项目实战来加深一下印象,说不定在项目中你会有新发现!这个项目是:基于 Struts2 创建一个简单的登陆项目:
1:导入 Struts2 核心支持包
2:在 web.xml 中配置 FilterDispatcher
3:编写前台显示的页面
4:开发 DAO
5:开发 action
6:创建 Struts.xml
搭建开发平台
当然,在开发这个项目之前,还需要搭建一个开发平台:
1:安装JDK(***是绿色版本 ),创建环境变量;
2:安装tomcat(***是绿色版本),创建环境变量;
3:安装eclipse或者myeclipse;如果安装前者,还需要下载一个tomcat-plugin和lomboz-plugin;而后者不需要;
4:回到上面项目***步——导入Struts核心包(注意:如果安装的是myeclipse,切不要被其所谓的内置了Struts包所忽悠!在开发项目时,如果视图层使用Struts框架的,必须在项目的WEB-INF/lib/目录下导入该有的Struts包)
您正在阅读的是《浅谈如何学习新版Struts 不变应万变》
【编辑推荐】