java 模型驱动_(九)Struts2模型驱动和属性驱动
出于结构清晰的考虑,应该采用单独的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模型驱动和属性驱动相关推荐
- 九键输入java程序_九键怎么学
展开全部 首先要清楚九键的按键上分别分布了什么字母,九键分布的按键如下总结: 按键(1)上没有英文字母,(1)键32313133353236313431303231363533e4b893e5b19e ...
- Struts2的属性驱动与模型驱动的区别
1.Struts2的属性驱动. Struts2的属性驱动指的是在action中JSP页面的每一个form中的name都对应在action中有一个属性与之对应.看下面代码片段: <form act ...
- (九)模型驱动和属性驱动
出于结构清晰的考虑,应该采用单独的Model实例来封装请求参数和处理结果,这就是所谓的模型驱动, 所谓模型驱动,就是使用单独的JavaBean来贯穿整个MVC流程. 所谓属性驱动,就是使用属性来作为贯 ...
- Strut2的属性驱动,模型驱动的理解
因为在struts1的版本中,属性的拦截以及控制的处理是被封装为两个对立的ActionForm.Action来获取HttpServerRequest的参数.控制访问MAPPING的.而在Struts2 ...
- java 读取webapp文件_在Java Webapp和Java Normal应用中读取公共外部属性文件
但是,我们有以下一些特殊要求, Webapp将部署到tomcat. 格式为.jar的普通Java应用程序将放在/ myapp文件夹下 myappConfig.property文件将放置在/ myapp ...
- Struts2拦截器属性excludeMethods、includeMethods配置无效之解决方法
参考:http://blog.csdn.net/coolcoffee168/article/details/7963251 在配置struts2 拦截器属性excludeMethods.include ...
- JAVA入门_多线程_邮局派发信件
JAVA入门_多线程_邮局派发信件 Postman package cn.campsg.java.experiment.entity;public class Postman {private Str ...
- C/C++学习之路_九:文件操作
C/C++学习之路_九:文件操作 目录 概述 文件的顺序读写 文件的随机读写 windows和linux文本 获取文件状态 删除文件.重命名文件 文件缓冲区 1. 概述 1. 磁盘文件和设备文件 磁盘 ...
- java 多线程写缓存,Java多线程_缓存对齐
1.什么是缓存对齐 当前的电脑中,数据存储在磁盘上,可以断电保存,但是读取效率较低.不断电的情况下,数据可以在内存中存储,相对硬盘效率差不多是磁盘的一万倍左右.但是运算时,速度最快的是直接缓存在CPU ...
最新文章
- postgresql 基础sql
- Python Tornado
- Scrum 项目7.0
- P3934-Nephren Ruq Insania【欧拉定理,树状数组】
- ​通俗理解神经网络BP反向传播算法
- php2twig,symfony2 twig模板引擎,symfony2twig模板_PHP教程
- 基于Promise对象的新一代Ajax API--fetch
- html5的方框属性,HTML连载37-边框属性(下)、边框练习
- 对进程、线程和应用程序域的理解
- 在 可编辑的 Div 的 光标位置 插入 文字 或 HTML
- 让无代理设置参数的软件通过代理服务器联网
- Uniapp设置页面的背景图片
- Redhat下载地址
- 关于“软件设计师”考试的感悟分享
- 基于加密短信验证码的蓝牙智能锁设计
- 阿里一面面试题整理集合
- C语言实现Dijkstra算法(求解两点之间最短路径问题)
- mathtype试用期到后继续使用
- 论坚持的力量-知耻后勇
- setTimeout和for循环