Struts与Webwork

 工作原理
Struts
首先,HTTP的客户请求信息现提交到控制器(ActionServlet),控制器(ActionServlet)将HTTP的客户请求信息组装后,根据配置文件的指定描述,转发到适当的处理器,处理器在将请求转移到一个Action实例时, 如果这个实例不存在,控制器会首先创建,然后会调用这个Action实例的execute()方法,再转发到其他的Action或者jsp页面。
WebWork
WebWork框架的控制器是ServletDispatcher,是默认的处理Web Http请求的调度器,它是一个JavaServlet,是WebWork框架的控制器。所有对Action调用的请求都将通过这个ServletDispatcher调度。它将在web.xml里配置ServletDispatcher时指定,让所有对WebWork 的Action(默认的是.action的后缀)的请求都对应到该调度的JavaServlet中。
ServletDispatcher接受客户端的HTTP请求,将JavaServlet的很多相关对象进行包装,再传给我们的XWork框架,由我们的XWork框架去解析我们的xwork.xml配置文件,根据配置文件的信息,创建对应的Action,组装并调用相应的拦截器,执行Action,返回执行结果。WebWork使用XWork的核心,主要是由这个ServletDispatcher去实现的。
两者比较差异
主要区别
Webwork支持Interceptor(拦截器)框架,XWork Interceptor(拦截器)将Action共用的行为独立出来,在Action执行前后运行。这也就是我们所说的AOP(Aspect Oriented Programming,面向切面编程),它是分散关注的编程方法,它将通用需求功能从不相关类之中分离出来,当你提交对Aciton的请求时,ServletDispatcher会根据你的请求,去调度并执行相应的Action。在Action执行之前,调用被 Interceptor截取,Interceptor在Action执行前后运行。
1. 配置和Action方面:
(1)两者在action,页面跳转配置xml文件方面基本上差不多,只是webwork在支持Velocity上面比struts简单的多,直接把输出格式定位Velocity就行了,如 <result name="success" type="velocity">,而strust是通过Velocity tools解决的,比较麻烦。WebWork2支持JSP,Velocity,xslt等多种表现层技术,而且调用比较方便。
(2)Struts的多模块式通过用多个配置文件分割实现的,而webwork则是通过导入其他配置文件实现的,最大的区别就是webwork的包和命名空间的概念。并且,包支持继承。
也就是说,可以定义一些通用跳转和拦截器,然后其他包继承此包,并用有此包属性。
(3)Webwork可以通过参数指定webwork配置文件加载方式,webwork提供每次httpRequest请求时load配置文件,所以不用像struts那样每次重起web容器。
(4)网上多数文章认为ww2比较struts的一个优点是,ww2的Action是实现其Action接口,而Struts则必须继承Action类,但是实际的情况是,由于我们在使用WebWork2的时候,都会采用推荐的模型驱动(Model-Driven),和客户端验证,所以必须要继承ActionSupport而且要实现Action,ModelDriven接口,所以,这一点上,和Struts基本是一样的,标准的WebWork2的Action类的定义:public class PersonAction extends ActionSupport implements Action,ModelDriven
(5)在实现功能划分的时候,Struts采用继承DispatchAction的方式实现,URI直接根据参数调用Action中的相应方法,URI如:
/person.do?method=doList
而WebWork2是继承ActionSupport类,URI根据!后面的参数掉用相应Action中的方法,如:
/person!list.action
两者在应用上区别不大。
2. 数据获取
WebWork没有FormBean,,Action 分Field-Driven(字段驱动的)Action和Model-Driven(模型驱动的)Action,它们的功能是,从页面上获得数据。
字段驱动的是Action将直接用自己的字段来充当FormBean的功能
模型驱动的是普通JavaBean充当模型部分。
由于支持这两种方式,所以webwork应用起来比较灵活。
3. 数据验证方面:
(1) 后台验证:
Struts是通过FormBean中validate()方法实现的。Webwork是通过配置一个validationWorkflowStack interceptor 和一个和命名规则为Action类名-validation.xml 或 Action类名-Action别名-validation.xml 的xml文件实现的
(2)前台验证:
Struts 通过 配置validation.xml,validator-rules.xml来实现,可以根据validators.xml中规则写一个或多个validation.xml文件来验证应用中所有的FormBean。而 Webwork是根据validators.xml中规则,针对每一个action配置一个.xml文件。并且要放到与action相同的目录里。

 注意:这里存在一个重要的问题,我没有解决,就是如果使用webwork2的前台验证,每一个action都必须要有一个没有转发类型的入口地址,如:<result name="input">index.jsp</result>,但是这样造成一个问题,就是我们实际开发过程中,不可能给每一个提交操作都配置一个action,也就是说,一个action中可能要包含多个提交操作,这样,webwork2的客户端验证就没法使用。(这个问题我没有解决,在网上一些技术论坛里页没有得到满意的答案)
