本文转载于http://blog.csdn.net/yuhua3272004/archive/2009/03/31/4037671.aspx
struts是线程安全,并不是指多线程,而是指单态,当多个用户访问一个请求的时候,服务器内存中只有一个与之对应的action类对象,execute方法加上了同步关键字,如果你在action里加上一个全局变量,那么,多个客户访问的时候,这个变量是共有的,即一个客户修改了他,下一个客户获得的变量是修改后的,你可以写个demo来测试,至于多线程只是服务器在相应客户端请求时对于session的处理,并不是指struts action
Spring的MVC model类似于Struts。在多线程服务对象这点上,Spring的Controller类似于Struts Action,只有一个实例处理所有客户请求。
以上两点在今天才知道,惭愧啊。
如果在一个struts的Action或spring的Controller中使用了一个全局变量(类成员变量的话),当不同用户访问同一个action时,就会发生错误! 因为如上所述,服务器内存只有一个action类对象。恐怖啊!
唉,之前以为多线程的话就会在服务器为每个线程创建一个action对象呢~!!!! 狂晕
另外,本人在用spring做项目的时候也出现了类似的问题,我在MultiActionController中定义了一个全局的Page(分页算法的封装),导致了所有的用户都共用一个page对象,以致产生分页的页数出现混乱。
也就是说Spring的Controller不是多线程安全,Spring的Controller是singleton的.每个request过来,系统会用原有的instance处理,由于只有一个Controller的instance,当多个线程调用它的时候,它里面的instance变量不是线程安全的。
分享到:
相关推荐
在面试中,关于SSH(Spring、Struts、Hibernate)的知识点通常是Java Web开发人员必须掌握的核心内容。下面将详细解释这些技术的关键特性和应用场景。 1. **MVC设计模式** - **Model**:模型层负责业务逻辑和数据...
Struts 的 Action 都继承自 org.apache.struts.action.Action,而 Spring 中的继承关系更加复杂,涉及到多个模块和组件的继承关系。 五、实现国际化 实现国际化可以通过 Struts 提供的资源文件来实现。例如,编辑 ...
- **代理模式**:使用代理模式来替代Struts默认的Action实例创建机制,通过Spring上下文获取Action实例,而非直接使用new关键字。 - **Struts与Spring整合的注意事项**: - 避免直接在Action类中访问Spring上...
- 在 Struts1 中,Action 类通常应设计为无状态,以适应多线程环境。 - 考虑性能影响,合理规划 Struts1 的 Action 和 Spring Bean 的实例化策略。 Spring 和 Struts1 的整合,使得开发者可以利用 Spring 的优势...
同时,3.2版改进了缓存策略,提升了性能,并且对多线程和并发控制进行了优化。 这些CHM文件分别涵盖了Spring、Struts和Hibernate的核心概念、配置、API使用以及最佳实践。例如,Spring的CHM文件中会详细讲解IoC容器...
5. 实现业务逻辑,将Struts2的Action、Spring的Service和Hibernate的DAO组合起来。 通过这样的整合,开发者可以充分利用三个框架的优势,构建高效、稳定且易于维护的企业级应用。然而,随着技术的发展,现代的Java...
- **特殊情况下的线程安全性问题**:虽然 Struts 2 默认提供了线程安全性,但在某些特殊场景下仍需注意,比如使用了静态变量或依赖注入的对象可能会影响线程安全性。 - **结论**:Struts 2 采用每次请求创建新 ...
“Java开发中文教程”可能涵盖Java语言基础、进阶特性、异常处理、集合框架、多线程、IO流、网络编程等方面的内容。对于理解和使用Spring、Struts、Hibernate框架,扎实的Java基础知识是必不可少的。掌握Java语言的...
Hibernate 4引入了更多的性能优化,包括对JPA 2.1的支持,以及对多线程和并发处理的改进。它还提供了HQL(Hibernate Query Language),一种类似于SQL的面向对象查询语言,使得查询操作更加便捷。 在使用这个SSH-...
2. **Action实例管理**:Spring可以作为Struts2 Action的工厂,负责Action实例的生命周期管理,如单例或多例模式,这样可以避免在高并发场景下可能出现的线程安全问题。 3. **拦截器集成**:Spring AOP可以与Struts...
5. **线程安全问题**:默认情况下,Struts的Action是线程不安全的,这可能引发并发访问时的数据一致性问题。 6. **单一Action对应多个请求**:Struts框架默认设计为一个Action对应多个请求,这种设计在处理复杂的...
- **线程模式**:Struts1的Action是单例的,需要确保线程安全,而Struts2为每个请求创建新的Action实例,无需担心线程安全问题。 - **Servlet依赖**:Struts1的Action直接依赖于Servlet API,Struts2则减少了对...
Struts2的Action类默认情况下不是线程安全的,因为多个请求可能会共享同一个Action实例,导致数据冲突。确保Action线程安全的方法包括:声明局部变量、扩展RequestProcessor以每次创建新的Action实例,或者在Spring...
Hibernate4在此基础上增强了对JPA2.1规范的支持,提升了缓存机制,以及对多线程和并发控制的改进,使得数据持久化更为高效。 再者,Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它负责...
Struts、Hibernate、Spring 是Java开发中非常重要的三个框架,它们分别是用于构建MVC(Model-View-Controller)架构的Web应用、持久层管理和依赖注入的工具。在面试中,了解这三个框架的基本概念、工作原理以及如何...
- Struts1.x的设计模式包括MVC模式和Front Controller模式,Controller(ActionServlet)接收所有请求,转发给相应的Action处理。 - Struts2.0引入了更多特性,如OGNL表达式语言,拦截器机制等,且提供了更灵活的...
在实际运行中,用户通过Web界面上传、下载文件,这些操作会被Struts的Action转发到Spring管理的业务逻辑组件,这些组件再利用Hibernate与数据库进行交互。例如,当用户上传文件时,一个File实体会被创建并持久化到...
Struts2是基于Model-View-Controller(MVC)设计模式的Web应用框架,它强化了Action和Result的概念,提供了强大的标签库以及与各种视图技术的集成,比如JSP。在这个网络硬盘系统中,Struts2可能负责处理用户交互,...
在Struts中,控制器组件通常由Action类实现,这些Action类在处理请求时可能会涉及多线程。开发者需要理解框架的执行流程,以避免可能出现的线程冲突和同步问题。 4. **Spring**:Spring框架是Java EE领域的另一个...
总的来说,SSH Hibernate Spring Struts2这套组合提供了全面的Java Web开发解决方案,涵盖了MVC设计模式、ORM、依赖注入、事务管理等多个方面。通过深入理解和熟练掌握这些框架的API,开发者可以更高效地构建高质量...