Struts2的模型驱动、属性驱动的理解

因为在struts1的版本中,属性的拦截以及控制的处理是被封装为两个对立的ActionForm、Action来获取HttpServerRequest的参数、控制访问的MAPPING的。而在Struts2中我们可以直接通过Action来获取请求参数,并把处理的资源映射返回给struts.xml指向对应的视图资源或者模型或者控制器进行下一步的处理。发现Action在Struts2中负责了struts1的ActionForm以及Action的双重任务,那么、我们如果习惯了struts1的开放方式的,在Struts中提供,模型驱动的方式来分解Action的任务,这种模式是通过专门的JavaBean来封装请求。

我们来比较一下:属性驱动和模型驱动的区别

属性驱动的例子:


public class Login implements Action //继承Action接口

{

private String username;

private String password;

// set,get方法 (在属性驱动里面是依靠方法获取请求参数)

public void setUsername(String username)

{

this.username = username;

}

public String getUsername()

{

return this.username;

}

public void setPassword(String password)

{

this.password = password;

}

public String getPassword()

{

return this.password;

}

// 默认的方法

public String execute() throws Exception

{

return SUCCESS;

}

}

模型驱动例子

//模型使用JavaBean的设计方式
//和Struts1的ActionForm是一样
public class UserBean
{
private String username;
private String password;
public void setUsername(String username)
{

this.username = username;

}

public String getUsername()

{

return this.username;

}

public void setPassword(String password)

{

this.password = password;

}

public String getPassword()

{

return this.password;

}
}

//实现Action

public class Login implements Action,ModelDriver<UserBean> //必须继承ModelDriver

{

private UserBean model = new UserBean();

public String execute() throws Exception

{

if (getMode().getUsername().equals("scott")

&& getMode().getPassword().equeals("tiger") )

{

return SUCCESS;

}

else

{

return ERROR;

}

}

public UserBean getModel()

{

return model;

}

}





其实,模型驱动必须实现ModelDriver接口,以及必须实现getMode()方法,该方法把Action和以及对应的Model实例关联。配置属性驱动和模型驱动的方式一样,在struts.xml文件中配置对应的Action即可,那他怎么实现的?

那么,我们要看到Struts2是一个拦截器为核心的框架,在struts_default.xml文件里面可以发现对应的拦截器的设置。

而我们在属性驱动模型下在JSP中访问属性时:

<s:property value="username">

而在模型驱动模型下在JSP中访问属性时:

<s:property value ="model.usename">

但是,Struts2会自动识别使用何种驱动模式,省略model.系统自动会关联到model.username的属性值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值