4. 与Spring结合
Strust是在Action请求开始,实例化Spring中配置的BO,而WebWork不但支持这种方式,也支持一个webwork2-spring插件的方式,这种方式实际上是在interceptors 中增加了一个用于获得外部引用的拦截器ExternalReferencesInterceptor,然后再在相应的Action中进行配置,
如:<external-ref name="personBO">personBO</external-ref>,
然后再action调用,如:
private PersonBO personBO;

public PersonBO getPersonBO() {
return personBO;
}

public void setPersonBO(PersonBO personBO) {
this.personBO = personBO;
}
就可以得到spring中映射的BO了。

5. 测试
由于Webwork是与容器无关的,所以WebWork的测试用例和普通的java类的测试用例的写法基本上是一样的,而Struts可以通过外部扩展的StrutsTestCase工具来实现测试功能,相对于Webwork,配置相对复杂。
 注意:由于使用了webwork2-spring插件,所以我在进行测试的时候,出现了一些问题,主要是得不到BO,这个问题应该能够解决,但是我在论坛上也没有得到满意的答案,说明,WebWork的资料和受关注呈度还比较欠缺。
6. 界面显示技术
WebWork2和Struts的标签库都比较丰富,都是基于OGNL(Object-Graph Navigation Language)语言的,基本需要的功能都能够保障实现,WebWork只需要包含一个webwork.tld标签库文件,而Struts则需要包含多个,
在异常处理方面,Struts的标签出错页面一般就是一个空白页面,比较难调整,而WebWork2则友好很多,易于调试。
WebWork2和Struts都支持JSP,Velocity,xslt等技术,但是,Webwork2能更方便的实现。
另,Velocity是一中模版技术,由Apache提出,由另外一种引擎技术Webmacro引深而来,他关注在Model和View之间,可以代替Jsp,它的主要做用是将java代码从web页面中分离出来.
7.性能方面

压力测试共进行了4次,采用同一个容器(jakarta-tomcat-5.0.28),同一个持久层架构(spring1.1.5+hibernate 2.1.2),同一个数据库(mysql-4.1.12),同一个操作系统(Win2K),同样的数据连接池(DBCP Max. Active Connections: 2000 ,Max. Idle Connections 100)


第一次
Stress Level 10
Stress Multiplier 3
Test Run Time 10
50
3
10
100
3
10
500
3
10
Struts Requests per Second: 36.90 36.81 34.43 26.45
WebWork Requests per Second: 35.71 37.46 33.66 27.71


说明:只测试查询操作。

两者性能上基本相同。
8.国际化支持(i18N)
基本相同,都是通过配置资源文件,然后利用标签库进行调用,只是语法少许不同。
9.学习曲线
相比之下,Struts的标签库比较庞大,不实用的标签很多,而且一些标签使用过于灵活,相比之下WebWork标签库更为简单,学习速度快。WebWork的配置也要比Struts简单一些,所以学习起来相对简单。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值