`

Struts1中action线程安全问题

阅读更多


struts 1.x的一个安全性问题是值得注意的。因为过去的模式是前台页面数据通过actionForm传入,action中的excute方法接收,这个问题是不存在的。

但是,如果在action 中直接定义实例变量,问题就很大了。原因其实也很简单:
   
    为了确保线程安全(thread-safe),在一个应用的生命周期中,Struts框架只会为每个Action类创建一个Action实例(与servlet是一样的)。所有的客户请求共享一个Action实例,并且所有请求线程可以同时执行它的execute()方法。
所以,每个action只有一个实例, 在action打印this也可以看到, 确实是一样的,
所以,
不要在Action里面使用全局变量记忆数据, 没有意义而且不安全

使用actionForm则不会有问题,原因也很简单:
  
   actionForm 是通过参数形式传入action的,不存在共享变量的问题,其实每个request产生的actionForm实例也是不同的。

因此在使用struts 1.x的时候要注意线程安全性问题
分享到:
评论

相关推荐

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

    Servlet和Struts Action是两种常见的Java Web开发组件,它们在多线程环境下运行时可能存在线程安全问题。线程安全是指在多线程环境中,一个类或者方法能够正确处理多个线程的并发访问,保证数据的一致性和完整性。 ...

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

    在Struts1中,每个`Action`类实例是被多个请求重用的,这使得它在多线程环境下存在潜在的线程安全问题。当多个线程同时访问一个`Action`实例时,可能会因为共享状态而导致数据不一致或其他并发问题。 - **Struts1中...

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

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

    Struts中action线程安全问题解析

    然而,使用Struts框架时,开发者需要注意一个关键的安全问题,那就是Action类的线程安全问题。这个问题主要源于Servlet容器(如Tomcat)对Servlet的处理方式。 首先,我们需要理解Servlet的生命周期。Servlet在Web...

    Struts线程安全

    因此,如果Action类中有实例变量,它们可能会被多个线程共享并同时访问,从而引发线程安全问题。 - **使用局部变量**:局部变量是线程安全的,因为它们是在方法调用时在栈上分配的,每个线程都有其独立的栈空间。这...

    struts1和struts2的区别

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

    Struts2与Struts1区别

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

    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的区别(详细)

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

    转:struts1与struts2的区别

    - **Struts1**: Struts1中的Action采用单例模式,因此必须确保线程安全性。这意味着开发者需要特别注意Action类中的资源管理,确保其线程安全或进行适当的同步操作。 - **Struts2**: 在Struts2中,为每个HTTP请求...

    struts2 与 struts1的区别

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

    struts1和struts2区别

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

    Struts1小demo

    3. **Action**:Action是Struts1中的核心组件,负责处理用户的请求。每个Action对应一个特定的业务逻辑,当用户发送请求时,Struts1会根据struts-config.xml中的配置找到对应的Action进行处理。 4. **Form Beans**...

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

    - **Struts1**中的Action对象在整个请求周期内是单例模式的,这意味着所有请求都会共用同一个Action实例,这可能会导致线程安全问题。 - 相比之下,**Struts2**为每个请求创建一个新的Action实例,这不仅提高了安全...

    Struts1与Struts2本质区别

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

Global site tag (gtag.js) - Google Analytics