Struts2概述

  最近研究了一下srtuts2.0,将一些心得准备以一个系列的方式列一下。

一、MVC思想及其优势

MVC思想将一个应用分成三个部分:Model(模型)、View(视图)、Controller(控制器)。这三个部分以最少的耦合协同工作,从而提高应用的可扩展性及可维护性。

MVC特点:1、多个视图对应一个模型。2、模型返回的数据与显示逻辑分离,模型数据可以应用任何显示技术,例如JSPVelocity,或者生成Excel3、应用被分成三层,降低了各层之间的耦合,提高可扩展性。4MVC更符合软件工程思想,不同的层各司其职。

常用的MVC框架介绍:全世界第一个MVC框架是struts2001年出现。现在比较流行的MVC框架罗列如下:

JSF:他是标准,这是他的优势。但也有一些缺点:用户较少,资源不是很丰富,和Servlet API耦合;成熟度还有待于进一步提高。

Tapestry:具有很好的分工合作。

Spring MVC框架:设计比较好,但是使用起来比较复杂,和Servlet API耦合,有人说Spring有过度设计的危险,但是我有些不理解这句话的含义。

Webwork,类似struts2,较好的设计,从ServletAPI分离。

Model1model2

Model1JSP页面接受处理客户端请求,对请求处理后直接做出相应。用javabean处理业务逻辑,这个时候JSP既做控制器又做视图。

Model2Servlet作为前端的控制器,JSP作为视图,javabean作为控制器。

二、struts2概述

Struts1的缺点:

1、  支持的表示层技术单一

Struts1只支持JSP视图技术,当然,通过某些不自然的整合可以支持velocity等技术。

2、  strutsservlet API严重耦合,难于测试

比如说:如果要对struts1Actionexecute进行测试的时候,该方法有四个参数:ActionMappingActionFormHttpServletRequestHttpServletResponse,初始化这四个参数比较困难,尤其是HttpServletRequestHttpServletResponse两个参数,因为这两个参数通常由容器进行注入的。如果脱离web服务器,Action的测试是很困难的。

3、  struts1的侵入性太大

一个Action中包含了大量的strutsAPI,比如ActionMappingActionFormActionForwad。这种侵入式的设计最大的弱点在于:切换框架会相当困难,代码复用较低,不利于重构,对struts的依赖太严重。

Struts2则在Webwork的优良基础设计的基础上,进行了一次巨大的升级(我是这样认为的)。注意,struts2不是基于struts1,而是基于webwork的。Struts2针对struts1的不足,提出了自己的解决方案(实际上大多是webwork的解决方案)。

是使用struts2还是使用webwork?本人倾向使用struts2,原因:1、毕竟struts2是对webwork的一次升级。2webwork已经不再升级。

Struts2的大致处理流程:

1、  浏览器发送请求,如login.action

2、  核心的控制器FilterDispatcher根据请求决定调用合适的Action

3、  Struts2的拦截器链自动对请求应用通用功能,例如验证、填充参数、文件上传等。

4、  调用Actionexecute方法,实际上是调用Action代理的方法。(基于AOP理论)

5、  将结果信息输出到视图中,视图可以是JSPFreeMarkerVelocity甚至是JSON

<o:p> </o:p>

比较Struts1Struts2

<o:p> </o:p>

Struts1

Struts2

侵入性方面

非常大

较小

线程模式方面

Struts1 Action是单例模式并且必须是线程安全的,因为只有一个Action处理请求。

为每个请求创建一个实例,因此没有线程安全问题。

ServletAPI依赖方面

完全依赖ServletAPI

完全不依赖

可测试方面

脱离容器测试很困难(一般借助插件,我没有测试过)

可以脱离容器测试

封装请求参数对比

使用ActionForm对象,并且所有的ActionForm需要继承一个基类:ActionForm

可以是Action的属性,也可以是一个纯粹的POJO

表达式语言

可以使用EL

整合了一个强大的表达式语言OGNL。并且使用了valueStack技术。

类型转换:

ActionForm通常都是String类型,Struts1使用Commons-Beanutils进行类型转换,并且不可以配置。

Struts2使用OGNL进行类型转换,同时提供很好的扩展。

数据校验

可以重写ActionFormvalidate方法或者使用框架来完成校验。

同样struts2同样支持重写ActionSupportvalidate方法和框架,同时struts2支持ajax校验。

配置文件

配置文件比较复杂,并且项目很大的时候造成配置文件臃肿。

可以有多个配置文件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值