项目中对一个表的增删该操作是用一个action,这个action有add,update,delete,save这些方法,添加和修改是共用一个页面,当页面得到id时代表进行的修改操作,反之是添加操作。因为在配置spring的bean是忘了写scope="prototype"所以每次添加时都显示最后一次访问过的记录
找了很长时间,原来是spring bean出了问题。 scope="prototype" 会在该类型的对象被请求时创建一个新的action对象。如果没有配置scope=prototype则添加的时候不会新建一个action,他任然会保留上次访问的过记录的信息。
webwork的Action不是线程安全的,要求在多线程环境下必须是一个线程对应一个独立的实例,不能使用singleton。所以,我们在Spring配置Webwork Action Bean时,需要加上属性scope=”prototype”或singleton=”false”。
spring片段代码
<!--↓=============ACTION==============↓-->
<bean id="userActicon" class="*******.UserAction" scope="prototype">
<property name="userService">
<ref bean="userService"/>
</property>
</bean>
<!--↑=============ACTION==============↑-->
singleton模式指的是对某个对象的完全共享,包括代码空间和数据空间,说白了,如果一个类是singleton的,假如这个类有成员变量,那么这个成员变量的值是各个线程共享的(有点类似于static的样子了),当线程A往给变量赋了一个值以后,线程B就能读出这个值。因此,对于前台Action,肯定不能使用singleton的模式,必须是一个线程请求对应一个独立的实例。推而广之,只要是带数据成员变量的类,为了防止多个线程混用数据,就不能使用singleton。对于我们用到的Service、Dao,之所以用了singleton,就是因为他们没有用到数据成员变量,如果谁的Service需要数据成员变量,请设置singleton=false。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在配置文件中,bean默认是单例模式,应用服务器启动后就会立即创建bean,以后就可以重复使用。 这带来一个问题,bean的全局变量被赋值以后,在下一次使用时会把值带过去。也就是说,bean是有状态的。 在web状态下,请求是多线程的,全局变量可能会被不同的线程修改,尤其在并发时会带来意想不到的bug。 而在开发时,访问量很小,不存在并发、多线程的问题,程序员极有可能会忽视这个问题。 所以在配置action bean时,应使用scope="prototype",为每一次request创建一个新的action实例。这 符合struts2的要求,struts2为每一个request创建一个新的action实例。当request结束,bean就会被jvm 销毁,作为垃圾收回
相关推荐
4. 在Spring配置文件中定义Action类Bean,并设置为原型(prototype)作用域。 5. 配置Hibernate的SessionFactory和DataSource。 在实际开发中,我们通常按照数据库层(POJO和Hibernate映射)、数据访问层(DAO)、...
- **Spring配置文件**:在Spring配置文件中定义Bean及其依赖关系,当需要更换实现类时,只需修改配置文件即可,无需修改代码。 - **IoC整合的注意事项**: - 使用接口而非实现类进行依赖。 - 推荐使用Spring...
maven3+struts2+spring+ibatis,本来是用maven3+struts2+spring+hibernate但考虑到hibernate在多表级联查询的时候执行效率不高,所以改用性能更好不过sql比较麻烦的的ibatis,本项目只有登录和插入数据,仅供参考: ...
在基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发中,开发者可以利用注解(Annotation)来简化配置,提高开发效率。这个开发模式结合了三个主流的Java EE框架:Struts2作为MVC框架处理前端请求,...
5. **Spring插件**:在Struts2中使用Spring插件(`struts2-spring-plugin.jar`),确保插件已添加到项目类路径中,并在Struts配置文件中启用插件。 6. **初始化顺序**:有时候,初始化顺序也可能导致问题。例如,...
由于Struts2中的Action对象是针对每个请求生成一个新的实例,而Spring默认使用`singleton`作用域来管理Bean。为了与Struts2保持一致,需要将Action的Scope设置为`prototype`或`session`。 - **`prototype`**:为每...
Struts2、Spring3和Hibernate3是Java Web开发中的三个重要框架,它们分别负责MVC模式中的动作控制、依赖注入和持久化管理。这三者的整合可以构建出高效、松耦合的应用系统。下面将详细讲解这三个框架的核心概念以及...
这个属于与Spring整合的问题,Spring容器在初始化对象的时候会根据bean的scope配置来考虑是重新建立一个对象,还是继续使用原来的对象,拿struts2的action的bean来说,如果scope这个参数没有配置,默认就是单例,即...
整合Struts2和Spring,首先需要在Struts2的配置文件`struts.xml`中添加Spring插件,这样Struts2可以通过Spring来管理Action类。接着,将Action类声明为Spring的bean,并在Spring的配置文件`applicationContext.xml`...
确保Action线程安全的方法包括:声明局部变量、扩展RequestProcessor以每次创建新的Action实例,或者在Spring中使用`scope="prototype"`配置来管理Action。 2. **Struts2的MVC实现** 在Struts2中: - **Model**:...
在`struts.xml`中,通过`objectFactory`属性设置为`springs`,使Struts2能与Spring的IOC容器集成,这意味着Struts2的Action类将由Spring容器创建和管理,具体配置如下: ```xml <constant name="struts....
Spring+Struts+Hibernate开发手册 本文将介绍SSH框架的开发手册,主要包括Spring、Struts和Hibernate三大模块的知识点。 一、目录结构 在SSH框架中,项目的目录结构主要包括以下几个部分: * doc目录:存放项目...
- **Spring的Scope="Prototype"管理**:利用Spring的bean管理功能,将Action的scope设置为"prototype",确保每次请求都会创建一个新的Action实例。 ### 2. Struts的MVC实现 Struts框架遵循经典的Model-View-...
- 在Spring配置文件中定义Action类及其依赖,Action类通常配置为`scope="prototype"`,以确保每次请求都能获得一个新的实例。 - 在Struts2的配置文件(通常是struts.xml)中,指定`<action>`元素的`class`属性为...
为了确保Action的线程安全性,我们可以在Spring配置中将其作用域设置为`prototype`,这样每次请求都会创建一个新的实例: ```xml <bean id="savePersonAction" class=...
为了确保线程安全,可以避免使用类变量,或者在Spring中将Action配置为原型(`scope="prototype"`),这样每次请求都会创建一个新的Action实例。 2. **Struts实现MVC**: 在Struts框架中,Model由JavaBean或EJB...
"spring_scope"可能涵盖了Spring的Bean作用域,如Singleton、Prototype、Request、Session等,以及它们在不同场景下的应用。 Hibernate是一个对象关系映射(ORM)框架,简化了数据库操作。"spring_hibernate_1"和...
### Struts + Spring + Hibernate 面试题解析 #### 1. AOP 和 IOC 的概念以及在 Spring 中的应用 **AOP(Aspect Oriented Programming,面向切面编程)**: 是一种编程思想,它允许程序员定义“切面”来封装那些...
确保Action线程安全的方式包括使用局部变量、每次请求时创建新的Action实例(例如通过Spring的`scope="prototype"`配置),或者扩展`RequestProcessor`以实现线程局部存储。 4. MVC模式在Struts中实现如下:Model由...
SSH 框架,全称为 Struts2、Spring 和 Hibernate 的组合,是Java Web开发中常用的三大框架。它们各自负责应用程序的不同层面:Struts2 负责表现层,Spring 提供业务逻辑支持和依赖注入,Hibernate 处理持久化层。在...