论文摘要:框架从Struts 1框架发展而来,但其核心技术和原理却是从WebWork继承的,本文介绍了Struts 1框架和Struts 2框架的体系结构,对比Struts 1框架和Struts 2框架的不同之处,着重介绍了Struts 2框架相比于Struts 1框架的优势。
论文关键词:框架,依赖性,请求参数
一、引言
Struts1是世界上第一个发布的MVC(模型+视图+控制器)框架,从它的第一个版本发布以来,它就获得了众多的开发人员的喜爱,成为了市场占有率最高的Web开发框架。但是,随着时间的推移,软件开发技术的进步,Web开发需求的变化,Struts1设计上的缺陷逐渐显露出来,使得它越来越无法满足开发人员要求高效、灵活的开发需求。因此,Struts开发团队与WebWork的开发团队合作,共同推出了新的、整合了WebWork与Struts1的优点,并且更加优雅、扩展性更强的框架——Struts2。
二、MVC设计模式简介
MVC即是把应用程序分成三个模块:模型(Model)、视图(View)和控制器(Controller),
模型是应用程序的主体部分,代表的是应用程序的数据以及用于访问控制和修改这些数据的业务规则。当模型发生改变时将会通知视图,并为视图提供查询模型相关状态的能力,同时也会为控制器提供访问封装在模型内部的应用程序功能的能力。
视图是用户看到并与之交互的界面,其作用是组织模型的内容。它从模型那里获得数据后指定这些数据如何表现。当模型变化时,视图负责维护数据表现的一致性。视图同时将用户的请求通知控制器。
控制接器受用户的输入并调用模型和视图区完成用户的需求。当Web用户单击Web页面的提交按钮来发送HTML表单时,控制器接收请求并调用相应的模型组件去处理请求,然后调用相应的视图来显示模型返回的数据。
这三个模块各自的功能以及相互关系如图一所示:

图一
三、Struts1结构简介
Struts1的MVC结构图如图二所示:
图二
其相应流程为:
①、所有的请求首先由ActionServlet截获;
②、ActionServlet根据请求URI,通过配置信息查找是否有对应的formbean,如果有,则创建它,并将请求数据组装到formbean对象中;
③、ActionServlet根据请求URI,通过配置信息查找是否有对应的Action,如果有,则创建它,然后调用action类的一个特定方法execute(),并向action传递formbean对象;
④、Action从formbean对象中取出用户提交的数据,创建业务组件对象,实现业务逻辑,并根据完成结果的成功与否向ActionServlet返回代表结果页面的ActionForward对象;
⑤、ActionServlet根据ActionForward对象的信息向用户呈现指定的页面。
四、Struts2结构简介
Struts1的MVC结构图如图三所示:
图三
其流程为:
①、所有的请求首先由FilterDispatcher截获;
②、FilterDispatcher根据请求URI,通过配置信息查找是否有对应的Action,如果有,则在创建Action之前要通过一系列的拦截器(Interceptor),这些拦截器为请求提供各种预处理和切面处理的应用功能;
③、创建Action对象,调用action类的一个特定方法execute();
④、Action从自身封装的属性中取出用户提交的数据,创建业务组件对象,实现业务逻辑,并根据完成结果返回映射配置中指定的Result页面;
⑤、再次调用拦截器,其调用顺序与之前第一次调用的相反;
⑥、FilterDispatcher根据Result的信息向用户呈现指定的页面。
五、Struts1框架和Struts2框架的比较
(一)、表示层的比较
Struts1的表示层比较单一,主要支持JSP为表现层技术,不提供与其他的表现层技术,如Velocity、FreeMarker等技术的整合,这样就严重制约的Struts1框架的使用。而Struts2对以上几种表现层技术均支持,这样就丰富了Struts2框架的表现层技术,使得Sruts2框架更符合开发者的实际需求。
Struts1集成了JSTL(JSPStandardTagLibrary,JSP标准标签库),因此在页面设计时可以使用JSTL表达式语言,但是这种表达式语言智能进行基本的对象图遍历,对于集合和索引属性的支持不强。而Struts2除了可以使用JSTL外,还支持一种更为强大和灵活的表达式语言:OGNL(Object-GraphNavigationLanguage),因为其表达式语法简单一致,可以用它来实现存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。
(二)依赖性的比较
Struts1的业务逻辑组件Action类必须要继承Action基类,Action基类中含有一个execute()方法,该方法调用模型的业务方法,完成用户请求的业务逻辑,然后根据执行结果把请求转发给其他合适的Web组件。 1/3 1 2 3 下一页 尾页 |