三级毛片免费看

全站资源开放下载,感谢广大网友的支持
链接失效请移步职业司平台
非盈利平台

非盈利平台

只为分享一些优质内容

Java帮帮-微信公众号

Java帮帮-微信公众号

将分享做到极致

微信小程序

微信小程序

更方便的阅读

职业司微信公众号

职业司微信公众号

实时动态通知

安卓APP

安卓APP

我们从此不分开

程序员生活志-公众号

程序员生活志-公众号

程序员生活学习圈,互联网八卦黑料

Action是如何接受请求参数的

19
发表时间:2018-01-16 17:48

属性驱动和模型驱动  

Struts2内部提供了参数封装功能,不需要使用BeanUtils进行封装。Struts2大部分内置功能都是拦截器实现的。

当点击登录提交表单时,就会被下面的拦截器进行封装,进行set注入值,实现参数封装。

<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

第一种Action 本身作为model对象,通过成员setter封装 (属性驱动 )

主要用于参数较少的封装,如果分层,不利于将数据传递到业务层。

页面:      

用户名:<input type="text" name="username" /> <br/>

Action:  

public class RegistAction1 extends ActionSupport {

    private String username;

    public void setUsername(String username) {

this.username = username;

}

}

Struts2 action是多实例,不会有线程安全问题,使用这种数据封装方式,数据封装到action属性中,不能将action对象传递给业务层,我们需要再单独定义javabean,将action属性封装到javabean。

第二种创建独立model对象,页面通过ognl表达式封装 (属性驱动)

具体封装流程如下:传递username,调用setUsername,把username注入User中,将会新建一个User对象,当第二个参数password传递过来时,struts框架将首先调用getUser方法询问User是否为空,如果为空,将会新建一个User,否则不会新建,直接注入值。如果只有一个Set方法,那么每set一次数据,就会新建一个User对象,那么就是把usernamepassword封装在两个不同的User对象中了。这样封装失败。

页面:

<!--基于OGNL表达式的写法-->

用户名:<input type="text" name="user.username" /> <br/>

 码:<input type="password" name="user.password" /> <br/>

model(User):

public class User {

   private String username;

   private String password;

   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;

   }

}

Action:

public class RegistAction2 extends ActionSupport {

   private User user;

public void setUser(User user) {

   this.user = user;

}

   //必须提供get方法(封装第一个参数时,创建新的User对象, 封装第二个参数需要使用第一个创建user对象)

public User getUser() {

   return user;

   }

}

params的拦截器完成参数的封装

<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

第三种使用ModelDriven接口,对请求数据进行封装 (模型驱动 ) ----- 企业开发的主流(模型驱动有很多特性)

<interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> 为模型驱动提供了更多特性

页面:

用户名:<input type="text" name="username" /> <br/>  

model(User):

public class User {

   private String username;

   private String password;

   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;

   }

}

Action :

public class RegistAction3 extends ActionSupport implements ModelDriven<User> {

   // 模型对象必须手动实例化

   private User user = new User();

public User getModel() {

   return user;

}

}

对比第二种、第三种第三种只能在Action中指定一个model对象(返回一个model对象),第二种可以在Action中定义多个model对象  

<input type="text" name="user.username" />

<input type="text" name="product.info" />


Java帮帮学习群生态

Java帮帮学习群生态

总有一款能帮到你

Java学习群

Java学习群

与大牛一起交流

大数据学习群

大数据学习群

在数据中成长

九点编程学习群

九点编程学习群

深夜九点学编程

python学习群

python学习群

人工智能,爬虫

测试学习群

测试学习群

感受测试的魅力

Java帮帮生态承诺

Java帮帮生态承诺

一直坚守,不负重望

初心
勤俭
诚信
正义
分享
友链交换:加帮主QQ2524138991 留言即可 24小时内答复  
业司
教育资讯
会员登录
获取验证码
登录
登录
我的资料
留言
回到顶部