JavaWeb整合开发实例精通:Struts+Hibernate+Spring
上QQ阅读APP看书,第一时间看更新

1.3 为什么要用Struts 2

在上一节中对Struts 2的各个组成部分进行了大致的说明,也许有些读者对Action、Filter这些技术名词还只是一些模糊的概念,也不明白为什么Struts 2需要这些作为它的一部分。因此有必要对Struts 2在Web项目中进行操作的整体流程详细说明。如图1.3所示是Struts 2的整体结构图。

图1.3 Struts 2整体结构图

分析图1.3的工作流程:

(1)右上角的HTTP请求发出后,如果在Context中有对象,先通过过滤器ActionContextCleanUp清理Contex对象。

(2)然后判断如果项目中使用了像SiteMesh这样的框架,那必须先通过这样的过滤器,然后再使用ActionMapper进行调度。

(3)在配置文件struts.xml中寻找相应的URL控制,通过ActionInvocation找到Action,如果被找到的Action有拦截器配置,则在Action的前后执行拦截器。

(4)Action主要功能则是调用业务逻辑类,对业务逻辑进行处理之后,则返回一个Result,在struts.xml中根据相应定义的Result导航目标视图,产生Response返回到相应的目标视图页面。如果还有过滤器设置,则还需要进行过滤器的执行和控制。

通过以上的说明,可知Struts 2还是和基本的MVC模式概念有些区别,在"VC"(视图和控制)部分,调用时都是通过相应的过滤器或拦截器组件进行处理,也就是比起传统的MVC模式,它提供了很多附加的操作处理,但是这些操作处理原先在MVC中都是一起执行的,现在只不过把他们和核心的流程分离开。

因此不仅仅是MVC的分离,甚至某些核心和非核心的控制处理也分开了,这更加体现了松耦合的开发理念。

使用Struts 2的目标其实已经很清楚了,面对以前非结构化或比较混乱的项目开发框架,Struts 2可以让项目结构化,而且对于很多新技术尤其是视图技术提供了很好的支持。对于开发人员,在Struts 2中开发自己新的符合业务逻辑的组件自由度更高,而且也不会使原有结构发生改变或混乱。

在Struts 2诞生之前,同类型中比较知名的基于MVC模式的Web项目开发框架有WebWork、Tapestry、JSF、SpringMVC。Struts 2诞生后,WebWork已经和Struts合并,剩下的还有其他三个开发框架。下面对其一一进行介绍,然后将它们和Struts 2相比较,就能明白这些框架的技术优势和劣势分别在哪里。

1.3.1 Tapestry优劣点

该框架是基于组件开发的框架。它有以下几点优势:

●非常高的代码复用性。

●将开发者从烦琐的JSP代码中解脱出来,取而代之的是真正面向对象的方法,而不是URL解析。

●对国际化的支持。

●精确地错误定位,将错误定位到源程序中的行,取代了JSP中莫名奇妙地错误提示。缺点有以下几点:

●学习文档都是很概念化的,没有什么实用性。

●学习曲线很陡峭,即入门者开始学习时很难理解和掌握。

●产品发布周期也很长,要很长时间才会把开发者提出的技术缺陷在下一版本中解决。

●几乎没有什么成功的Web项目开发示例。

●IDE(集成开发环境)对其的支持很弱。在开发工具中使用它进行Web项目开发,几乎没有很好的便捷开发方法。

现在的Web项目开发中,都很重视快速开发理念,而Tapestry由于以上的缺点往往拖延了开发进度,因此几乎没有IT公司会使用它开发Web项目。