SSH-Struts(三)—ActionForm

ActionForm

ActionForm用于封装用户的请求数据,即用户在页面上输入的数据。它充当了一个运输工具的角色。为了可以立体的理解ActionFrom,下面从两个角度看看:

从封装的数据内容来看,通常实体对象是根据数据库的表来建立的,换句话说就是实体对象面对的是数据库。而ActionForm则面对的是界面上显示的数据。从作用来看,大家知道在没有引入Struts之前数据都是以页面上的元素为单位存放于Session或者request中。这样的麻烦是取数据不方便,不够面向对象。而ActionForm使得用户输入的和实体不对应的数据也对象化了,以对象的方式存放在Session或者Request中。

ActionForm作用流程

通过一个时序图大概了解ActionForm的作用流程。因为没有先画类图,所以直接用文字描述的。多担待!

作用域和生命周期

所谓生命周期就是ActionForm从创建到消亡的整个过程,从上面的时序图基本上也已经能够看个大概了。 ActionForm的生命周期有两种存在范围:request和session。如果ActionForm存在于request范围,它仅在当前的请求生命周期中有效。在请求从一个Web组件转发到另一个Web组件的过程中,ActionForm实例一直有效。当服务器把响应结果返回给客户,ActionForm实例及其包含的数据就会被销毁。如果ActionForm存在于session范围,同一个ActionForm实例在整个HTTP会话中有效。也就是说只要浏览器不关闭,session不过期,ActionForm就存在。

动态ActionForm

使用ActionForm可以给开发者在处理HTML表单时带来极大的帮助,它简化了代码的编写,并提供了自动的数据验证。但是,ActionForm也存在几个非常明显的缺点。首先,如果ActionForm对应的HTML表单添加或删除一些属性,ActionForm类就可能需要修改并重新编译;其次,如果HTML表单是动态的,那么ActionForm更是无能为力了;另外,ActionForm增加了项目中类的绝对数量!

于是从Struts1.1起,就引入了动态ActionForm(DyanActionForm)概念。动态ActionForm使得用户无须为应用程序的每一个HTML表单创建具体的ActionForm类。Struts框架包中的DyanActionForm类及其子类实现了动态ActionForm。

配置动态ActionForm

动态ActionForm支持在Struts配置文件中完成ActionForm的全部配置,无须编写任何额外的JAVA代码。以下为示例:

<form-bean name="dynaFormForm" type="org.apache.struts.action.DynaActionForm">
           <form-property name="userName" type="java.lang.String" />
           <form-property name="userPwd" type="java.lang.String" />
</form-bean>

题外话——VO/DTO:

所谓的VO和DTO实际上就是两种数据传输对象,而ActionForm就是一种VO所以这里满引入这个内容。

  • VO :value object值对象 / view object表现层对象

  主要对应页面显示(web页面/swt、swing界面)的数据对象。可以和表对应,也可以不,这根据业务的需要。

在struts中,用ActionForm做VO,需要做一个转换,因为PO是面向对象的,而ActionForm是和view对应的,要将几个PO要显示的属性合成一个ActionForm,可以使用BeanUtils的copy方法。

  • DTO (TO) :Data Transfer Object数据传输对象

  用在需要跨进程或远程传输时,它不应该包含业务逻辑。比如一张表有100个字段,那么对应的PO就有100个属性(大多数情况下,DTO 内的数据来自多个表)。但view层只需显示10个字段,没有必要把整个PO对象传递到client,这时我们就可以用只有这10个属性的DTO来传输数据到client,这样也不会暴露server端表结构。到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO。

总结:ActionForm 从用户输入端出发对数据做了一个封装,使得程序更加的对象化。它扮演了一个运输工具的角色!

时间: 2025-01-31 19:50:22

SSH-Struts(三)—ActionForm的相关文章

JavaWeb_(SSH)struts.xml核心配置、动态方法调用、结果集的处理

