当前位置:首考文秘网>范文大全 > 公文范文 > 两种Java,Web通用开发框架的比较研究

两种Java,Web通用开发框架的比较研究

时间:2023-06-26 13:10:03 公文范文 来源:网友投稿

摘要:Java Web通用开发框架名目繁多,而Struts 1框架和Struts 2框架是当今最流行的两种。Struts 2框架从Struts 1框架发展而来,但其核心技术和原理却是从另一种开发框架WebWork继承的。该文介绍了Struts 1框架和Struts 2框架的体系结构,对比Struts 1框架和Struts 2框架的不同之处,着重介绍Struts 2框架相比于Struts 1框架的优势。

关键词:Struts 1;Struts 2;MVC;框架;依赖性;请求参数

中图分类号:TP311.5文献标识码:A文章编号:1009-3044(2010)19-5249-03

Comparative Study on Two Java Web Frameworks

BAN Ke1, HUANG Dan2

(G1.uangdong AIB Polytechnic College, Guangzhou 510507, China; 2.Computer Science College, South-Central University for Nationalities, Wuhan 430074, China)

Abstract: There are many Java Web development frameworks, Struts 1 and Struts 2 framework is the most popular. Struts 2 framework is evolved from the Struts 1 Framework, but its core technology and theory are inherited from the WebWork. This article describes the Architecture of the Struts 1 framework and the Struts 2 Framework, Comparison of the difference between Struts 1 and Struts 2 framework,and highlights the advantages of Struts 2 framework compared to Struts 1 framework.

Key words: Struts 1; Struts 2; MVC; framework; dependence; request parameters

Struts 1是世界上第一个发布的MVC(模型+视图+控制器)框架[1],从它的第一个版本发布以来,它就获得了众多的开发人员的喜爱,成为了市场占有率最高的Web开发框架。但是,随着时间的推移,软件开发技术的进步,Web开发需求的变化,Struts 1设计上的缺陷逐渐显露出来,使得它越来越无法满足开发人员要求高效、灵活的开发需求。因此,Struts开发团队与WebWork的开发团队合作,共同推出了新的、整合了WebWork与Struts 1的优点,并且更加优雅、扩展性更强的框架——Struts 2。

1 MVC设计模式简介

MVC即是把应用程序分成三个模块[1]:模型(Model)、视图(View)和控制器(Controller),

模型是应用程序的主体部分,代表的是应用程序的数据以及用于访问控制和修改这些数据的业务规则。当模型发生改变时将会通知视图,并为视图提供查询模型相关状态的能力,同时也会为控制器提供访问封装在模型内部的应用程序功能的能力。

视图是用户看到并与之交互的界面,其作用是组织模型的内容。它从模型那里获得数据后指定这些数据如何表现。当模型变化时,视图负责维护数据表现的一致性。视图同时将用户的请求通知控制器。

控制接器受用户的输入并调用模型和视图区完成用户的需求。当Web用户单击Web页面的提交按钮来发送HTML表单时,控制器接收请求并调用相应的模型组件去处理请求,然后调用相应的视图来显示模型返回的数据。

这三个模块各自的功能以及相互关系如图1所示。

2 Struts 1结构简介

Struts 1的MVC结构图如图2所示。

其相应流程为:

①所有的请求首先由ActionServlet截获;

②ActionServlet根据请求URI,通过配置信息查找是否有对应的form bean,如果有,则创建它,并将请求数据组装到form bean对象中;

③ActionServlet根据请求URI,通过配置信息查找是否有对应的Action,如果有,则创建它,然后调用action类的一个特定方法execute(),并向action传递form bean对象;

④Action从form bean对象中取出用户提交的数据,创建业务组件对象,实现业务逻辑,并根据完成结果的成功与否向ActionServlet返回代表结果页面的ActionForward对象;

⑤ActionServlet根据ActionForward对象的信息向用户呈现指定的页面。

3 Struts 2结构简介

Struts 1的MVC结构图如图3所示。

其流程为:

①所有的请求首先由FilterDispatcher截获;

②FilterDispatcher根据请求URI,通过配置信息查找是否有对应的Action,如果有,则在创建Action之前要通过一系列的拦截器(Interceptor),这些拦截器为请求提供各种预处理和切面处理的应用功能;

③创建Action对象,调用action类的一个特定方法execute();

④Action从自身封装的属性中取出用户提交的数据,创建业务组件对象,实现业务逻辑,并根据完成结果返回映射配置中指定的Result页面;

⑤再次调用拦截器,其调用顺序与之前第一次调用的相反;

⑥FilterDispatcher根据Result的信息向用户呈现指定的页面。

4 Struts 1框架和Struts 2框架的比较

1)表示层的比较

Struts 1的表示层比较单一[2],主要支持JSP为表现层技术,不提供与其他的表现层技术,如Velocity、FreeMarker等技术的整合,这样就严重制约的Struts 1框架的使用。而Struts 2对以上几种表现层技术均支持,这样就丰富了Struts 2框架的表现层技术,使得Sruts 2框架更符合开发者的实际需求。

Struts 1集成了JSTL(JSP Standard Tag Library,JSP标准标签库),因此在页面设计时可以使用JSTL表达式语言,但是这种表达式语言智能进行基本的对象图遍历,对于集合和索引属性的支持不强。而Struts 2除了可以使用JSTL外,还支持一种更为强大和灵活的表达式语言:OGNL(Object-Graph Navigation Language),因为其表达式语法简单一致,可以用它来实现存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。

