运用类反射机制简化Struts应用程序的开发

原创 2007年09月23日 06:04:00
本文讲述了如何利用Java的反射的机制来简化Structs应用程序的开发。
 
在Struts应用程序中,ActionForm是一个很重要的概念,它的主要功能就是为Action的操作提供与客户表单相映射的数据(如果在客户指定的情况下,还包括对数据进行校验)。Action根据业务逻辑的需要,对数据状态进行修改,在改变系统状态后,ActionForm则自动的回写新的数据状态并保持。程序员对JSP与ActionForm Bean的对应关系,通常感到很迷惑,JSP与ActionForm到底是1:1,还是N:1,对此,Struts本身对此并没有提出自己的观点。无论是一对一,还是多对一,Struts本身并不关心,它都能很好得工作。Struts在它的开发文档中指出,对于较小规模的开发,开发人员可以根据自己的需要,每个模块只写一个ActionForm Bean,甚至整个应用程序只写一个ActionForm Bean.当然,Struts也不反对每个ActionForm Bean只对应一个JSP,他们之间的对应关系,由开发人员自己决定。
在我看来,正如Entity EJB对J2EE的重大贡献一样,Entity EJB使得程序员对二维关系数据库的存取对象化了,程序员可以使用Set 或者Get等面向对象的方法来操纵关系数据库的数据,而ActionForm也使得程序员对网页的数据存取奇迹般的对象化了,程序员同样也可以使用Set 或者Get等面向对象的方法存取网页上的数据,这是一个开发模式方式上的重大转变。基于此,我个人认为ActionForm与JSP即VIEW层的关系最好是一对一的关系,这样,在理解上会更清晰一些。但是,这样也会带来一个很现实的问题,在一个应用程序中,也许有非常多得JSP页面,如果每个ActionForm 都只对应一个JSP页面,那么系统的Java代码就会急剧膨胀起来,而且,每个ActionForm都是只有很简单的Set或者Get方法存取数据,那么,如何简化Struts应用程序的开发呢?
在Struts1.1 中,Struts引入了DynaActionForm和Dyna Bean,试图解决这个问题,在我看来,DynaActionForm的引入,破坏了对网页存取对象化的概念,使开发人员重新回到了使用HashTable、Map、Collection、ArrayList等集合对象来实现对数据进行存取的老路上来。虽然应用程序的灵活性大大增加了,但是代码的可读性也大大降低了,开发人员之间的交流难度也增加了。
在传统的应用程序对ActionForm Bean的访问中,我们通常都写成如下的形式:

在Action 的Execute方法中,我们 把这个集合用request.setAttribute("array", array)存储起来,然后在JSP页面中,我们用iterate Tag把数据循环现实出来。代码通常都是这个样子:

在Struts中,对数据的访问和显示的写法通常都是很固定的,在VIEW层,我们是没有办法简化自己的代码的,在Action层,其写法通常也很固定,只是做一个页面的跳转,商业逻辑和对数据得访问,通常都是放在JavaBean中。那么,在此,我提出一种运用类反射的机制,使应用程序对ActionForm Bean的赋值自动化,即应用程序通过一个简单的接口,使用一个通用的方法,就可以完成对ActionForm Bean的赋值,而不必在每个使用ActionFormBean的地方,都把数据库中的值手动赋值给ActionForm Bean,然后再在JSP页面中显示出来。虽然它不能减少ActionForm Bean的数量,但是,它至少使应用程序对ActionForm Bean的赋值自动化了,从而减少了程序出错概率,提高了程软件开发效率。




回页首


 
关于类反射的概念,在此我就不详细介绍了,它不是本文的重点,IBM developerWorks网站上有大量介绍类反射概念的文章,大家可以找出来参考一下。其实,Struts本身就大量利用了类反射的机制。




回页首


  

  

  

  

  





回页首

我们通过运用类反射机制,在一个Struts应用开发中,完成了一个通用查询方法的实现。它使得程序员摆脱了在每个应用程序中都要编写枯燥的set、get等方法来访问ActionForm Bean,从而简化了Struts应用程序的开发。

 

运用类反射机制简化Struts应用程序的开发 转

在Struts应用程序中,ActionForm是一个很重要的概念,它的主要功能就是为Action的操作提供与客户表单相映射的数据(如果在客户指定的情况下,还包括对数据进行校验)。Action根据业务逻...
  • WYHuan1030
  • WYHuan1030
  • 2010年03月22日 09:06
  • 353

运用类反射机制简化Struts应用程序的开发

出处:IBM developerWorks 中国2003 年 11 月 25 日本文讲述了如何利用Java的反射的机制来简化Structs应用程序的开发。Struts中引入ActionForm类的意义...
  • Trainsp0tting
  • Trainsp0tting
  • 2006年09月04日 15:28
  • 583

struts框架的错误返回机制

    本人水平有限,有不足之处望个人仁兄提醒。   struts对于表单错误的验证可分为三块:页面js验证,xml配置验证,actionForm里重载validate方法。后两种都是struts自己...
  • heiyv
  • heiyv
  • 2008年02月28日 20:38
  • 792

XDoclet简化Struts开发

Struts是一个Web开发框架,是用Struts避免了简单的JSP + Servlet开发过程,维护过程中的一系列问题,但是struts配置文件的编辑始终是一个问题。下面我们使用Xdoclet来自动...
  • amose
  • amose
  • 2005年05月30日 15:32
  • 667

Spring 是如何简化 Java 开发的?

Q:Spring 的目标是什么? 致力于全方位的简化 Java 开发。Q:为了降低 Java 开发的复杂性,Spring 采取了哪些关键策略? 基于 POJO 的轻量级和最小侵入性编程; 通过依赖注...
  • tinyDolphin
  • tinyDolphin
  • 2017年07月09日 19:04
  • 216

(翻译整理)如何简单、高效地使用位操作解决问题

一、引言这是我翻译自 A summary: how to use bit manipulation to solve problems ealily and efficiently 的译文。这篇笔记整...
  • u012814856
  • u012814856
  • 2017年04月28日 17:45
  • 625

类反射机制

一、什么是反射:       反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。...
  • u011513323
  • u011513323
  • 2014年07月29日 16:06
  • 565

python的反射机制

获得对象使用__import__方法 获得对象的属性和方法使用getattr()方法 注意点: 1. 如下例子中, 'home.cates'文件夹下有'LoginError.py'文件, 文件包含...
  • oloop
  • oloop
  • 2014年03月05日 10:24
  • 4849

Struts工作机制?为什么要使用Struts?

基本简要流程如下: 1、客户端浏览器发出HTTP请求。 2、根据web.xml配置,该请求被FilterDispatcher接收。 3、根据struts.xml配置,找到需要调用的Action类和方法...
  • jxq0816
  • jxq0816
  • 2014年01月03日 20:33
  • 3398

深入理解struts的运行机制

在此申明本博文并非原创,原文:http://blog.csdn.net/lenotang/article/details/3336623,本文章是在此文章基础上进行优化。也谈不上优化,只是加上了点自己...
  • u013132051
  • u013132051
  • 2016年10月26日 20:02
  • 6075
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:运用类反射机制简化Struts应用程序的开发
举报原因:
原因补充:

(最多只允许输入30个字)