SSH-Struts(三)—ActionForm
ActionForm
ActionForm用于封装用户的请求数据。即用户在页面上输入的数据。它充当了一个运输工具的角色。为了能够立体的理解ActionFrom。以下从两个角度看看:
从封装的数据内容来看。通常实体对象是依据数据库的表来建立的,换句话说就是实体对象面对的是数据库。而ActionForm则面对的是界面上显示的数据。从作用来看。大家知道在没有引入Struts之前数据都是以页面上的元素为单位存放于Session或者request中。这种麻烦是取数据不方便。不够面向对象。
而ActionForm使得用户输入的和实体不正确应的数据也对象化了,以对象的方式存放在Session或者Request中。
ActionForm作用流程
通过一个时序图大概了解ActionForm的作用流程。由于没有先画类图,所以直接用文字描写叙述的。
多担待。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1b2ppYWppbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
作用域和生命周期
所谓生命周期就是ActionForm从创建到消亡的整个过程。从上面的时序图基本上也已经可以看个大概了。 ActionForm的生命周期有两种存在范围:request和session。
假设ActionForm存在于request范围,它仅在当前的请求生命周期中有效。
在请求从一个Web组件转发到还有一个Web组件的过程中,ActionForm实例一直有效。当server把响应结果返回给客户,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 :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 从用户输入端出发对数据做了一个封装,使得程序更加面向对象的。
它在运输中的作用!
版权声明:本文博主原创文章,博客,未经同意不得转载。
SSH-Struts(三)—ActionForm的更多相关文章
- struts(三)——struts框架实现登录示例
前两篇讲解了struts框架的基本实现,自己感觉讲的也有些枯燥,今天拿登录的例子来做一个实现. 1.新建一个javaweb项目,并将struts的jar包拷贝到WebRoot/WEB-INF/lib下 ...
- SSH—Struts(三)—跑步者(Action)
如已经描述Struts其基本原理和控制器ActionServlet,根据一个请求通过流ActionServlet之后就要到达Action类中做详细的处理了.ActionServlet通过ActionM ...
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别
SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层. SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,M ...
- 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓
hibernate工作原理 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提 ...
- 如何写一个SSH项目(三)如何进行交互的
下面以登录为例子,展示从前台到后端的一整套流程并进行分析. 首先介绍一下我的SSH的分层结构 action和service一起是业务逻辑层 action层调用service层 dao ...
- 如何增加黑客通过ssh入侵的难度--保护ssh的三把锁
源文档:https://blog.csdn.net/cnbird2008/article/details/6130696 简介 如果需要远程访问计算机并启用了 Secure Shell (SSH) 连 ...
- SSH(Struts、Spring、Hibernate)三大框架整合
1. 新建数据库ssh_db -> 新建表user_tb(id为主键,自动递增) 2. 导入jar包(struts.hibernate 和 spring) 3. 注册页面reg.jsp,将表单的 ...
- 菜鸟学SSH(三)——Struts2国际化自动检测浏览器语言版
前几天发了一篇Struts国际化的博客——<菜鸟学习SSH(二)——Struts2国际化手动切换版>,有网友提了一个意见,见下图: 于是就有了下面修改的版本: web.xml <?x ...
- [转] 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓
hibernate工作原理 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6 ...
- 保护SSH的三把锁
///////////////////////////////写在前面//////////////////////////////////////原帖地址:http://www.ibm.com/dev ...
随机推荐
- 一个Jquery特效(转)
见证花开!!码上有花 先看效果 尝试点击,IE9+ 画心 清空 ... 请自由点击画布 创意来自于网络 可搜搜[程序员表白] 看上去像是[当耐特]的作品的加工版本 代码 当然要自己写了 能力有限, ...
- Android_declare-styleable_自己定义控件的属性
1.简单实例 (1).在res/values文件下定义一个attrs.xml文件 <? xml version="1.0" encoding="utf-8" ...
- javascript---在自由落体实现
实现一些简单的物业自由落体需要理解: clientHeight:浏览器客户机的整体高度 offsetHeight:物(实例div)高低 offsetTop:从对象client最顶层的距离 简单demo ...
- HDOJ 5147 Sequence II 树阵
树阵: 每个号码的前面维修比其数数少,和大量的这后一种数比他的数字 再枚举每一个位置组合一下 Sequence II Time Limit: 5000/2500 MS (Java/Others) ...
- Mac下改动Android Studio 所用的JDK版本号
Mac下改动Android Studio 所用的JDK版本号 @author ASCE1885 近期项目从Eclipse+Ant构建模式转移到了Android Studio+Gradle构建模式.自然 ...
- iOS Foundation 框架基类
iOS Foundation 框架基类 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转 ...
- asp.net使用mysql数据库
Asp.net连接mysql 不推荐使用ODBC,推荐是用mysql官网提供的组件MySQL.Data.Dll,放在bin下面,添加引用即可 下面是封装的几个常用操作 using System; us ...
- C++类实现最大数的输出
Description 判断整数的大小,输入n个数,找出最大的数并输出. Input 有多组测试实例,输入n,并输入n个数. Output 输出的最大的数,每个输出结果占一行. Sample Inpu ...
- MVC5 Entity Framework学习参加排序、筛选和排序功能
上一篇文章实现Student 基本的实体CRUD操作.本文将展示如何Students Index页添加排序.筛选和分页功能. 以下是排序完成时.经过筛选和分页功能截图,您可以在列标题点击排序. 1.为 ...
- UVA 1411 - Ants(二分图完美匹配)
UVA 1411 - Ants 题目链接 题意:给定一些黑点白点,要求一个黑点连接一个白点,而且全部线段都不相交 思路:二分图完美匹配,权值存负的欧几里得距离,这种话,相交肯定比不相交权值小,所以做一 ...