出于结构清晰的考虑,应该采用单独的Model实例来封装请求参数和处理结果,这就是所谓的模型驱动,

所谓模型驱动,就是使用单独的JavaBean来贯穿整个MVC流程。

所谓属性驱动,就是使用属性来作为贯穿MVC流程的信息携带者,当然属性必须依附于对象,

这个对象就是Action实例。 简单说,模型驱动就是使用单独的javaBean封装请求参数。 属性驱动就是把属性写在Action类中。

我们发现上一章的jsp中的name必须前面得加 user.username。。太过麻烦。我们使用模型驱动来解决这个问题。实际开发中使用这种方式

一、模型驱动的要求

1.动作类实现ModelDriven接口

2.实现接口中的getModel方法,返回我们的数据对象。(实现中用泛型将确定传入模型 implements ModelDriven)

3.数据模型对象必须由我们实例化。

例子:

public class AdduserAction extends ActionSupport implements ModelDriven{

//数据模型对象由我们实例化

private User user=new User();

public User getUser() {

System.out.println("getuser");

return user;

}

public void setUser(User user) {

System.out.println("setuser");

this.user = user;

}

public String adduser(){

System.out.println(user.getUsername()+":"+user.getAge());

return null;

}

//实现接口方法,返回我们的数据模型对象

public User getModel() {

// TODO Auto-generated method stub

return user;

}

}

我们在jsp上就能像以前那样 ,name只用我们的参数相同即可

用户名:

年 龄:

原理:

其实这时候表单的name已经不仅仅是一个简单的字符串了。

这一系列的操作是由ModelDriven和params拦截器帮我们做的 。

params拦截器负责提取请求参数,如果是属性驱动模式,则还负责将请求参数传给Action类的属性

模型驱动的话就只提取请求参数。

ModelDriven拦截器会先判断我们的动作类是否属于ModelDriven类型

属于的话,就调用我们实现的getModel方法,获取我们传入的对象

然后将我们的对象给压入栈中

附:struts2注册案例

(1)我们先创建数据库表

create database demo;

use demo;

create table user(

username varchar(100) primary key,

password varchar(100),

birthday date,

hobby varchar(255),

married boolean

);

(2)在domain包创建我们的user实体类

public class User {

private String username;//用户名

private String password;//密码

private Date birthday; //生日

private String hobby; //爱好

private boolean married; //是否结婚

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public Date getBirthday() {

return birthday;

}

public void setBirthday(Date birthday) {

this.birthday = birthday;

}

public String getHobby() {

return hobby;

}

public void setHobby(String hobby) {

this.hobby = hobby;

}

public boolean isMarried() {

return married;

}

public void setMarried(boolean married) {

this.married = married;

}

}

(3)完成数据层,我们在Dao层处理数据

public class UserDao {

QueryRunner qr=new QueryRunner(JdbcUtils.getDataSource());

//根据名字查找用户

public User findUserByUsername(String username){

try {

String sql="select * from user where username=?";

return qr.query(sql, new BeanHandler(User.class),username);

} catch (Exception e) {

throw new RuntimeException(e);

}

}

//添加用户

public int addUser(User user){

String sql="insert into user values(?,?,?,?,?)";

Object []params={user.getUsername(),user.getPassword(),user.getBirthday(),user.getHobby(),user.isMarried()};

try {

return qr.update(sql,params);

} catch (SQLException e) {

throw new RuntimeException(e);

}

}

}

(4)完成业务逻辑层的编写,service层

public class UserService {

private UserDao userdao=new UserDao();

//注册

public int regist(User user){

return userdao.addUser(user);

}

//通过用户名查找用户

public User findByUsername(String username){

return userdao.findUserByUsername(username);

}

}

(5)创建web层,我们创建web层动作类

public class UserAction extends ActionSupport implements ModelDriven{

private User user=new User();

private UserService userservice=new UserService();

//注册方法

public String regist(){

User _user=userservice.findByUsername(user.getUsername());

//判断用户是否存在,存在返回exists字符串

if(_user!=null){

return "exists";

}

//获取注册成功更新的行数

int count=userservice.regist(user);

//如果>0,返回success

if(count>0){

return SUCCESS;

}

return null;

}

public Object getModel() {

// TODO Auto-generated method stub

return user;

}

public User getUser() {

return user;

}

public void setUser(User user) {

this.user = user;

}

}

