struts2 中属性驱动(其实就是struts2 action 中处理 request 的参数【old 方式servlet api 封装数据到javabean中(or beanutils)】),这里属性驱动是新方式

1、属性驱动

a\  一般的set

 public class UserAction extends ActionSupport {

 private String username;
private String password; public void setUsername(String username) {
this.username = username;
} public void setPassword(String password) {
this.password = password;
} @Override
public String execute() throws Exception {
System.out.println("username:" + username + "----password:" + password);
return NONE;
}
}

set 方式

页面层:

 <form action="${pageContext.request.contextPath}/user.action" method="post">
用户名
<input type="text" name="username" />
<br />
密码
<input type="password" name="password" />
<br />
<input type="submit" value="提交" />
</form>

jsp 页面

b\ognl 方式实现

     <form action="${pageContext.request.contextPath}/user2.action" method="post">
用户名
<input type="text" name="user.username" />
<br />
密码
<input type="password" name="user.password" />
<br />
<input type="submit" value="提交" />
</form>

jsp页面

action端:

 public class User2Action extends ActionSupport {

     private User user;

     public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} @Override
public String execute() throws Exception {
System.out.println(user.toString());
return NONE;
}
}

action 端

Struts2的参数的封装分成两类:

* 属性驱动:

* 模型驱动:

属性驱动:

一、提供属性的set方法,封装参数:(属性驱动)

页面:

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

Action:

public class ParamAction1 extends ActionSupport{

private String username;

public void setUsername(String username) {

this.username = username;

}

}

问题一:在Action中提供了全局变量,Action是线程安全的还是不安全?

* 提供了全局变量,如果是线程不安全的,全局变量就会有线程安全问题存在.测试提供一个构造方法.发现每次请求都会创建一个Action的实例.说明Action是多实例.不会有线程安全问题.

问题二:参数封装是由谁完成的?

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

这种方式不是特别好!封装的是单个属性,需要自己收到封装到一个JavaBean对象中.传递给业务层.

二、通过OGNL表达式的写法封装参数:(属性驱动)

页面:

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

Action:

public class ParamAction2 extends ActionSupport{

private User user;

public void setUser(User user) {

this.user = user;

}

public User getUser() {

    return user;

}

}

***** OGNL表达式封装,后台Action中提供一个对象的set和get方法.必须提供get方法.get获得到框架创建的对象.(将封装封装到不同的对象中.)

上一篇:北京南天软件java工程师面试题


下一篇:转发自AstralWind的博客(python正则表达式)