首先声明一遍MVC的编程思想:
VIEW中的参数传递到Controller
数据类型转换+数据验证
Controller调用下层的对象的方法处理业务
数据类型转换+数据验证
处理完成,返回数据,跳转到目标页面,并在页面中展示数据
1.controller的三种控制方式:
a.自定义控制器
b.实现Action接口的控制器
c.继承ActionSupport类的控制器
一般是选用第三种方式,因为可以使用ActionSupport提供的大量的辅助性功能,第二种也可以用,只不过辅助的功能较少,但是由于java的单继承机制,第三种的可拓展性不强,而实现接口的还可以实现多个接口,有利于大型项目的拓展,而第一种方式则不予以推荐!
2.前台数据传递到后台所用的三种方式:(大多数情况下,页面上的数据和数据库中的数据是一一对应的,但是也存在对应不上的情况,比如在修改密码时的确认密码,此时就需要一个实体类,来存放页面中特有的一些数据,eg:com.hchx.vo)
属性接受
前台表单中定义了不同的数据【有name属性的】
前台发送请求到服务器时
拦截器拦截到请求
拦截器自动获取到表单中的有name属性的表单元素
取出name属性的值,自动生成【set属性】字符串方法
<input type=”text” name=”username”/>
username-àsetUsername(String username);
从配置文件中获取到目标的Action对象的字符串
反射出Action对象,反射执行Action对象的set方法给属性赋值
后台Action中的属性,接收到前台页面传递过来的数据
域模型接受参数【店主推荐】
PO(persist object)对象——实体类——通常跟数据库字段一一对应的
PO对象用来保存对象到数据库
从数据库中读出数据记录,然后封装成PO对象
com.hchx.model->实体类
VO(value object)对象——实体类——通常跟网页上的数据一一对应
VO对象主要用来保存从页面上获取的数据
VO对象主要用来在页面上展示数据
PO对象和VO对象大部分情况下是一样的
如果PO对象和VO对象的字段不一致,在vo包中重新定义值对象
如果PO对象和VO对象的字段一致,直接使用PO对象
接受过程中需要注意的地方
页面参数的name属性值,使用[userVO.username]方式来定义
模型驱动接受参数【偶尔使用】
首先创建了一个VO模型对象
页面上提交表单到服务器【包含数据】
查看对应的Action是否实现了ModelDriven接口
目标Action已经实现了ModelDriven接口
1. 调用getModel()方法获取对象
给对象中的第一个属性赋值
2. 调用getModel()方法获取对象
给对象中的第二个属性赋值
……