struts2跟spring整合的时候
<bean id="carModelAction" class="com.cheping.action.dictionary.CarModelAction" scope="prototype">
<property name="voteDAO" ref="voteDAO" />
<dwr:remote javascript="carModelAction"></dwr:remote>
</bean>
spring中的bean节点默认是singleton项目中的增删改查只针对一个action。
当应用struts2的时候若bean节点不使用prototype会使线程不安全出现不可预知的错误。比如有两个action。
userAction:
puserAction:
若bean节点scope不是prototype会造成usename和pass参数的覆盖(应该属于线程泄露吧)造成不可预知的CRUD后果。
顺便提一下struts与struts2这方面处理时的不同。struts与spring整合采用单例模式只创建一个action 那他为什么不会出现像struts2那样的错误呢。因为struts利用actionForm保证了form中参数的唯一性。一个action对应一个相应的actionForm,但是struts2没有啊他已经取消了actionForm那种做法采用的action方法与actionForm融为一体。
<bean id="carModelAction" class="com.cheping.action.dictionary.CarModelAction" scope="prototype">
<property name="voteDAO" ref="voteDAO" />
<dwr:remote javascript="carModelAction"></dwr:remote>
</bean>
spring中的bean节点默认是singleton项目中的增删改查只针对一个action。
当应用struts2的时候若bean节点不使用prototype会使线程不安全出现不可预知的错误。比如有两个action。
userAction:
public class userAction {
private String username;
private String pass;
public String check(String code){
String result = "ok";
return result;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
}
puserAction:
public class puserAction {
private String username;
private String pass;
public String check(String code){
String result = "ok";
return result;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
}
若bean节点scope不是prototype会造成usename和pass参数的覆盖(应该属于线程泄露吧)造成不可预知的CRUD后果。
顺便提一下struts与struts2这方面处理时的不同。struts与spring整合采用单例模式只创建一个action 那他为什么不会出现像struts2那样的错误呢。因为struts利用actionForm保证了form中参数的唯一性。一个action对应一个相应的actionForm,但是struts2没有啊他已经取消了actionForm那种做法采用的action方法与actionForm融为一体。