`

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

阅读更多

Struts中引入ActionForm类的意义与缺陷:

      在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把数据循环现实出来。代码通常都是这个样子:

<logic:present name=" array " scope="request">
<logic:iterate name=" array " id=" array " 
type="com.bhsky.webis.Goods">
	 <tr align="center"> 
	    <td class="table2">
<bean:write name=" array " property="goodsid"/>
</td>
		<td class="table2">
<bean:write name=" array " property="goodsname"/>
</td>
	  </tr>
  </logic:iterate> 
</logic:present>

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

Connection conn=DriverManager.getConnection("JDBC URL ");
      sql=" select *  from some tables ";
PreparedStatement stmt = conn.prepareStatement(sql);
      ResultSet rs = stmt.executeQuery();
ArrayList array=new ArrayList();
while (rs.next()) {
   AActionForm actionForm =new AActionForm ();
   actionForm.setId(rs.getString("Id"));
   actionForm.setName(rs.getString("Name"));           
   array.add(actionForm);
}

 

 

分享到:
评论

相关推荐

    Hibernate、Spring和Struts工作原理及使用理由

    8. **关闭SessionFactory**:在应用程序结束时,关闭SessionFactory以释放数据库连接。 **使用Hibernate的理由**: - **简化数据访问层**:Hibernate封装了JDBC,减少了很多重复的数据库操作代码。 - **ORM(对象...

    struts+spring+Hibernate

    3. **透明性**:使用 Java 反射机制而非字节码增强程序实现,使得 Hibernate 的使用更加简单直观。 4. **高性能**:轻量级框架,具有出色的映射灵活性,支持多种复杂的关系数据库模型。 5. **易于集成**:可以轻松地...

    Struts高级部分(2)(常用Action、验证框架、动态Form

    Struts是Java Web开发中的一个经典MVC框架,它为构建可维护的、结构清晰的Web应用程序提供了强大的支持。在Struts的高级部分,我们主要关注三个方面:常用Action、验证框架以及动态Form。 **一、常用Action** 1. *...

    Struts,Spring,Hibernate三大框架的面试[参照].pdf

    - **Spring框架**:不仅包含MVC(Model-View-Controller)架构,还有依赖注入、AOP(面向切面编程)、事务管理等功能,使得应用程序更易于测试和维护。 3. **Struts**: - **Struts框架**:是一个用于构建MVC架构...

    非常有用的SSH框架面试题.pdf

    它简化了JDBC访问数据库的代码,并作为主流的持久化框架,利用Java反射机制实现透明性。其工作流程包括: - 读取配置文件和映射信息 - 创建SessionFactory - 打开Session - 创建Transaction - 数据持久化操作 ...

    2022年StrutsHibernateSpring经典面试题收藏.doc

    Struts、Hibernate、Spring是Java Web开发中的三大框架,它们分别负责不同的职责,共同构建了高效、解耦的J2EE应用程序。Struts主要处理表现层逻辑,通过ActionServlet接收和处理用户请求,并将控制权交给业务逻辑层...

    JavaEE.doc

    - **反射**:理解反射机制,包括Class类的使用方法。 - **对象序列化**:掌握对象序列化的原理及其应用。 - **泛型**:学会使用泛型简化代码,提高代码的复用性和安全性。 - **多线程编程**:理解并发编程的基础...

    hibernate,struts,spring面试题总结.doc

    这三个框架组合在一起,可以构建出高效、松耦合且易于维护的Web应用程序。 【Hibernate 框架】 1. **工作原理**: - Hibernate通过读取配置文件(如hibernate.cfg.xml)来初始化设置。 - 解析映射信息(如.hbm....

    mvc开发模式

    总的来说,MVC模式是Web开发中的重要模式,它通过清晰地划分组件职责,提升了代码的可读性和可维护性,简化了复杂的Web应用程序设计。在实际项目中,理解并熟练运用MVC模式,有助于提高开发质量和效率。

    java学习代码

    Struts2作为一款强大的Java Web框架,它简化了开发流程,提供了丰富的UI标签库,可以方便地创建动态网页,其主题和模板功能使得页面样式定制更加灵活。 Struts2的主题和模板是其UI标签库的一部分,允许开发者通过预...

    大数据分析培训机构学习路线.pdf

    其中,反射机制允许程序在运行时动态获取类的信息并操作对象,而注解可以提供元数据,简化代码并增强可维护性。 其次,Java的多线程技术也是一大重点。课程会讲解线程的Join、notify、notifyAll等协作机制,以及...

    Java-项目经验.docx

    反射机制允许程序在运行时动态地获取类的信息并调用其方法,这是Java灵活性的体现。Class类、Method类和Field类是进行反射操作的主要工具,而Apache Commons的BeanUtils和PropertyUtils则简化了对象属性的设置和获取...

    java简历模版3.doc

    这些框架用于简化企业级应用程序的开发,如Spring的IOC和AOP机制,以及Mybatis和Hibernate在持久层的运用。 3. **ORM技术**:Hibernate作为ORM(对象关系映射)框架,求职者对其实现原理有深刻理解,能进行持久层...

    j2ee学习计划

    2. 掌握RMI(远程方法调用),理解其工作流程,编写和部署RMI应用程序。 3. 熟悉HTML基本语法和标签,为Web开发打下基础。 4. 学习JSP,掌握2.0版本的语法、隐含对象、EL表达式、JSTL以及自定义标签。 5. 理解...

    java技术java技术java技术java技术

    - **反射**:通过反射机制,程序在运行时可以获取类的信息(如字段、方法),甚至动态调用方法和创建对象,增强了程序的灵活性。 - **注解(Annotation)**:注解为代码提供了元数据,可被编译器或运行时环境用来...

    JSF 框架学习 共有8个PPT

    JSF(JavaServer Faces)是Oracle公司推出的用于构建Web应用程序的Java EE框架,它提供了一种组件化、事件驱动的开发模型,简化了用户界面的创建和管理。JSF的核心概念包括组件、事件、属性和转换器,这些元素共同...

    孔浩java学习视频全集

    6. **Web框架**:如Spring MVC或Struts,简化开发流程,提高开发效率。 7. **Tomcat服务器**:学习如何配置和部署Java Web应用。 通过"孔浩java学习视频全集",学习者可以逐步掌握Java编程和Web开发的基本技能,为...

    SSH理解(面试用)

    它负责管理应用程序中的对象(Bean),通过配置文件定义Bean的生命周期和依赖关系,然后使用反射机制动态地创建和装配Bean。 Spring框架的核心是IoC,它使得开发者无需手动创建对象,而是将对象的创建和管理交给了...

Global site tag (gtag.js) - Google Analytics