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

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

   Java代码  收藏代码 【转】Strut2的属性驱动,模型驱动的理解 - JeromeCen - JeromeCen
  1. public   class  Login  implements  Action   //继承Action接口   
  2.   
  3.   {  
  4.      private  String username;  
  5.      private  String password;  
  6.    // 在属性驱动里面是依靠getter/setter方法获存取请求参数    
  7.    public   void  setUsername(String username)  
  8.       {  
  9.      this .username = username;  
  10.    }  
  11.   public  String getUsername()  
  12.   
  13.    {  
  14.      return   this .username;  
  15.       }     
  16.   
  17.    public   void  setPassword(String password)  
  18.   
  19.    {  
  20.    this .password = password;  
  21.    }  
  22.   
  23.    public  String  getPassword()  
  24.   
  25.    {  
  26.   
  27.        return   this .password;  
  28.   
  29.     }  
  30.   
  31. // 默认的方法   
  32.  public  String execute()  throws  Exception  
  33.   
  34.    {  
  35.    return  SUCCESS;  
  36.    }  
  37.   
  38. }  
  39.   

  40. 二、  模型驱动例子   
  41.   
  42. //模型使用JavaBean的设计方式   
  43. //和Struts1的ActionForm是一样   
  44. public   class  UserBean  
  45. {  
  46.     private  String username;  
  47.     private  String password;  
  48.     public   void  setUsername(String username)   
  49.     {  
  50.   
  51.          this .username = username;  
  52.   
  53.     }  
  54.   
  55.     public  String getUsername()  
  56.   
  57.    {  
  58.   
  59.         return   this .username;  
  60.   
  61.    }     
  62.   
  63.     public   void  setPassword(String password)  
  64.   
  65.    {  
  66.   
  67.        this .password = password;  
  68.   
  69.    }  
  70.   
  71.      public  String  getPassword()  
  72.   
  73.     {  
  74.   
  75.       return   this .password;  
  76.   
  77.      }  
  78. }  
  79.   
  80. //实现Action   
  81.   public   class  Login  implements  Action,ModelDriver<UserBean>  //必须继承ModelDriver 且指明具体的UserBean类型
  82.   
  83. {  
  84.    private  UserBean  model =  new  UserBean();  
  85.    public  String execute()  throws  Exception  
  86.   
  87.    {  
  88.   
  89.     if  (getMode().getUsername().equals( "scott" )   
  90.   
  91.        && getMode().getPassword().equeals("tiger" ) )  
  92.   
  93.    {  
  94.   
  95.           return  SUCCESS;  
  96.   
  97.     }  
  98.   
  99.   else   
  100.   
  101.      {  
  102.   
  103.          return  ERROR;  
  104.   
  105.     }  
  106.   
  107.    }  
  108.   
  109.     p ublic  UserBean getModel()  
  110.   
  111.   {   
  112.    return  model;  
  113.    }  
  114.    }    

其实,模型驱动必须实现ModelDriver接口,以及必须实现getMode()方法,该方法把Action和以及对应的Model实例关联。

配置属性驱动和模型驱动的方式一样,在struts.xml文件中配置对应的Action即可,那他怎么实现的?
那么,我们要看到 Struts2是一个拦截器为核心的框架 ,在struts_default.xml文件里面可以发现对应的拦截器的设置。

三、在JSP页面访问的区别:

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

  
<s:property value="username">

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

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

    但是,Struts2会自动识别使用何种驱动模式,省略model.系统仍能自动会关联到model.username的属性值。
  
四、选择属性驱动和模型驱动的问题:
当JSP表单的属性和
数据持久层对象的数据成员一致 的话就用strut2的模型驱动,代码统一。
当表单的属性和数据持久层对象的数据成员不一致的话就用属性驱动,因为如果用模型驱动要两个bean,一个与数据持久层对象,一个与提交的表单对应。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值