APP下载

Struts2框架技术研究

2016-10-21黄玲

科技创新与应用 2016年7期
关键词:控制器

黄玲

摘 要:Struts从推出以来得到了广泛应用,是一种优秀的MVC开发框架,却随着应用的不断扩大,也逐渐暴露出了一些不足。Struts2框架是基于WebWork推出的一个新的MVC框架,他与Struts相比,具有较大变化。文章介绍了Struts框架与WebWork框架,系统得分析了Struts2框架的体系结构,通过他与Struts框架对比,重点探讨了Struts2控制器的实现原理,从而总结出Struts2较之Struts框架的优势。

关键词:WebWork;Struts2;控制器;面向切面编程

Struts1框架虽然用的比较广泛,也比较成熟,但在面对其他的MVC的框架来说,虽然有自己的不足之处。为了弥补这些不足,Struts1进行了一些更新,之后就产生了现在的Struts2。

1 Struts1框架

Struts1由两部分控制器组成,他们分别是核心控制器和业务逻辑控制器,核心控制器是有Struts1框架自身提供的,而业务逻辑则是有用户自定义的,由开发者提供。

应用是由请求驱动的,是由客户端的浏览器发送请求,然后被Struts1的核心控制器进行拦截,核心控制器再根据请求来决定是否调用业务逻辑控制器处理请求,当用户请求处理完后,其处理结果通过 jsp现给用户。

Struts1的缺陷:

(1)支持的前台表现比较少。Struts1推出时只能够支持jsp作为前台的表现。

(2)与Servlet API严重耦合,对测试非常不友好。一旦离开了Web容器,测试会非常困难。因为Struts1是完全是基于Servlet API的,所以在Struts1的业务逻辑控制器内部,充满了大量的Servlet API action中的参数,严重依赖Web服务器。

2 WebWork框架

WebWork是建立在名叫Xwork基础之上的框架,他是来自另一个优秀的开源组织opensymphony。Xwork是一个标准的Command模式,简便、灵活且功能强大,而且完全从web层脱离出来。

WebWork采用相互关联较低的设计,系统的action和servlet API不在相互依赖,允许系统从B/S结构向C/S结构转换 WebWork能够支持更多的前台技术。他可以脱离Web应用,通过IOC控制反转与控制反转容器,能让测试更简单。

相对于Struts1,WebWork优点如下:

(1)action无需与Servlet API耦合,使测试更加简便。

(2)action无需与WebWork耦合,代码重用率高。

还可以继承一个父类;但一旦已经继承了一个父类,则仅仅实现WebWork的action接口,包含了一个execute方法。用一个接口来代替继承是一个非常好的优化,用一个接口来实现框架行为,对类的影响较小,继承任意味着该类不能在继承其他父类。

(3)支持更多的前台技术,让画面表现更加灵活。

3 Struts2框架

Struts2是从WebWork继承而来,而非Struts1。因此Struts2框架与WebWork框架相比,只是更改了一些在WebWork框架里的名称。而我们研究他的处理流程,Struts2与Struts1相似,它们都是优控制器构成核心而成的。Struts2的控制器也由两部分组成:核心控制器ServletDispatcher和业务逻辑控制器Action。

Struts2的业务处理流程大致如下:

首先用户从客户端的浏览器输入数据,提交页面,向服务器发送请求。例如 /test/login.action、/reg/register.action;

然后Struts2得到用户请求和数据后,会根据具体的请求来调用合适的Action;

再然后通过拦截器自动对请求应用通用功能,例如:i18n、页面校验等其他功能;

之后调用Action的execute方法,该execute方法将得到用户提交的数据然后进行具体的业务逻辑处理;

最后,处理结果将以各种不同的方式返回到浏览器中,前台页面技术可由开发者自由选择。

我们来看看Struts2的核心控制器ServletDispatcher。

核心控制器其实是一个Filter,由Struts2的框架供给。他会将用户的请求进行筛选,过滤,当客户的请求以.Action结,则Struts2框架会接受该请求,进行处理。Struts2框架会根据.Action的前面部分来分配调用的Action。而我们需要在配置文件struts.xml定义Action与他的实现类之间的一一对应关系。Struts2框架还提供了一系列拦截器,这些拦截器负责传递参数到Action中,并调用Action的execute方法来处理用户请求。

AOP即面向切面编程,也就是所谓的拦截器,在执行开发者业务逻辑之前,或者之后,处理一些共通的功能需求。这样就可以分离出许多跟具体业务逻辑不相关,或者关系并不大的功能,比如说校验用户是否登陆,拦截用户的含有非法字符的请求等等。这样开发者就不需要为这些通用功能分心,只需要将重心放在自己的业务逻辑上便可。增加了代码的重用性,减少了代码的冗余,提高了性能和代码的质量,提高了开发的效率。拦截器可以实现许多功能,使用拦截器只需要在struts.xml,也就是配置文件中配置到需要的拦截器,这样的话安装配置的顺序,拦截器就看在Action执行前后执行。这样具有很好的维护性,如果需求有了变化,则只要修改这个拦截器就可以。

4 Action业务逻辑控制器

Action业务逻辑控制器,由用户自己实现。与Struts1的Action不同,Struts2的Action完全與ServletAPI分离,更加灵活,易于提高效率和质量。Struts2中的Action可以不需要Struts1中的Action那样继承Action父类。

Struts2的action有一个execute方法,这个方法没有参数。在Action中有个不带参数的execute方法,为什么要设计一个不带参数的方法呢, 因为这样的话我们开发的应用不需要部署到Web容器中,即可进行测试,更加灵活,易于提高效率和质量。由于它不依赖于servlet请求,有更强的可移植、可重用性。

Struts2中Action的属性可以实现和Struts1中ActionForm的属性类似的,但实现的方式是不同的功能。在Struts2中,是利用框架提供的拦截器来分析请求,并将请求值赋给Action的对应属性。

用户自己开发的Action类可以不继承任何父类,这样虽然自由,但是很有可能会不规范,或者是增加开发的难度和代码量。所以为了规范这些Action类,Struts2为开发者提供了一个接口,规范了类这个Action类得实现。同时,为了处理一些Web应用中常用的功能,比如国际化网页上的文字,页面数据的有效性的校验,数据的类型转换和数据装载等。用户的Action类继承该类后,大大地简化了Action的开发。

为了能够访问Web应用的原来的ServletAPI,Struts2提供了ActionContext,还有另外一些接口,如ServletContextAware、ServletRequestAware、Servle-tResponseAware。当Action类实现了这些接口,就可以通过这些接口访问ServletAPI实例。

参考文献

[1]飞思科技产品研发中心.Web服务应用开发详解[M].北京:电子工业出版社,2002:189-199.

[2]袁文雯.GSM无线数据传输的研究和应用[D].杭州:浙江大学,2003:6.

[3]赵佳玉,鲍慧.蓝牙技术及其与相关技术的比较[J].电力系统通信,2003(12):15.

[4]王金涛.一种新型分布式无线监测系统[J].计算机工程与应用,2002(13):55-57.

猜你喜欢

控制器
南京溧水电子3款控制器产品
杀毒控制器
水泥生料立磨压差变参数二型模糊控制器设计
基于NFV的分布式SDN控制器节能机制
用于可编程控制器的监测装置
AR眼镜商Magic Leap发布新专利
让你的骑行更顺畅的头盔
优科推出虚拟控制器,简化小型企业Wi—Fi部署
强大的紧凑型可编程逻辑控制器
智能液位控制器在排水系统中的应用