前导博文 JavaWeb_(SSH)使用Struts框架实现用户的登陆 传送门 JavaWeb_(SSH)Struts创建Action的三种方式 传送门 核心配置 动态方法调用 结果集处理 一.核心配置 struts.xml <!-- name:配置包名 namespace:给action的访问路径定义一个命名空间 --> <package name="MyPackage" namespace="/user" extends="strut

Struts中ActionForm小结

要想明白struts的控制流程以及它核心API的实现原理(比如 Action/DispatchAction/ActionForm的实现原理),玩转struts1.2的关键就是能够玩转 ActionForm. ActionForm的应用 1.--ActionForm的特性 1.创建一个form类必须继承于四个父类中的一个,比如ActionForm.ValidatorForm. 2.一个form类中的每一个属性都将和页面中form表单中的每一个表单元素一一对应 Example: 一个表单为: <fo

RDP/SSH/VNC三种文件传输协议有什么区别?

客户端和终端主机之间的文件交互我们称之为文件传输.在主机运维过程中,我们常常需要进行文件传输,以确保网站能够正常运行.不同系统的服务器使用的文件传输协议不同,文件传输的方式也不尽相同.那么文件传输协议都有哪些?目前市面上主流的文件传输工具有哪些?RDP文件传输协议:RDP远程协议是一个多通道协议,让用户通过本地电脑连接远程服务器.大部分的Windows.Linux服务器都有相应的客户端. 行云管家基于B/S架构(Browser/Server,浏览器/服务器模式)设计,直接使用浏览器远程连接服务器

SSH—Struts(三)—执行器(Action)

前面已经介绍了Struts的基本原理和控制器ActionServlet,按照一个请求的流程经过了ActionServlet之后就要到达Action类中做具体的处理了.ActionServlet通过ActionMapping获取映射的Action对象,通过Action来完成请求的处理,最后Action返回一个ActionForward对象. Action的创建 当请求经过ActionServlet时,ActionServlet会根据请求中截取的地址搜索对应名字的ActionMapping,即Str

使用MyEclipse整合ssh(Struts、Spring、Hibernate)三大框架(环境搭载+实例源码下载)

前言 SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框架的系统从职责上分为四层:表示层.业务逻辑层.数据持久层和域模块层(实体层). Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持.Spring一方面作为一个轻量级的IoC容器,负责查找.定位.创建和管理对象及

SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别

SSH 和 SSM 的定义 本人经历过两种技术架构,分别是常说的 SSH 和 SSM ,SSH 在本科的时候老师就教过.SSM 则是去公司后用的比较多.现在我想将这两大阵营的技术做一下对比.由于本人能力有限,涉及技术较多,我只从具体的应用方面做一些对比. SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层. SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,MyBatis 负责持久化层. 共同之处是都使

Struts(三)

架构:        ===============================struts2 核心接口和类=========================名称                                作用ActionMapper        根据请求的URI查找是否存在对应Action调用ActionMapping        保存调用Action的映射信息,如namespace.name等ActionProxy         在XWork和真正的Action

ssh(struts,spring,hibernate)开发的初步集成01--依赖

一.概念 SSH 通常指的是 Struts2 做前端控制器,spring 管理各层的组件,hibernate 负责持久化层. SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,MyBatis 负责持久化层. 二.构建流程 创建maven工程...在pom.xml文件中配置需要的依赖 <properties> <java-version>1.8</java-version> <junit-version>4.8.2</ju

浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓

hibernate工作原理 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码. 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现.他很大程度的简化DAO层的编码工作 3. hib

SSH(三)资源分类和日志管理

上篇博文已经分别介绍了如何搭建SSH开发环境以及对SSH三个框架的整合.整合完成之后,我们基本上就可以正常的开始一个基于SSH框架开发的项目了.本篇博文介绍的资源分类和日志管理都是一些锦上添花的配置.利用这些,来清晰我们的思路,便利我们的编程. 先来说说资源分类吧.这里的资源分类是指对项目中代码或者配置文件等的一个分类管理.以下截图中的分类只是参考,主要是对于资源分类管理思想上的重视.我们要知道,一个结构清晰,骨架简洁的项目是极其方便团队开发,同时也可加快新人或者他人对该项目的理解. 再来说说日