(6)我们编写注册的jsp页面

用户名:

密 码:

生 日:

爱好:篮球

足球

写代码

已婚:

(7)配置 struts.xml

/success.jsp

/msg.jsp

java 模型驱动_(九)Struts2模型驱动和属性驱动相关推荐

  1. 九键输入java程序_九键怎么学

    展开全部 首先要清楚九键的按键上分别分布了什么字母,九键分布的按键如下总结: 按键(1)上没有英文字母,(1)键32313133353236313431303231363533e4b893e5b19e ...

  2. Struts2的属性驱动与模型驱动的区别

    1.Struts2的属性驱动. Struts2的属性驱动指的是在action中JSP页面的每一个form中的name都对应在action中有一个属性与之对应.看下面代码片段: <form act ...

  3. (九)模型驱动和属性驱动

    出于结构清晰的考虑,应该采用单独的Model实例来封装请求参数和处理结果,这就是所谓的模型驱动, 所谓模型驱动,就是使用单独的JavaBean来贯穿整个MVC流程. 所谓属性驱动,就是使用属性来作为贯 ...

  4. Strut2的属性驱动,模型驱动的理解

    因为在struts1的版本中,属性的拦截以及控制的处理是被封装为两个对立的ActionForm.Action来获取HttpServerRequest的参数.控制访问MAPPING的.而在Struts2 ...

  5. java 读取webapp文件_在Java Webapp和Java Normal应用中读取公共外部属性文件

    但是,我们有以下一些特殊要求, Webapp将部署到tomcat. 格式为.jar的普通Java应用程序将放在/ myapp文件夹下 myappConfig.property文件将放置在/ myapp ...

  6. Struts2拦截器属性excludeMethods、includeMethods配置无效之解决方法

    参考:http://blog.csdn.net/coolcoffee168/article/details/7963251 在配置struts2 拦截器属性excludeMethods.include ...

  7. JAVA入门_多线程_邮局派发信件

    JAVA入门_多线程_邮局派发信件 Postman package cn.campsg.java.experiment.entity;public class Postman {private Str ...

  8. C/C++学习之路_九:文件操作

    C/C++学习之路_九:文件操作 目录 概述 文件的顺序读写 文件的随机读写 windows和linux文本 获取文件状态 删除文件.重命名文件 文件缓冲区 1. 概述 1. 磁盘文件和设备文件 磁盘 ...

  9. java 多线程写缓存,Java多线程_缓存对齐

    1.什么是缓存对齐 当前的电脑中,数据存储在磁盘上,可以断电保存,但是读取效率较低.不断电的情况下,数据可以在内存中存储,相对硬盘效率差不多是磁盘的一万倍左右.但是运算时,速度最快的是直接缓存在CPU ...

最新文章

  1. postgresql 基础sql
  2. Python Tornado
  3. Scrum 项目7.0
  4. P3934-Nephren Ruq Insania【欧拉定理,树状数组】
  5. ​通俗理解神经网络BP反向传播算法
  6. php2twig,symfony2 twig模板引擎,symfony2twig模板_PHP教程
  7. 基于Promise对象的新一代Ajax API--fetch
  8. html5的方框属性,HTML连载37-边框属性(下)、边框练习
  9. 对进程、线程和应用程序域的理解
  10. 在 可编辑的 Div 的 光标位置 插入 文字 或 HTML
  11. 让无代理设置参数的软件通过代理服务器联网
  12. Uniapp设置页面的背景图片
  13. Redhat下载地址
  14. 关于“软件设计师”考试的感悟分享
  15. 基于加密短信验证码的蓝牙智能锁设计
  16. 阿里一面面试题整理集合
  17. C语言实现Dijkstra算法(求解两点之间最短路径问题)
  18. mathtype试用期到后继续使用
  19. 论坚持的力量-知耻后勇
  20. setTimeout和for循环

热门文章

  1. A - Mio visits ACGN Exhibition(dp)
  2. Java项目:ssm停车位租赁系统
  3. 如何查看office软件安装日志
  4. Oracle 本地登录和远程登录
  5. 之前做的一个关于支付安全的ppt,内容比较简单,分享给有需要的朋友。
  6. 面试时如何避免招到不合适的人选?
  7. oracle 序列详解
  8. 过年啦,说三件小事!
  9. QDialog 基本使用
  10. 【SpringMVC】自定义拦截器和过滤器