2)依赖性的比较

Struts 1的业务逻辑组件Action类必须要继承Action基类[3],Action基类中含有一个execute()方法,该方法调用模型的业务方法,完成用户请求的业务逻辑,然后根据执行结果把请求转发给其他合适的Web组件。其execute()方法定义如下:

Public ActionForward execute(ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response) throws Exception;

可见,方法中包含参数HttpServletRequest和HttpServletResponse都是Servlet API提供的接口,也就是说,继承了Action基类的Action类依赖于Servlet API,这使得Action的测试必须依赖于Web容器,造成其单元测试很不方便。还有ActionMapping和ActionForm都属于Struts1API,这说明Strutsl框架封装请求数据和创建控制类的代码严重StrutslAPI,而且execute方法也是固定的模式,返回的也是ActionForward类型的参数。这样太受规则的束缚,一虽需求有所改变,代码将要做很大的改变。不符合代码重用的要求。

而Struts 2的Action类不需要继承任何基类,通常只需要实现Action接口,在JAVA语法中,继承基类和实现接口的意义是不一样的,因为任何一个类只能继承一个基类,但是可以实现多个接口,所以相对于Struts 1来说,Struts 2的Action类更为灵活。Action接口的execute()方法定义如下:

Public String execute()throws Exception;

而且,Struts 2的Action类也可以不实现Action接口,只需要在类中提供一个返回类型为String的无参的public方法就行,如:

Public String xxx();

可见Action类的方法中不包含任何参数,也就是说Struts 2框架的业务逻辑组件不依赖于Web容器,所以这就允许Action类脱离Web容器进行测试,使得单元测试更为简单。

3)捕获请求参数方式的比较

Struts 1使用ActionForm对象来捕获请求参数。与Action类似,所有的ActionForm需要继承ActionForm基类,这样普通的JavaBean就不能被用作ActionFrom,开发者常常创建许多冗余的类来捕获输入,或者使用动态Form来代替创建通常的ActionFrom类。

如果要实现登陆操作,那么为了使Action类能捕获表单的数据,需要创建一个ActionForm对象如下:

public class LoginForm extends ActionForm

{

private String username;//定义用户名

private String password;//定义密码

public String getUsername()

{

return username;//获取用户名

}

public void SetUsername(String username)

{

this.username=username;//设置用户名

}

……//省略实现获取和设置密码的getter和setter方法同上

}

然后才能让Action类捕获,如下:

Public class LoginAction extends Action

{

Public ActionForward execute(ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response) throws Exception

{

LoginForm user= LoginForm (form);

……//省略数据验证代码

}

}

Struts 2直接使用Action的属性来封装请求参数,避免了使用另外的输入对象。如:

Public class LoginAction implements Action

{

private String username;//定义用户名

private String password;//定义密码

Public String execute()throws Exception

{

……//省略数据验证代码

}

private String username;//定义用户名

private String password;//定义密码

public String getUsername()

{

return username;//获取用户名

}

public void SetUsername(String username)

{

this.username=username;//设置用户名

}

……//省略实现获取和设置密码的getter和setter方法同上

}

从以上内容可以看出,在Struts 1中,业务逻辑层想要捕获表单的数据,就需要创建一个ActionForm对象,而表单的数据有时候也需要传到数据访问层,所以为了避免业务逻辑层和数据访问层依赖于框架,就需要一个和ActionForm类具有相同属性的普通JavaBean类。在ActionForm对象接收到数据后,将其中的数据原封不动地复制到JavaBean对象中。而Struts 2直接用Action类来封装请求参数,不需要创建ActionForm对象,所以就不用为创建大量的ActionForm对象而感到苦恼。

4)线程模型的比较

Struts 1的Action是单例模式,所有针对这个Action的请求都由它的唯一实例进行处理,因此它必须是线程安全的。単例策略限制了Struts 1和Action所能做的事,并且在开发时要特别小心,因为Action的资源必须是线程安全或同步的。而Struts 2的Action为每一个请求实例化一个对象,这样就没有了线程安全的问题。

5 总结

Struts 1是个非常优秀的框架,充分体现了MVC设计模式思想,但是不可否认具有不少缺点,比如表现层单一,代码依赖性太强,容易造成代码冗余以及在设计时容易被线程安全问题所困扰。而Struts 2结合了Struts 1框架和WebWork框架的优点,解决了Struts 1的问题,而且框架的各个组件都是可靠的松散耦合,更符合现代开发人员的要求。

参考文献:

[1] 孙鑫.Struts 2深入详解[M].北京:电子工业出版社,2009.

[2] 李刚.轻量级Java EE企业应用实战—Struts 2+Spring+Hibernate[M].北京:电子工业出版社,2009.

[3] 孙卫琴.精通Struts:基于MVC的Java Web设计与开发[M].北京:电子工业出版社,2006.

[4] 武宝珠,梁声灼,牛德雄.基于Struts2+Spring+Hibernate架构构建Web应用系统[J].计算机与现代化,2009,(8):43-46.

[5] 王春林,耿祥义.浅析Struts 2框架[J].现代经济信息,2009(4):100-101.

推荐访问:两种 框架 通用 开发 研究

版权所有:首考文秘网 2015-2024 未经授权禁止复制或建立镜像[首考文秘网]所有资源完全免费共享

Powered by 首考文秘网 © All Rights Reserved.。备案号:冀ICP备15026071号-91