`
shaohan126448
  • 浏览: 116717 次
  • 来自: 北京
社区版块
存档分类
最新评论

Struts1与Struts2的线程安全问题

阅读更多

总的来说,Struts1的Action是单例模式,因此应用开发者必须保证它是线程安全的或者是同步的,因为Struts1中的每个Action仅有一个实例来处理所有请求。
   但是在用Struts1开发时并没有考虑到线程安全问题,这是因为我们在anction中使用的基本都是局部变量,而"局部变量是线程安全的。因为每执行一个方法,都会在独立的空间创建局部变量,它不是共享资源,局部变量包括方法的参数变量".
   在Struts1中,所有的变量都是定义在action中我们要执行的方法里的(Action中的excute方法或DispachterAction中指定要执行的方法),我们用于封装客户端请求参数的ActionForm,也是作为一个参数传入的,也属于局部变量,因此也不存在线程安全问题。

  Struts2  的Anction对象为每一个请求产生一个实例,因此虽然在Action中定义了很多全局变量,也不存在线程安全问题。
Struts2框架在处理每一个用户请求的时候,都建立一个单独的线程进行处理,值栈ValueStack也是伴随着局部线程而存在 的,在该线程存在的过程中,可以随意访问值栈,这就保证了值栈的安全性。

在Struts2中,ActionContext是一个局部线程,这就意味着每个线程中的ActionContext内容都是唯一的,所以开发都不用担心Action的线程安全。

分享到:
评论

相关推荐

    struts1,struts2,webwork,线程安全问题

    #### 二、Struts2与线程安全问题 Struts2框架设计时充分考虑了线程安全问题,主要体现在其默认使用“prototype”作用域来管理`Action`类实例,这意味着每次请求都会创建一个新的`Action`实例。 - **Struts2中...

    servlet与Struts action线程安全问题分析

    Struts2框架提供了多种策略来处理线程安全问题,包括Action实例的多例模式、使用拦截器进行同步控制等。开发者需要理解框架的工作原理,并结合最佳实践来避免线程安全问题。 总之,理解和处理Servlet和Struts ...

    Struts2与Struts1区别

    相比之下,Struts2 为每个请求创建一个新的 Action 实例,避免了线程安全问题。 3. **对 Servlet API 的依赖**: - Struts1 的 Action 直接依赖于 Servlet API,请求和响应对象会传入 execute 方法。而 Struts2 ...

    struts2 与 struts1的区别

    这种多例模式避免了线程安全问题,并且使得Action的开发变得更加简单直接。 #### 三、Servlet依赖性 - **Struts1** 的Action类依赖于Servlet API,因为每一次Action调用都会将`HttpServletRequest`和`...

    struts1和struts2的区别

    - **Struts2**: Struts2中的Action更像是工厂模式下的产品,每个Action实例都是线程安全的。Struts2提供了ActionSupport基类来简化Action的实现。Action本身可以是任何实现了特定接口的Java对象,甚至是普通的POJO。...

    servlet与Struts action线程安全问题分析(pdf)

    ### servlet与Struts action线程安全问题分析 #### 一、引言 随着互联网应用的不断普及和发展,基于Servlet和JSP技术的应用程序在企业级应用中占据着重要的位置。Servlet作为一种常用的技术栈,因其多线程运行特性...

    转:struts1与struts2的区别

    - **Struts2**: 在Struts2中,为每个HTTP请求创建一个新的Action实例,从而避免了线程安全问题。这一改变极大地简化了代码编写,并降低了出错的可能性。尽管servlet容器会为每个请求创建多个临时对象,但并不会对...

    Struts2和Struts1的区别,详细点,主要说说Struts2

    ### Struts2与Struts1的主要区别 #### Struts2架构设计与实现方式 - **Struts2**在设计上采用了更加灵活的方式,每个请求都对应一个实例化的Action对象,而不是像**Struts1**那样在整个请求周期内共享同一个Action...

    Struts1与Struts2本质区别

    - **Struts 2**:每个请求都会创建一个新的Action实例,消除了线程安全问题,同时也减少了开发者在处理并发请求时需要考虑的问题。 #### 3. Servlet依赖方面的对比 - **Struts 1**:Action的方法签名中包含了`...

    struts1和struts2区别

    - **Struts2**:Action对象为每个请求创建一个新的实例,消除了线程安全问题,提高了性能。 3. **Servlet依赖**: - **Struts1**:Action直接依赖于Servlet API,需要HttpServletRequest和HttpServletResponse...

    struts1和struts2的区别(详细)

    这就导致了如果在Action中保存实例变量,则可能会出现线程安全问题。此外,Struts1中的Action类必须实现`Action`接口,并重写`execute`方法来处理请求。 - **Struts2**: 相比之下,Struts2中的Action是多例的,每次...

    Struts1和Struts2的区别和对比

    相比之下,Struts2为每个请求创建新的Action实例,消除了线程安全问题,也简化了开发流程。 在Servlet依赖上,Struts1的Action直接依赖于Servlet API,这意味着Action的execute方法接收HttpServletRequest和...

    struts1&struts2

    - **Struts2** 为每个请求创建新的Action实例,解决了线程安全问题,同时也更易于管理和测试。 5. **Servlet依赖** - **Struts1.x** 的Action类直接依赖于Servlet API,这使得测试变得更加困难。 - **Struts2** ...

    struts1与struts2本质区别

    - **Struts2**:每个请求都会创建一个新的Action实例,消除了线程安全问题。这种模式使得Action设计更加简单直接,减少了因线程安全考虑带来的额外工作。 #### 三、Servlet依赖的对比 - **Struts1**:Action类直接...

    Struts线程安全

    ### Struts线程安全概述 在探讨Struts框架下的线程安全问题之前,我们需要了解一些基础知识。Struts是一个用于构建企业级Java Web应用程序的开源框架,它基于MVC(Model-View-Controller)设计模式。在典型的Web...

    struts1与struts2的区别

    【Struts1与Struts2的区别】 Struts2框架并非完全独立的新框架,而是基于WebWork框架进行发展的。WebWork的稳定性和性能为Struts2提供了坚实的基础,使其成为一个融合了Struts1和WebWork优势的强大力量。在设计上,...

Global site tag (gtag.js) - Google Analytics