`
fslingmo
  • 浏览: 26353 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

struts1.x和2.x的线程安全

 
阅读更多

线程安全是每个多线程的程序都要考虑的问题,struts也不例外,如果处理不当,会出现问题,而且这种问题很难被排查出来,因此,需要在设计的时候就留意线程安全问题。

 

1.struts1.x

 

1.1Action是线程不安全的

 

struts1.x的Action在生命周期上与Servlet类似。Servlet由Tomcat容器并维护,而Action由Struts的ActionServlet产生并维护。每个Action都只有一个实例,在加载Struts时产生,在卸载Struts时销毁。

Struts用同一个Action的execute()方法处理所有特定URI的请求。例如用HelloAction来处理/hello.do,用PersonAction来处理/person.do。这些请求共同使用一个Action以及Action类属性等,因此Action与Servlet一样,都不是线程安全的。

由于Action 是线程不安全的,因此要避免写Action的属性。最好的办法是把Action属性置为final,禁止对其进行写操作,彻底避免线程不安全问题。

 

提示:Action中的属性最好标记为final,禁止对其进行写操作,避免线程不安全问题。

 

1.2 Form Bean是线程安全的

 

而Struts 1.x的Form Bean代表JSP表单,每次请求都会产生一个新的Form Bean,不会出现多个线程共有一个Form Bean的情况。因此Form Bean是线程安全的,Form Bean中可任意地定义可读写属性。

Struts 1.x里Action的单一实例特性节省了服务器的资源开支,算是一个优点,但是由此带来的线程不安全却为开发者带来了一些麻烦。到Struts 2.x中,Action中已经被设计wield线程安全的了,每个请求都会产生一个Action实例,请求处理完毕,Action实例即销毁。

 

2.Struts 2.x

 

线程安全

 

Struts1中所有的Action都只有一个实例,该Action实例会被反复使用。而Struts中每个Action都会有多个实例,处理一次请求生成一个实例,这些实例彼此独立,处理完毕即销毁。因此Struts 1的Action不是线程安全的,而Struts 2的Action是线程安全的,由于Action中没有其他特殊资源,使用完毕后被直接抛弃,而不会造成资源浪费。

分享到:
评论

相关推荐

    struts1&struts2

    Struts1和Struts2是两个著名的MVC框架,它们都是Apache软件基金会的Apache Struts项目的一部分,用于构建基于Java的Web应用程序。然而,两者在设计和实现上有显著的差异。 1. **架构模式的区别** - **Struts1.x** ...

    java框架面试题 ssh

    - **线程模式**:Struts 1.x Action是单例模式,需要处理线程安全问题,而Struts 2.x 为每个请求创建Action实例,避免了线程安全问题。 - **Servlet依赖**:Struts 1.x Action直接依赖Servlet API,Struts 2.x ...

    JAVA-SSH面试题.doc

    - 线程模式:Struts1.x的Action是单例的,需要保证线程安全,而Struts2.x为每个请求创建一个新的Action实例,避免了线程安全问题。 - Servlet依赖:Struts1.x的Action直接依赖于Servlet API,而Struts2.x减少了对...

    解决struts组件上传附件速度很慢的问题

    1. **使用多线程上传**:如果服务器支持,可以采用多线程或异步处理上传,将大文件分割成多个小块并行上传,这样可以显著提升上传速度。 2. **优化网络连接**:检查网络连接,确保服务器与客户端之间的带宽充足,...

    Java面试题专题之SSH框架-ssm框架面试题.docx

    - **线程模型**:Struts1.x的Action是单例的,需要处理线程安全问题;Struts2.x的Action默认为多例,每个请求对应一个新的实例。 - **配置方式**:Struts1.x的配置文件是struts-config.xml,而Struts2.x使用struts...

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

    在Struts 1.x版本中,Action对象也是被复用的,这就意味着如果Action类中包含实例变量,则可能会出现类似Servlet中的线程安全问题。 解决Struts Action的线程安全问题的方法与解决Servlet中的方法类似。通常建议...

    Structs1.x与Structs2.0的区别

    本文对Structs1.x和Structs2.0进行了详细的对比,从Action类、线程模式、Servlet依赖、可测试性、捕获输入、表达式语言、绑定值到页面和类型转换等方面进行了分析,帮助读者了解两者之间的差异,并为开发者提供了有...

    struts2-core-2.1.8.1 xwork-core-2.1.6源码

    1. **Action调度**:Struts2的核心在于Action类,它是业务逻辑的入口点。在`xwork-core-2.1.6`中,Action的调度机制是由`ActionInvocation`实现的,它负责调用Action的各个方法并管理拦截器链。`ActionProxy`则负责...

    Struts+Hibernate+Spring面试题合集及答案常见题目经典精选汇总大全.docx

    - Struts1.x的设计模式包括MVC模式和Front Controller模式,Controller(ActionServlet)接收所有请求,转发给相应的Action处理。 - Struts2.0引入了更多特性,如OGNL表达式语言,拦截器机制等,且提供了更灵活的...

    struts 1的标签的用法详细

    Struts 1 是一个经典的Java Web开发框架,它主要用于构建基于MVC(Model-View-Controller...虽然Struts 1 已经被更新的Struts 2 和其他现代框架所取代,但理解其基本概念和用法对于理解MVC架构和Web开发历史至关重要。

    struts+spring环境搭建

    - **线程模式**:Struts1采用单例模式,要求Action线程安全;Struts2则为每个请求创建Action实例,避免线程安全问题。 - **Servlet依赖**:Struts1的Action直接依赖于Servlet API,而Struts2 Action可以脱离容器...

    spring 3.x source code

    3. **Improved Asynchronous Support**:Spring 3.x增强了异步处理能力,支持非阻塞I/O和多线程处理,提升了Web应用的性能。 4. **RESTful Web Services**:通过Spring MVC的扩展,Spring 3.x更便于创建符合REST原则...

    struts 2.0.1

    Struts 2.0.1 是一个非常重要的Java Web开发框架,它是在早期的Struts 1.x基础上发展起来的,旨在提供更强大、更灵活的MVC(模型-视图-控制器)架构。这个框架的发布对于Java社区来说是一个里程碑,因为它极大地简化...

    Java框架面试题总结.pdf

    Struts1.x和Struts 2是两个不同的版本。Struts1.x是Struts框架的早期版本,Struts 2是Struts框架的最新版本。Struts 2相比Struts1.x具有许多改进,包括性能的提高、配置的简化等。 12. Struts的常用标签库及用法 ...

    Java框架面试题总结[定义].pdf

    Struts1.x和Struts 2的主要区别: 1. Struts 2使用了新的架构模型,提供了更好的性能和可扩展性。 2. Struts 2使用了新的配置文件格式,提供了更好的配置灵活性。 12. Struts的常用标签库及用法 Struts框架提供了...

    strust2 ppt

    相较于其前代Struts 1.x,Struts2具有更强大的功能和更好的灵活性。 首先,让我们深入了解一下Struts2的工作原理。当一个HTTP请求到达服务器时,请求会被一系列的过滤器(Filter)处理。其中,`...

    Struts2.0文档

    Struts2.0是Apache软件基金会的Jakarta项目下的一个开源产品,它是Struts1.x的升级版,提供了更多的特性和改进。它不仅继承了Struts1的优点,还吸收了其他框架如WebWork的精华,具有更好的灵活性和可扩展性。 **2. ...

Global site tag (gtag.js) - Google Analytics